Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· SecurityService
Dodaj AccountSettingsSAdministrator + Usługa dla telefonów + pytania bezpieczeństwa (SP3)
Umożliwia zalogowanym użytkownikom ustawione/weryfikowanie telefonu i skonfigurowanie 3 pytań zabezpieczających. Trasy do /api/konto/o (sesyjne – za pośrednictwem KSESSION_DATA).
· SecurityService
Dodaj grę BulkTextSmsClient + EmailTemplateServiceClient + PasswordRecoveryController (SP3)
Pełny przepływ odzyskiwania hasła: e-mail-link, SMS OTP, pytania bezpieczeństwa, fraza nasiona. Trasy do /api/recover/ (nieuwierzytelniona). Używa rurociągu poczty elektronicznej SP1 + VOIPService SMS.
· VOIPService
Dodaj do koszyka InternalAuthFilter + POST /api/bulktext/wysekcje dla SMS--do-usług (SP3)
· kamo-shared-library
Dodaj jednostki odzysku + repozys; bump do 1.3.0 (SP3)
Dodaje PasswordResetToken, SmsOtp, RecoverySession, AccountVerificationCode Podmioty JPA z odpowiednimi repozytoriami dla przepływu odzyskiwania SP3.
· kamo-shared-library
Dodaj SecurityQuestionCatalog enum +/2 sq1/2/3 + seedPhraseHash do użytkownika (SP3)
· InitializerService
Dodaj tabelę odzyskiwania SP3 DDL + dodane do kolumny SchemaCleanupRunner
· kamo-internal
Podgląd trasy przez backendowy modal Browser (część SP2)
EmailTemplateBrowser jest teraz właścicielem modalu Preview bezpośrednio, więc Menedżer nie musi już przechwytować żądań podglądu na poziomie wiersza i Przekierowanie do trybu edycji.
· kamo-internal
Wire EmailTemplateEdytuj do prawdziwego API
Nawodnienia z templateApi.get, zapisy za pośrednictwem templateApi.update. Kategoria Rozpad jest oparty na API z inline-create afordance w kategorii. Zmienne Wybórnik czyta ze zmiennychKontrakty.ts (zadeklarowane umowy dla WYMAGANYCH Klucze szablonu; wspólny zestaw dla CUSTOM). WYMAGANE / SYSTEMowe Edycja wiersza Pokazuje odpowiedni baner ostrzegawczy. Przycisk podglądu otwiera Zaplecza podniecała EmailTelatePreview modal. Część SP2.
· kamo-internal
Wire EmailTemplateBrowser do prawdziwego API + dodaj kartę Domyślne domyślne
Zastępuje 140 linii danych próbnych wywołaniami templateApi.list(). Warunkowe Piąta zakładka "System domyślnie" pojawia się tylko dla administratorów i renderów na najwyższym poziomie Od response.systemTemplates. Filtr kategorii omieszczony z kategoriiApi.list(). Wszystkie akcje wioślarzowe - trafione real Punkty końcowe backend. Błędy kierowane przez uchwytApiPoczta tost helper. Część SP2.
· kamo-internal
Dodaj e-mailTemplateDuplicateDialog (część SP2)
· kamo-internal
Dodaj e-mailTemplateCategory Modal (część SP2)
· kamo-internal
Dodaj e-mailProsmodalTemplatePreview
Otwiera się na podgląd w akcję wozówką. Backend-rendered via templateApi.preview(); Wynik wyświetlany w piaskownicy iframe dla izolacji stylu. Pasuje do: Dokładna ścieżka kodu, której używasz, więc to, co podglądasz, jest tym, co otrzymują odbiorcy. Część SP2.
· kamo-internal
Dodaj templateApi + categoryApi + zmienne moduły klienta
Wraps SP1's /api/email/plats/pl-es/a - i . Punkty końcowe z typed TypeScript helpers. zmienneKontrakty Lusterka SP1's TemplateKeys Javadoc więc zmienny numernik edytora zadeklarowany Kontrakty na wymagane szablony. Część SP2.
· SecurityService
Wire EmailTemplateSeedClient do -
Thin RestTemplate klient, który POSTuje się do poczty e-mailService Po org + właściciel TeamMember Wytrwale. Retries dwa razy z backoffem; porażka rzuca OrgProvisioningException I cofa otoczenie ?Transactional, więc org + właściciel-TeamMember Oszczędność jest cofana (w specyfikacji SP1). Odzwierciedla istniejący TranslateServiceClient Wzór X-Internal-Auth. k8s/configmap.yaml dodaje: email.service.url (Wewnętrzny URL usługi EmailService) internal.auth.secret (luster o szerokości całego nagłówka X-Internal-Auth) Pom.xml bumps kamo-shared-library 1.1.0 x 1.2.0. Część SP1.
· EmailService
Dodaj e-mailTemplateCategory Kontroler REST punkty końcowe
CRUD. - Usunięcie odpowiedzi obejmuje ReasededCount – liczba szablonów, które stały się niekategoryzowane jako Wynik usunięcia kategorii. Kontekst sesji odczytywany za pomocą tego samego - wzór jako inne kontrolery EmailService. Część SP1.
· EmailService
Dodaj e-mailTemplateController Punkty końcowe REST + DTO
Ekspozycje /api/email/templates/? CRUD + podgląd + duplikat + reset-to-default + service-to-service /send + /seed-org/orgId. orgi najwyższego poziomu (bez rodzica) Zobacz także systemTemplates w odpowiedzi na listę. Usługa do obsługi Punkty końcowe są chronione przez istniejący InternalAuthFilter. Kontekst sesji (IDID, memberID) odczytany z atrybutu REQ_ATTR_SESSION OTKPreAuthFilter — To sam wzór już używany przez AliasController / MailboxController. Część SP1.
· EmailService
Dodaj InternalAuthFilter dla punktów końcowych usługi
Walifikuje nagłówek X-Internal-Auth na /api/email/templates/send i /api/email/templates/seed-orgs/' ścieżki. Inne ścieżki omijają ten filtr (Sedaż sesji użytkownika auth je obsługuje). Tajemnica pochodzi z INTERNAL_AUTH_SECRET env var. Dodaj też transakcję.smp.user / transakcja.smtp.pass Konfiskatowe kikuby konsumowane przez EmailTemplateService — wszystkie trzy są pozyskiwane Z mapy konfigowej k8s w produkcji. Część SP1.
· EmailService
Dodaj e-mailTemplateCategoryService — CRUD for org-scoped kategorii
Niewrażliwa na przypadek wymierna nazwa na org w warstwie usługowej (dopasuje częściowy unikalny indeks w DB). Delikatesy nulls category_id na dotkniętych szablonach przed usunięciem wiersza kategorii. Część SP1.
· EmailService
Dodaj e-mailTusterlateService — CRUD + wysyłaj + nasienie + reset-to-default
Core orkiestrator dla transakcyjnej poczty e-mail. sendToUser rozwiązuje szablon, renderuje podmiot/ciało, wybiera domenę orgi z Organization.domains, i przekazuje wiadomości e-mail na adres e-mailSmtpService z NoReply-org.domain? jako adres. Zawiera nasiona ForOrg dla nowego zestawu lifecycle hak i resetToDefault, który Kopiuje zawartość wiersza SYSTEM w wierszu RJPOSAZYWEGO. Auth dla wysyłanych korzysta z transakcyjnej usługi SMTP w całym klastrze (transactional.smtp.user / transakcja.smtp.pass) zamiast na członka Dostawca-resolator — wysyłany transakcje nie mają działającego członka. Część SP1.
· EmailService
Dodać adres NoReplySenderService for 'NoReply'-domen'
Pojedyncze źródło prawdy dla transakcyjnego-email z adresów. Akceptuje a Ciąg domeny, masa doznormalizuje go, zwraca "NoReply'domain>". Dzwonicze muszą rozwiązać domenę org (za pośrednictwem strony Organization.domains lookup lub Podobno) i przekaż to. Część SP1.
· EmailService
Dodaj TemplateRenderer dla substytucji .var
Bezpaństwowy renderer oparty na regex. Brakujące vars zastępują pusty sznurek i emitowanie dziennika WARN z szablonemKey + orgId do przypisania. Brak ucieczki HTML W v1 — wartości są sterowane przez serwer. Część SP1.
· InitializerService
Dodaj e-mailTumplateSeedRunner dla SYSTEM + za-org seeding
Działa na stronie "Zamek" (20) na startupie KamoInitializerService. Obciążenia kanoniczne Szablony z zasobów bibliotekowych kamo-wspólnych; upserts rzędy SYSTEM (nie clobber); zasypuje rzędy na gorg dla każdego orgi, który jeszcze ich nie ma. Idempotent - bezpieczny do ponownego uruchomienia w każdym startupie. Część SP1.
· InitializerService
Dodaj częściowe unikalne indeksy + CHECK ograniczenia dla email_templates
Hibernate ddl-auto nie może generować częściowych unikalnych indeksów ani oliwonych-CHECK Ograniczenia. To zobowiązanie dodaje je za pośrednictwem istniejącego idempotent DDL biegacza Wzorzec po Hibernate tworzy tabele bazowe od nowych bytów. Część SP1.
· kamo-shared-library
CanonicalTemplateLoader + CanonicalTemplate rekord
Odczytuje trzy wymagane szablony (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION) z zasobów klasy patowych - Spożywane przez KamoInitializerService for SYSTEM-rzędowe siewu. Część SP1.
· kamo-shared-library
Dodaj kanoniczny HTML + JSON dla WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION
Zawartość źródła prawdy dla wierszy SYSTEM. Załadowanie w KamoInitializerService Start firmy CanonicalTemplateLoader i UPSERTed do email_templates. Część SP1.
· kamo-shared-library
Dodaj EmailTemplate entity + repozytorium
Przechowuje jeden wiersz SYSTEM na template_key (org_id NULL, is_system TRUE) plus Klon na org na template_key. Soft-reference org_id/category_id. DB- Przekierowane znaczniki czasu; JSONB dla body_blocks i tagów. Repozytorium zapewnia Odpylania lubg-scoped, przyrostu użycia atomowego i usuwanie kategorii Sprzątanie poprzez nullifyCategoryForOrg. Część SP1.
· kamo-shared-library
Dodaj EmailTemplateCategory entity + repozytorium
Kategorie Org-scoped dla szablonów e-mail. Miękki BIGINT org_id (bez FK) Pasuje do istniejących wzorców. Niewrażliwa na przypadek nazwa niepowtarzalna per-org jest Wyegzekwowany za pomocą indeksu częściowego dodanego w KamoInitializerService. Część SP1.
· kamo-shared-library
Dodaj TemplateStatus enum + TemplateKluczowe stałe dla szablonów transakcyjnych
Ogłasuje stany cyklu życia wymaganego/okiennego/ARCHIVED oraz trzech Wymagane klucze szablonu (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION). Kontrakty zmienne dla każdego wymaganego szablonu udokumentowane jako Javadoc Klasa stałych; SP3 i SP4 dzwonią do nich. Część SP1.
· InitializerService
Seed KamoCRM z ALL_WORK_ELIGIBLE na świeżych instalacjach
Pomocnik createOrg() stosuje ten pojedynczy argument do obu ageReqTypeMember i ageReqTypeTeamMember; Konwencja platformowa. Pary z KamoCRMAgeReqAktudateRunner, które obsługuje istniejące wdrożenia poprzez warunkowe UPDATE. Ukończyła SP5.
· InitializerService
Dodaj jednorazową prowadzkę do migracji KamoCRM agereq do ALL_WORK_ELIGIBLE
Warunkowe idempotent UPDATE działa na startupie serwisowym; WHERE czeki klauzuli Oczekiwana stara wartość, więc powtórki są bezopowe. Błędy są rejestrowane i Połknięty – startup nie może blokować tej niekrytycznej migracji. Część SP5. Pary z Edycją DataLoader w następnym zatytułowaniu, które się zleca Świeże instalacje bezpośrednio siewają nową wartość.

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej