Salta al contenuto
KAMOUniverse

Changelog

Cosa c'è di nuovo.

Ogni miglioramento alla piattaforma, come si spedisce.

  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

    Aggiungere entità di recupero + repos; urto a 1.3.0 (SP3)

    Aggiunge PasswordResetToken, SmsOtp, RecoverySession, AccountVerificationCode entità JPA con corrispondenti repository per il flusso di recupero SP3.

  5. · kamo-shared-library

    Aggiungi SecurityQuestionCatalog enum + sq1/2/3 + seedPhraseHash all'utente (SP3)

  6. · InitializerService

    Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner

  7. · kamo-internal

    Anteprima del percorso attraverso il backend di Browser-rendered modal (parte di SP2)

    Il EmailTemplateBrowser ora possiede l'anteprima modale direttamente, quindi il Manager non ha più bisogno di intercettare richieste di anteprima a livello di riga e reindirizzare alla modalità di modifica.

  8. · kamo-internal

    Wire EmailTemplateEdit to real API

    Idrata da templateApi.get, salva tramite templateApi.update. Categoria dropdown è API-driven con la garanzia di creazione di categoria in linea. Variabili picker legge da variabiliContracts.ts (contratti dichiarati per REQUIRED chiavi modello; set comune per CUSTOM). REQUIRED / editing file SYSTEM mostra il banner di avviso appropriato. Anteprima pulsante apre il backend-rendered EmailTemplatePreview modal. Parte di SP2.

  9. · kamo-internal

    Wire EmailTemplateBrowser a API reale + aggiungere la scheda Default di sistema

    Sostituisce ~140 linee di dati mock con le chiamate templateApi.list(). Condizione quinta scheda 'System Defaults' appare solo per gli amministratori e i render di top-level-org da risposta.systemTemplates. Filtro categoria popolato dalla categoriaApi.list(). Tutte le azioni di riga E' vero. backend endpoints. Errori indirizzati attraverso la manigliaApiError tostapane helper. Parte di SP2.

  10. · kamo-internal

    Aggiungi EmailTemplateDuplicateDialog (parte di SP2)

  11. · kamo-internal

    Aggiungi EmailTemplateCategoryManager modal (parte di SP2)

  12. · kamo-internal

    Aggiungi EmailTemplatePreview modal

    Si apre su Anteprima azione riga. Backend-rendered tramite templateApi.preview(); risultato visualizzato in un iframe sabbiato per isolamento stile. Corrisponde alle percorso di codice esatto che l'invio utilizza, quindi quello che si prevede è ciò che i destinatari ottengono. Parte di SP2.

  13. · kamo-internal

    Aggiungi templateApi + categoriaApi + variabiliContraccia i moduli client

    E' una specie di... endpoints con helper TypeScript digitati. variabiliContratti specchi SP1 TemplateKeys Javadoc così il raccoglitore variabile dell'editor mostra dichiarato contratti per modelli REQUIRED. Parte di 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

    Aggiungi EmailTemplateCategoryService — CRUD per le categorie org-scope

    Caso-insensibile nome unicità per org applicato a livello di servizio (scelga l'indice unico parziale nel DB). Cancellazione nulls categoria id sui modelli interessati prima di rimuovere la riga di categoria. Parte della 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

    Aggiungi NoReplySenderService per 'NoReply@{domain}' dall'indirizzo

    Singola fonte di verità per e-mail transazionale da indirizzi. Accetta un stringa di dominio, abbassare-normalizza, restituisce "NoReply@θdomain>". I chiamanti devono risolvere il dominio dell'org (tramite Organization.domains lookup o simile) e passarlo dentro. Parte della SP1.

  21. · EmailService

    Aggiungi TemplateRenderer per la sostituzione {{var}}

    Render basato su regex senza stato. I vars mancanti sostituiscono la stringa vuota e emettere un registro WARN con templateKey + orgId per attribuzione. Nessuna fuga HTML in v1 — i valori sono controllati dal server. Parte della 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

    Aggiungi CanonicalTemplateLoader + CanonicalTemplate record

    Legge i tre modelli REQUIRED (WELCOME, PASSWORD RESET, EMAIL VERIFICAZIONE) dalle risorse dei percorsi di classe E' il momento giusto. Consumato da KamoInitializerService per la semina a dorsale SYSTEM. Parte della SP1.

  25. · kamo-shared-library

    Aggiungi HTML canonica + JSON per WELCOME, PASSWORD RESET, EMAIL VERIFICATION

    Contenuto fondamentale per le righe SYSTEM. Caricato su KamoInitializerService avvio da CanonicalTemplateLoader e UPSERTed in email templates. Parte della SP1.

  26. · kamo-shared-library

    Aggiungere EmailTemplate entità + repository

    Memorizza una riga SYSTEM per template key (org id NULL, is system TRUE) plus un clone per org per template key. Riferimento morbido org id/category id. DB... timestamp guidati; JSONB per body block e tag. Repository fornisce org-scoped lookups, uso atomico contro incremento, e categoria-delete pulizia tramite nullifyCategoryForOrg. Parte della SP1.

  27. · kamo-shared-library

    Aggiungi EmailTemplateCategory entità + repository

    Le categorie Org-scoped per i modelli di posta elettronica. Soft BIGINT org id (no FK) corrisponde a modelli esistenti. L'unicità del nome Case-insensibile per-org è applicato tramite un indice parziale aggiunto in KamoInitializerService. Parte della SP1.

  28. · kamo-shared-library

    Aggiungi TemplateStatus enum + TemplateKeys costanti per modelli transazionali

    Dichiara il ciclo di vita REQUIRED/CUSTOM/ARCHIVED e i tre chiavi di modello richieste (WELCOME, PASSWORD RESET, EMAIL VERIFICATION). Contratti variabili per ogni modello REQUIRED documentati come Javadoc su la classe costante; SP3 e SP4 chiamanti di riferimento questi. Parte della 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.

Il tuo universo ti sta aspettando.

Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.

Gratis per sempre — nessuna carta di credito richiesta