Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · 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).

  2. · 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.

  3. · VOIPService

    Add InternalAuthFilter + POST /api/bulktext/send for service-to-service SMS (SP3)

  4. · 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.

  5. · kamo-shared-library

    Adaugă întrebare de securitateCatalog enum + mp1/2/3 + semințePhraseHash la Utilizator (SP3)

  6. · InitializerService

    Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner

  7. · 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.

  8. · 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.

  9. · 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.

  10. · kamo-internal

    Adaugă e-mailTemplateDuplicateDialog (parte din SP2)

  11. · kamo-internal

    Adăugați EmailTemplateCategoryManager modal (parte din SP2)

  12. · 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.

  13. · 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.

  14. · 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.

  15. · 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.

  16. · 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.

  17. · 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.

  18. · 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.

  19. · 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.

  20. · 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.

  21. · 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.

  22. · 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.

  23. · 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.

  24. · 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.

  25. · 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.

  26. · 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.

  27. · 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.

  28. · 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.

  29. · 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.

  30. · 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