Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· SecurityService
AccountSettingsController + Service für Telefon + Sicherheitsfragen hinzufügen (SP3)
Ermöglicht angemeldeten Benutzern, das Telefon zu setzen/verifizieren und 3 Sicherheitsfragen zu konfigurieren. Routen zu /api/account/* (session-authenticated via KSESSION_DATA).
· SecurityService
BulkTextSmsClient + EmailTemplateServiceClient + PasswordRecoveryController (SP3) hinzufügen
Vollständiger Passwort-Recovery-Flow: E-Mail-Link, SMS OTP, Sicherheitsfragen, Samen Phrase. Routen nach /api/wiederherstellung/* (unuthenttärkt). Verwendet SP1 E-Mail-Pipeline + VOIPService SMS.
· VOIPService
InternalAuthFilter + POST /api/bulktext/send für Service-to-Service SMS (SP3) hinzufügen
· kamo-shared-library
Recovery entities + repos hinzufügen; Bump auf 1.3.0 (SP3)
Fügt PasswordResetToken, SmsOtp, RecoverySession, AccountVerificationCode hinzu JPA-Einheiten mit entsprechenden Repositories für SP3-Rückgewinnungsfluss.
· kamo-shared-library
SecurityQuestionCatalog enum + sq1/2/3 + seedPhraseHash zum Benutzer hinzufügen (SP3)
· InitializerService
Fügen Sie SP3-Reheditionstabelle DDL + User-Spalte hinzu Ergänzungen zu SchemaCleanupRunner hinzu
· kamo-internal
Routenvorschau durch Browser's Backend-rendered modal (Teil von SP2)
Der EmailTemplateBrowser besitzt nun direkt das Vorschau-Modal, also Manager muss nicht mehr Zeilenebene-Vorschau-Anfragen abfangen und umleiten in den Bearbeitungsmodus.
· kamo-internal
Wire EmailTemplateEdit zu real API
Hydrat von templateApi.get, speichert über templateApi.update. Kategorie Dropdown ist API-getrieben mit Inline-Kategorie-Erzeugung. Variablen Picker liest aus variableContracts.ts (deklarierte Verträge für REQUIRED Template-Tasten; gemeinsames Set für CUSTOM). REQUIRED / SYSTEM-Reihenbearbeitung zeigt das entsprechende Warnbanner. Vorschau-Button öffnet die Backend-rendered EmailTemplatePreview modal. Teil von SP2.
· kamo-internal
Wire EmailTemplateBrowser zu real API + System Defaults Register hinzufügen
Ersetzte -140 Zeilen von Mock-Daten durch TemplateApi.list() Aufrufe. Bedingt fünfter Tab 'System Defaults' erscheint nur für Top-Level-Org-Administratoren und Renders von response.systemTemplates. Kategorie-Filter aus Kategorie Api.list( bemalt. Alle Reihenaktionen ************ Hit real Backend Endpoints. Fehler, die durch handleApiError Toast Helper geroutet werden. Teil von SP2.
· kamo-internal
E-MailTemplateDuplicateDialog hinzufügen (Teil von SP2)
· kamo-internal
EmailTemplateKategorieManager modal hinzufügen (Teil von SP2)
· kamo-internal
EmailTemplatePreview modal hinzufügen
Öffnet auf Zeilen-Action Vorschau. Backend-rendered via templateApi.preview(); Ergebnis in einem sandboxed iframe für Stil Isolation angezeigt. Matches exakte Code-Pfad, der das Senden verwendet, so dass das, was Sie vorher ansehen, ist, was Empfänger erhalten. Teil von SP2.
· kamo-internal
TemplateApi + categoryApi + variableContracts Client Module hinzufügen
Wraps SP1's /api/Email/templates/* und ************ Endpunkte mit typed TypeScript Helfern. variableContracts spiegelt SP1's TemplateKeys Javadoc so der Editor der Variable Picker zeigt erklärt Verträge für REQUIRED Vorlagen. Teil von SP2.
· SecurityService
Wire EmailTemplateSeedClient in ************
Thin RestTemplate Client, der POSTs zu EmailService's ************ nach einem org + Besitzer TeamMember sind beharrte. Retries zweimal mit Backoff; Ausfall wirft OrgProvisioningException und rollt die umgebende @Transactional so die org + owner-TeamMember save is an undone (pro SP1 spec). Spiegelt den bestehenden TranslateServiceClient X-Internal-Auther Muster. k8s/configmap.yaml fügt hinzu: email.service.url (EmailService intern URL) internal.auth.secret (cluster-widerzeit X-Internal-Auth Header Wert) pom.xml bumps kamo-shared-Bibliothek 1.1.0 . 1.2.0. Teil von SP1.
· EmailService
EmailTemplateKategorieController REST endpoints hinzufügen
************ CRUD. Löschantwort enthält reassignedCount - die Anzahl der Vorlagen, die nicht als ein Ergebnis der Entfernung der Kategorie. Sitzungskontext gelesen über die gleiche ************ Muster wie andere EmailService-Controller. Teil von SP1.
· EmailService
EmailTemplateController REST Endpoints + DTOs hinzufügen
Exposes /api/email/templates/* CRUD + Vorschau + Duplikat + Reset-to-default + service-to-service /send + /seed-org/{orgId'. Top-Level orgs (keine Eltern) siehe systemTemplates in der Listenantwort. Service-to-Service Endpunkte sind durch den bestehenden InternalAuthFilter geschützt. Sitzungskontext (orgID, memberID) lesen Sie aus dem REQ_ATTR_SESSION von OTKPreAuthFilter Attribut das gleiche Muster, das bereits von AliasController / MailboxController verwendet wird. Teil von SP1.
· EmailService
InternAuthFilter für Service-to-Service-Endpunkte hinzufügen
Validiert X-Internal-Auth Header auf /api/email/templates/send und /api/email/templates/seed-org/* Pfade. Andere Pfade umgehen diesen Filter (Benutzersitzung auth behandelt sie). Geheimnis kommt von INTERNAL_AUTH_SECRET env var. fügt auch transaktional.smtp.user / transaktional.smtp.pass hinzu Konfiguration Stubs von EmailTemplateService verbraucht - alle drei werden bezogen aus der in Produktion erhältlichen k8s configmap. Teil von SP1.
· EmailService
EmailTemplateKategorieService hinzufügen . CRUD für Org-scoped Kategorien
Case-unempfindliche Namensununempfindlichkeit pro org auf Service-Schicht durchgesetzt (passt mit dem teilweisen eindeutigen Index in der DB). Lösen nulls Kategorie_id auf betroffene Vorlagen vor dem Entfernen der Kategorie-Reihe. Teil von SP1.
· EmailService
E-MailTemplateService hinzufügen: CRUD + senden + Saatgut + Reset-to-default
Core orchestrator für transaktionale E-Mail. sendToUser löst die Vorlage, macht Subjekt/body, wählt die primäre Domäne der org von Organization.domains, und reicht ab zu EmailSmtpService mit NoReply@{org.domain-" als von Adresse. Inklusive SaatForOrg für New-Por Lebenszyklus-Hook und resetToDefault kopiert den Inhalt einer SYSTEM-Reihe über eine Zeile per-org REQUIRED. Auth für den Senden verwendet Cluster-weite transaktionale SMTP-Service-Anglaubigungen (transactional.smtp.user / transaktional.smtp.pass) statt der pro-Mitglied Provider-Entwickler - transaktionale Sendungen haben kein geschäftspflichtiges Mitglied. Teil von SP1.
· EmailService
NoReplySenderService für 'NoReply@{domain' von Adresse hinzufügen
Einzelne Wahrheitsquelle für Transaktions-E-Mail von Adressen. Akzept ein Domain-String, Kleinbuchstaben-Normalisierung, gibt "NoReply@<domain" zurück. Anrufer müssen die Org-Domain auflösen (über Organization.domains lookup oder ähnlich) und übergeben Sie es in. Teil von SP1.
· EmailService
TemplateRenderer für {{var-Ersatz hinzufügen
Staatenloser Regex-basierter Renderer. Fehlende Vars ersetzen leere Schnur und emittieren ein WARN-Log mit templateKey + orgId zur Zuordnung. Kein HTML-Emission in v1 - Werte sind servergesteuert. Teil von SP1.
· InitializerService
EmailTemplateSeedRunner für SYSTEM + per-org-Saatgut hinzufügen
Läuft unter @Order(20) auf KamoInitializerService Start. Lasten kanonisch templates aus Kamo-shared-Bibliotheksressourcen; upserts SYSTEM-Reihen (keine Clobber); Backfills pro-Org-Reihen für jede Org, die sie noch nicht hat. Idempotent - sicher auf jedem Start-up wieder zu laufen. Teil von SP1.
· InitializerService
Teilte Unikate + CHECK Einschränkungen für email_templates hinzufügen
Hibernate ddl-auto kann keine partiellen Indizes oder Rechen-CHECK erzeugen Zwänge. Diese Commit fügt sie über den bestehenden idempotent DDL-Läufer hinzu Muster nach Hibernate erstellt die Basistabellen aus den neuen Entitäten. Teil von SP1.
· kamo-shared-library
CanonicalTemplateLoader + CanonicalTemplate record hinzufügen
Lesen Sie die drei REQUIRED Vorlagen (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION) von Classpath-Ressourcen unter **************** Verzehrt von KamoInitializerService für SYSTEM-Row-Saatgutung. Teil von SP1.
· kamo-shared-library
kanonisches HTML + JSON für WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION hinzufügen
Source-of-Truth-Inhalte für SYSTEM-Reihen. Geladen bei KamoInitializerService Start von CanonicalTemplateLoader und UPSERTed in email_templates. Teil von SP1.
· kamo-shared-library
EmailTemplate Enterstelle + Repository hinzufügen
Speichert eine SYSTEM-Reihe pro template_key (org_id NULL, is_system TRUE) plus ein Klon pro org pro template_key. Soft-Referenz org_id/category_id. DB- angetriebene Zeitstempel; JSONB für body_blocks und Tags. Repository bietet org-scoped lookups, atomar use counter inkrement, und Kategorie-löschen Bereinigung über nullifyKategorieForOrg. Teil von SP1.
· kamo-shared-library
EmailTemplateKategorie Entität + Repository hinzufügen
Org-kopierte Kategorien für E-Mail-Vorlagen. Soft BIGINT org_id (keine FK) passt zu bestehenden Mustern. Case-unsensitive Namen Einzigartigkeit pro-Ort ist durch einen Teilindex, der in KamoInitializerService hinzugefügt wird, durchgesetzt. Teil von SP1.
· kamo-shared-library
TemplateStatus enum + Templates Konstanten für Transaktionsvorlagen hinzufügen
Erklärt die REQUIRED/CUSTOM/ARCHIVED Lebenszykluszustände und die drei erforderliche Vorlagen-Tasten (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION). Variable Verträge für jede REQUIRED Vorlage, die als Javadoc dokumentiert ist die Konstanten Klasse; SP3 und SP4 Anrufer beziehen diese. Teil von SP1.
· InitializerService
Seed KamoCRM mit ALL_WORK_ELIGIBLE auf frischen Installationen
Der createOrg() Helfer wendet dieses einzelne Argument auf beide an ageReqTypeMitglied und ageReqTypeTeamMitglied; im Einklang mit Plattform-Konvention. Paare mit KamoCRMAgeReqUpdateRunner, die behandelt bestehende Einsätze über ein bedingtes UPDATE. Vervollständigt SP5.
· InitializerService
Einfacher Läufer hinzufügen, um KamoCRM agereq zu ALL_WORK_ELIGIBLE zu migrieren
Bedingte idempotent UPDATE läuft auf Service-Start-up; WO Klausel überprüft der erwartete alte Wert, also sind Wiederholungen No-Ops. Fehler werden protokolliert und geschluckt - Start-up darf nicht auf diese unkritische Migration zu blockieren. Teil von SP5. Paare mit dem DataLoader bearbeiten in der nächsten Commit, die macht fresh installs den neuen Wert direkt.

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich