Перейти к содержимому
KAMOUniverse

Журнал изменений

Что нового.

Каждое усовершенствование платформы, как только она появится.

  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

    Добавить восстановительные объекты + репо; удар до 1,3.0 (SP3)

    Добавлены PasswordResetToken, SmsOtp, RecoverySession, AccountVerificationCode Субъекты JPA с соответствующими хранилищами для потока восстановления SP3.

  5. · kamo-shared-library

    Добавить SecurityQuestionCatalog enum + sq1/2/3 + seedPhraseHash Пользователю (SP3)

  6. · InitializerService

    Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner

  7. · kamo-internal

    Предварительный просмотр маршрута через модаль Browser (часть SP2)

    EmailTemplateBrowser теперь владеет модалем Preview напрямую. Менеджеру больше не нужно перехватывать запросы предварительного просмотра на уровне строк. Перенаправить в режим редактирования.

  8. · kamo-internal

    Wire EmailTemplateПравить на реальный API

    Гидраты от templateApi.get, сохраняет через templateApi.update. Категория dropdown - это API-ориентированный с встроенной доступностью для создания категорий. Переменные picker reads from variableContracts.ts (заявленные контракты для REQUIRED) Шаблонные ключи; общий набор для CUSTOM. Редактирование строк / SYSTEM показывает соответствующий предупреждающий баннер. Кнопка предварительного просмотра открывает Бэкэнд-рендеринг EmailTemplatePreview модаль. Часть СП2.

  9. · kamo-internal

    Проводите EmailTemplateBrowser до реального API + добавьте вкладку «Системные по умолчанию»

    Заменяет ~ 140 строк макетных данных вызовами templateApi.list(). Условный Пятая вкладка «System Defaults» появляется только для администраторов верхнего уровня и рендеров Источник: response.systemTemplates. Категориальный фильтр, загруженный из CategoryApi.list(). Все гребные действия ********************************** Бэкэнд конечные точки. Ошибки направляются через тост-помощник handleApiError. Часть СП2.

  10. · kamo-internal

    Добавить EmailTemplateDuplicateDialog (часть SP2)

  11. · kamo-internal

    Добавить модаль EmailTemplateCategoryManager (часть SP2)

  12. · kamo-internal

    Добавить модаль EmailTemplatePreview

    Открывается на предварительном просмотре. Backend-rendered via templateApi.preview(); Результат отображается в песочнице iframe для изоляции стиля. Соответствует Точный путь кода, который использует отправка, поэтому то, что вы просматриваете, - это то, что получают получатели. Часть СП2.

  13. · kamo-internal

    Добавить шаблонApi + категорияApi + переменныеКонтракты клиентских модулей

    Обертывает /api/email/templates/ и ******************* Конечные точки с набранными помощниками TypeScript. Переменные контракты зеркала SP1 TemplateKeys Javadoc так редактор переменных пикеров показывает объявленный контракты на требуемые шаблоны. Часть СП2.

  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

    Проверяет заголовок X-Internal-Auth на /api/email/templates/end и /api/email/templates/seed-org/* Paths. Другие пути обхода этого фильтра (пользовательская сессия AUTH обрабатывает их). Оригинальное название: INTERNAL AUTH SECRET Энв Вар. Дополнительно: transactional.smtp.user/transactional.smtp.pass Конфигурационные заглушки, потребляемые EmailTemplateService - все три источника K8s Configmap в производстве. Часть SP1.

  18. · EmailService

    Добавить EmailTemplateCategoryService — CRUD для категорий, связанных с оргами

    Нечувствительная к делу уникальность имени в одной организации, применяемая на уровне обслуживания (соответствует частичному уникальному индексу в DB). Удаление nulls category id на затронутых шаблонах перед удалением строки категорий. Часть SP1.

  19. · EmailService

    Добавить EmailTemplateService — CRUD + send + seed + reset-to-default

    Основной оркестратор для транзакционной электронной почты. sendToUser решает шаблон, отображает субъект/тело, выбирает основной домен организации из Организации. домены, и перейдите на EmailSmtpService с NoReply@{org.domain} по адресу: Включает seedForOrg для крючка жизненного цикла new-org и сброс ToDefault, который копирует содержимое строки SYSTEM по строке per-org REQUIRED. Auth для отправки использует учетные данные службы транзакций SMTP по всему кластеру (transactional.smtp.user/transactional.smtp.pass) Решитель провайдера — транзакционные отправки не имеют действующего участника. Часть SP1.

  20. · EmailService

    Добавить NoReplySenderService для NoReply@{domain} с адреса

    Единый источник правды для транзакционной почты с адресов. Принять a строка домена, нижняя строчка нормализует его, возвращает «NoReply@<domain>». Абоненты должны решить домен организации (через поиск доменов или Аналогично) и передать его. Часть SP1.

  21. · EmailService

    Добавить TemplateRenderer для замены {{var}}

    Безгосударственный рендеринг на основе регекса. Недостающие варсы заменяют пустые струны и Издать журнал WARN с помощью templateKey + orgId для атрибуции. HTML не ускользает v1 — значения контролируются сервером. Часть 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

    Добавить CanonicalTemplateLoader + CanonicalTemplate

    Читает три обязательных шаблона (WELCOME, PASSWORD RESET, EMAIL VERIFICATION - от классовых ресурсов **************************** потребляемый KamoInitializerService для сева системного ряда. Часть SP1.

  25. · kamo-shared-library

    Добавить канонический HTML + JSON для PASSWORD RESET, EMAIL VERIFICATION

    Исходный контент для строк системы. Загрузка в KamoInitializerService Запуск CanonicalTemplateLoader и UPSERTed в email templates. Часть SP1.

  26. · kamo-shared-library

    Добавить EmailTemplate entity + репозиторий

    Хранит одну строку SYSTEM для шаблона key (org id NULL, is system TRUE) плюс Один клон в группе на шаблон key. Soft-reference org id/category id. ДБ- Временные метки; JSONB для body blocks и тегов. Репозиторий обеспечивает орг-сканирование, приращение счетчика атомного использования и удаление категории Очистка через nullifyCategoryForOrg. Часть SP1.

  27. · kamo-shared-library

    Добавить EmailTemplateCategory entity + репозиторий

    Org-scoped категории для шаблонов электронной почты. Soft BIGINT org id (без FK) Соответствует существующим моделям. Нечувствительная к делу уникальность имени per-org Вводится через частичный индекс, добавленный в KamoInitializerService. Часть SP1.

  28. · kamo-shared-library

    Добавить TemplateStatus enum + константы TemplateKeys для транзакционных шаблонов

    Объявляет требуемые / заказные / приобретенные состояния жизненного цикла и три Требуются ключи шаблона (WELCOME, PASSWORD RESET, EMAIL VERIFICATION). Переменные контракты для каждого шаблона REQUIRED, документированного как Javadoc Класс констант; абоненты SP3 и SP4 ссылаются на них. Часть 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.

Ваша вселенная ждет.

Начните бесплатно через несколько минут. Добавляйте продукты, когда будете готовы — без миграции, без новых логинов.

Бесплатно навсегда — не требуется кредитная карта