Değişiklik Günlüğü
Yeni ne var?
Gemideki her iyileştirme.
· SecurityService
Add AccountSettingsController + Service for phone + security questions (SP3)
Allows logged-in users to set/verify phone and configure 3 security questions. Routes to /api/account/* (session-authenticated via KSESSION_DATA).
· SecurityService
Add BulkTextSmsClient + EmailTemplateServiceClient + PasswordRecoveryController (SP3)
Full password recovery flow: email-link, SMS OTP, security questions, seed phrase. Routes to /api/recover/* (unauthenticated). Uses SP1 email pipeline + VOIPService SMS.
· VOIPService
Add InternalAuthFilter + POST /api/bulktext/send for service-to-service SMS (SP3)
· kamo-shared-library
Kurtarma varlıkları ekleyin + repos; 1.3.0 (SP3)
ŞifreResetToken, SmsOtp, RecoverySession, AccountVerificationCode SP3 kurtarma akışı için ilgili depozitleri olan JPA varlıklar.
· kamo-shared-library
GüvenlikQuestionCatalog enum + sq1/2/3 + tohumPhraseHash Kullanıcıya (SP3)
· InitializerService
Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner
· kamo-internal
Rota Tanıtımı Tarayıcının arka uç-rendered modal (SP2)
E-postaTemplateBrowser şimdi doğrudan Preview modale sahiptir, bu yüzden Manager artık satır seviyesindeki önbellek taleplerini engellemeli ve modu düzenlemeye yönlendirme.
· kamo-internal
Wire EmailTemplateEdit to real API
ŞablonApi.get'dan Hydrates, şablonApi.update aracılığıyla tasarruf eder. Kategori Kategori dropdown is API-driven with inline category-createholdance. Değişkenler Değişkenler picker değişkenContracts.ts (IQUIRED şablon anahtarları; CUSTOM için ortak set. REQUIRED / Siyon sıra düzenleme Uygun uyarı bayrağını gösterir. Preview düğmesi açılır backend-rendered EmailTemplatePauer modal. SP2'nin bir parçası.
· kamo-internal
Wire EmailTemplateBrowser'ı gerçek API + Add System Defaults sekmesine ekle
Değiştirler - şablonApi.list() çağrıları ile alay edilen verilerin 140 hatları. Koşullu beşinci sekme "Sistem Temsilleri" sadece üst düzey düzey yönetici için görünür ve verir Cevap.systemTemplates. Kategori filtre kategoriApi.list()'den doldurulur. Tüm satır eylemleri ************ gerçek vurmak gerçek Geri uç noktaları. Hatalar ApiError tost yardımcı ile yollandı. SP2'nin bir parçası.
· kamo-internal
EmailTemplateDuplicateDialog (SP2)
· kamo-internal
EmailTemplateKategoryManager modal (SP2)
· kamo-internal
E-TemplatePgang modal ekle
Açıklar line-action Preview. Backend-rendered via templateApi.pgang(); Sonuç, stil izolasyonu için kum kutulu bir iframe'de gösteriliyor. Maçlar Kullanımları gönderen tam kod yolu, bu yüzden önbellek hangi alıcılar alınır. SP2'nin bir parçası.
· kamo-internal
EkleApi + kategoriApi + değişkenContracts müşteri modülleri
Rolls SP1's /api / e-posta/templates/* ve ************************************ Türlü Tipiff yardımcıları ile uç noktaları. DeğişkenContracts Aynalar SP1'in TemplateKeys Javadoc böylece editörün değişken seçici şovları ilan edildi REQUIRED şablonları için sözleşmeler. SP2'nin bir parçası.
· SecurityService
Wire EmailTemplateSeedClient into ****************
Thin RestTemplate client that POSTs to EmailService's **************** after an org + owner TeamMember are persisted. Retries twice with backoff; failure throws OrgProvisioningException and rolls back the surrounding @Transactional so the org + owner-TeamMember save is undone (per SP1 spec). Mirrors the existing TranslateServiceClient X-Internal-Auth pattern. k8s/configmap.yaml adds: email.service.url (EmailService internal URL) internal.auth.secret (cluster-wide X-Internal-Auth header value) pom.xml bumps kamo-shared-library 1.1.0 → 1.2.0. Part of SP1.
· EmailService
Add EmailTemplateCategoryController REST endpoints
**************** CRUD. Delete response includes reassignedCount — the number of templates that became uncategorized as a result of removing the category. Session context read via the same **************** pattern as other EmailService controllers. Part of SP1.
· EmailService
Add EmailTemplateController REST endpoints + DTOs
Exposes /api/email/templates/* CRUD + preview + duplicate + reset-to-default + service-to-service /send + /seed-org/{orgId}. Top-level orgs (no parent) additionally see systemTemplates in the list response. Service-to-service endpoints are protected by the existing InternalAuthFilter. Session context (orgID, memberID) read from OTKPreAuthFilter's REQ_ATTR_SESSION attribute — the same pattern already used by AliasController / MailboxController. Part of SP1.
· EmailService
Servis uç noktaları için İçAuthFilter ekleyin
X-Internal-Auth Title on /api/email/temblocks /send and /api / e-posta/templates/seed-org/* yolları. Diğer yollar bu filtreyi atlar (Kullanıcı seansı onları idare eder). Gizli INTERNAL AUTH SECRET Env var. Ayrıca işlemsel.smtp.user / işlemal.smtp.passal. E-TemplateService tarafından tüketilen yapılandırılan ublar – tüm üçü kaynaklanmış Üretimde k8s configuremap'dan. SP1'in bir parçası.
· EmailService
E-postaTemplateKategoryService ekleyin - CRUD for org-scoped kategorileri için
Vakaya duyarlı isim, hizmet katmanında uygulanmış bir şekilde eşsizlik (Wondra'daki kısmi eşsiz indeksi birleştirir). Deletion nulls kategori id kategori sırasını kaldırmadan önce etkilenen şablonlar üzerinde. SP1'in bir parçası.
· EmailService
EmailTemplateService ekleyin - CRUD + gönderi + tohum + reset-to-default
İşlemsel e-posta için Core orkestrator. SendToUser şablonu çözer, Konu / sadece, org'un birincil domaini Organizasyondan alır. Alanlar, E-postaSmtpService with NoReply@{org.domain} as from-address. Yeni-org yaşam döngüsü kancası için tohum ekleyin ve oDefault'yu sıfırlayın Bir SYSTEM row's content over a per-org REQUIRED row. Gönderme için Auth, küme çapında işlemsel SMTP hizmeti kimlikleri (transactional.smtp.user / işlemal.smtp.pass) per-member yerine. Sağlayıcı çözümleyici - işlemsel gönderilen hiçbir oyuncuya sahip değildir. SP1'in bir parçası.
· EmailService
NoReplySenderService for 'NoReply@{domain} from-address
Adreslerden işlem-posta için tek gerçek kaynağı. Kabul Ediyor domain string, altcase-normalizes it, returns "NoReply@<domain>". Callers org's domain (via Organization.domains lookup org domains) çözmelidir. Benzer) ve içeri girin. SP1'in bir parçası.
· EmailService
Add TemplateRenderer for {{var}} substitution
Devletsiz regex tabanlı former. Eksiklikler boş dizeyi ve LinkKey + veyagId ile bir WARN logunu takmak. HTML kaçış yok v1'de - değerler sunucu kontrollüdür. SP1'in bir parçası.
· InitializerService
Add EmailTemplateSeedRunner for SYSTEM + per-org seeding
Runs at @Order(20) on KamoInitializerService startup. Loads canonical templates from kamo-shared-library resources; upserts SYSTEM rows (no clobber); backfills per-org rows for every org that doesn't yet have them. Idempotent — safe to re-run on every startup. Part of SP1.
· InitializerService
Add partial unique indexes + CHECK constraints for email_templates
Hibernate ddl-auto can't generate partial unique indexes or computed-CHECK constraints. This commit adds them via the existing idempotent DDL runner pattern after Hibernate creates the base tables from the new entities. Part of SP1.
· kamo-shared-library
CanonicalTemplateLoader + CanonicalTemplate kaydı
Üç REQUIRED şablonları okuyun (WELCOME, PASSWORD RESET, EMAIL VERIFICATION) sınıftaki kaynaklardan **************** Yemin ederim KamoInitializerService for SYSTEM-row tohuming. SP1'in bir parçası.
· kamo-shared-library
WELCOME için kanonik HTML + JSON, PASSWORD RESET, EMAIL VERIFICATION
SYSTEM rows için kaynak-gerçek içerik. KamoInitializerService'da yüklendi CanonicalTemplateLoader ve UPSER e-templates'a başladı. SP1'in bir parçası.
· kamo-shared-library
EmailTemplate varlık + repository
Stores one SYSTEM row per template key (org id NULL, is system TRUE) artı Şablon key başına bir klon. Soft-reference org id/category id. DB- tahrik süreleri; vücut blocks ve etiketler için JSONB. Repository sağlar org-skod görünümleri, atom kullanımı sayacı artışı ve kategori-delete Organizasyon için nullifyKategory aracılığıyla temizlenme. SP1'in bir parçası.
· kamo-shared-library
EmailTemplateKategory entity + repository
E-posta şablonları için Org-skod kategorileri. Soft BIGINT veyag id (No FK) Mevcut modeller. Case-in sensitive name uniqueness per-org is KamoInitializerService'da kısmi bir indeksle uygulanır. SP1'in bir parçası.
· kamo-shared-library
EkleStatus enum + TemplateKeys işlemsel şablonlar için sabitler
REQUIRED/CUSTOM/ARCHIVED yaşam döngüsü ve üç üç Gerekli şablon anahtarları (WELCOME, PASSWORD RESET, EMAIL VERIFICATION). Her bir REQUIRED şablonu için değişken sözleşmeler Javadoc olarak belgelendi Sürekli sınıf; SP3 ve SP4 çağrıcılar bunları referanslar. SP1'in bir parçası.
· InitializerService
Seed KamoCRM with ALL_WORK_ELIGIBLE on fresh installs
The createOrg() helper applies this single argument to both ageReqTypeMember and ageReqTypeTeamMember; consistent with platform convention. Pairs with KamoCRMAgeReqUpdateRunner which handles existing deployments via a conditional UPDATE. Completes SP5.
· InitializerService
Add one-time runner to migrate KamoCRM agereq to ALL_WORK_ELIGIBLE
Conditional idempotent UPDATE runs on service startup; WHERE clause checks the expected old value so re-runs are no-ops. Errors are logged and swallowed — startup must not block on this non-critical migration. Part of SP5. Pairs with the DataLoader edit in the next commit that makes fresh installs seed the new value directly.

Evreniniz sizi bekliyor.
Birkaç dakika içinde ücretsiz olarak başlatın. Hazır olduğunuzda ürünleri ekleyin - göç yok, yeni girişler yok.
Sonsuza kadar ücretsiz — kredi kartı gerekmiyor