Jurnal de schimbări
Ce e nou.
Fiecare îmbunătățire a platformei, pe măsură ce se livrează.
· 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
Adaugă entități de recuperare + repo; cucui la 1.3.0 (SP3)
Adaugă ParolaResetToken, SmsOtp, Sesiune de recuperare, Codul de verificare a contului Entitățile JPA cu depozite corespunzătoare pentru fluxul de recuperare SP3.
· kamo-shared-library
Adaugă întrebare de securitateCatalog enum + mp1/2/3 + semințePhraseHash la Utilizator (SP3)
· InitializerService
Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner
· kamo-internal
Previzualizarea traseului prin modul de predare a backendului Browser (parte din SP2)
EmailTemplateBrowser deține acum modul Preview direct, astfel încât Managerul nu mai trebuie să intercepteze cererile de previzualizare la nivel de rând și redirecţionează modul de editare.
· kamo-internal
Wire EmailTemplateEdit to real API
Hidrate din șablonApi.get, salvează prin șablonApi.actualizare. Categorie Dropdown este condus de API cu inline categorie-creare de costuri. Variabile Alegeți citiri din contracte variabile.ts (contracte declarate pentru REquired șablon chei; set comun pentru CUSTOM). REquired / System row editing indică bannerul de avertizare corespunzător. Butonul previzualizare deschide e-mailTemplatePreview modal. Parte din SP2.
· kamo-internal
Wire EmailTemplateBrowser to real API + add System Implicits tab
Înlocuiește ~140 linii de date simulate cu șablonApi.list() apeluri. Condiționat fila a cincea "System Implicits" apare numai pentru administratori de top-org și redă de la sistemul de răspuns. Filtru de categorie populat din categoriaApi.list(). Toate acțiunile la rând A lovit cu adevărat. Obiectivele finale ale platformei. Erori rutate prin mânerApiError ajutor toast. Parte din SP2.
· kamo-internal
Adaugă e-mailTemplateDuplicateDialog (parte din SP2)
· kamo-internal
Adăugați EmailTemplateCategoryManager modal (parte din SP2)
· kamo-internal
Adaugă e-mailTemplatePreview modal
Se deschide pe rand de actiune Preview. Previzualizare rezultat afişat într-un iframe cu nisip pentru izolare stil. Se potriveşte Traseul exact de cod care trimite folosește, astfel încât ceea ce previzualizare este ceea ce primesc destinatarii. Parte din SP2.
· kamo-internal
Adaugă șablonApi + categorieApi + module client contracte variabile
Wraps SP1's /api/email/templels/* and *************** criteriile de evaluare cu ajutorul tipScript. contracte variabile oglinzi SP1 ȘablonKeys Javadoc astfel încât editorul lui variabilă arată contracte pentru șabloane solicitate. Parte din SP2.
· 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
Add InternalAuthFilter for service-to-service endpoints
Validates X-Internal-Auth header on /api/email/templates/send and /api/email/templates/seed-org/* paths. Other paths bypass this filter (user session auth handles them). Secret comes from INTERNAL_AUTH_SECRET env var. Also adds transactional.smtp.user / transactional.smtp.pass config stubs consumed by EmailTemplateService — all three are sourced from the k8s configmap in production. Part of SP1.
· EmailService
Add EmailTemplateCategoryService — CRUD for org-scoped categories
Case-insensitive name uniqueness per org enforced at service layer (matches the partial unique index in the DB). Deletion nulls category_id on affected templates before removing the category row. Part of SP1.
· EmailService
Add EmailTemplateService — CRUD + send + seed + reset-to-default
Core orchestrator for transactional email. sendToUser resolves the template, renders subject/body, picks the org's primary domain from Organization.domains, and hands off to EmailSmtpService with NoReply@{org.domain} as from-address. Includes seedForOrg for new-org lifecycle hook and resetToDefault that copies a SYSTEM row's content over a per-org REQUIRED row. Auth for the send uses cluster-wide transactional SMTP service credentials (transactional.smtp.user / transactional.smtp.pass) rather than the per-member provider resolver — transactional sends have no acting member. Part of SP1.
· EmailService
Adăugare fără răspunsSenderService pentru 'NoReply@{domeniu}' from-adresă
O singură sursă de adevăr pentru e-mail tranzacţional de la adrese. Acceptă domeniu șir, minuscule-normalizează, întoarce "NoReply@<domain>." Apelantii trebuie sa rezolve domeniul org (prin intermediul Organizatiei.domenii cautare sau similar) și să-l treacă în. Parte din SP1.
· EmailService
Adaugă expeditor cu șablon pentru substituția {var}}
Regex fără stat. Vars lipsă substituie șir gol și emite un jurnal WARN cu șablonKey + orgId pentru atribuire. Nicio scăpare HTML în v1 Parte din SP1.
· 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
Adaugă înregistrare canonicăTemplatăLoader + Templier canonic
Citește cele trei șabloane solicitate (BINE, PASSWORD RESET, EMAIL VERIFICARE) din resurse de clasă la Nu-ţi face griji. Consumat de KamoInitializerService for System-row seeding. Parte din SP1.
· kamo-shared-library
Adaugă HTML canonic + JSON pentru Welcome, PASSWORD RESET, EMAIL VERIFICARE
Conținutul sursei adevărului pentru rândurile de sistem. Încărcat la KamoInitializerService Startup by CanonicalTemplateLoader and UPSERTED into email templels. Parte din SP1.
· kamo-shared-library
Adaugă entitate e-mailTemplate + depozit
Stochează un rând de sistem pe șablon cheie (org id NULL, is system TRUE) plus o clonă per org per șablon cheie. Soft-reference org id/category id. DB- marca temporală acționată; JSONB pentru blocuri și etichete. Depozitul prevede Lookup-uri org-scope, contor de utilizare atomică increment, și categoria-delete Curățare prin anularea CategorieForOrg. Parte din SP1.
· kamo-shared-library
Adaugă entitate din categoria EmailTemplate + depozit
Categorii telescopice pentru șabloane de e-mail. BIGINT moale org id (fără FK) se potriveşte cu modelele existente. Denumirea insensibilă a cazului unicitatea per-org este aplicat printr-un indice parțial adăugat în KamoInitializerService. Parte din SP1.
· kamo-shared-library
Adaugă șablonStatus enum + ȘablonChei constante pentru șabloane tranzacționale
Declară stările de viaţă cerute/CUSTOM/ARHIVED şi cele trei tastele de șablon necesare (BUN VENIT, PASSWORD RESET, EMAIL VERIFICARE). Contracte variabile pentru fiecare șablon REquired documentat ca Javadoc pe clasa constantelor; apelanții SP3 și SP4 fac trimitere la acestea. Parte din SP1.
· 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.

Universul tău te așteaptă.
Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.
Gratuit pentru totdeauna — nu este necesar un card de credit