Добавить восстановительные объекты + репо; удар до 1,3.0 (SP3)
Добавлены PasswordResetToken, SmsOtp, RecoverySession, AccountVerificationCode Субъекты JPA с соответствующими хранилищами для потока восстановления SP3.
Добавить SecurityQuestionCatalog enum + sq1/2/3 + seedPhraseHash Пользователю (SP3)
Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner
Предварительный просмотр маршрута через модаль Browser (часть SP2)
EmailTemplateBrowser теперь владеет модалем Preview напрямую. Менеджеру больше не нужно перехватывать запросы предварительного просмотра на уровне строк. Перена...
Wire EmailTemplateПравить на реальный API
Гидраты от templateApi.get, сохраняет через templateApi.update. Категория dropdown - это API-ориентированный с встроенной доступностью для создания категорий. П...
Проводите EmailTemplateBrowser до реального API + добавьте вкладку «Системные по умолчанию»
Заменяет ~ 140 строк макетных данных вызовами templateApi.list(). Условный Пятая вкладка «System Defaults» появляется только для администраторов верхнего уровня...
Добавить модаль EmailTemplatePreview
Открывается на предварительном просмотре. Backend-rendered via templateApi.preview(); Результат отображается в песочнице iframe для изоляции стиля. Соответствуе...
Удалить неиспользованный EmailGeneralManager.tsx (~560 строк мертвого кода)
Компонент нигде не импортировался. Его броски (отскок обработки, Отписаться, отслеживать доставку, по умолчанию с электронной почты) не было бэкэнда и Это были ...
Добавить шаблонApi + категорияApi + переменныеКонтракты клиентских модулей
Обертывает /api/email/templates/ и ******************* Конечные точки с набранными помощниками TypeScript. Переменные контракты зеркала SP1 TemplateKeys Javadoc...
Wire EmailTemplateSeedClient into ****************
Thin RestTemplate client that POSTs to EmailService's **************** after an org + owner TeamMember are persisted. Retries twice with backoff; failure throws...
Add EmailTemplateCategoryController REST endpoints
**************** CRUD. Delete response includes reassignedCount — the number of templates that became uncategorized as a result of removing the category. Sessio...
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) addition...
Add InternalAuthFilter for service-to-service endpoints
Проверяет заголовок X-Internal-Auth на /api/email/templates/end и /api/email/templates/seed-org/* Paths. Другие пути обхода этого фильтра (пользовательская сесс...
Добавить EmailTemplateCategoryService — CRUD для категорий, связанных с оргами
Нечувствительная к делу уникальность имени в одной организации, применяемая на уровне обслуживания (соответствует частичному уникальному индексу в DB). Удаление...
Добавить EmailTemplateService — CRUD + send + seed + reset-to-default
Основной оркестратор для транзакционной электронной почты. sendToUser решает шаблон, отображает субъект/тело, выбирает основной домен организации из Организации...
Добавить NoReplySenderService для NoReply@{domain} с адреса
Единый источник правды для транзакционной почты с адресов. Принять a строка домена, нижняя строчка нормализует его, возвращает «NoReply@<domain>». Абоненты долж...
Добавить TemplateRenderer для замены {{var}}
Безгосударственный рендеринг на основе регекса. Недостающие варсы заменяют пустые струны и Издать журнал WARN с помощью templateKey + orgId для атрибуции. HTML ...
Append Z to dateCommitted so JS parses it as UTC
LocalDateTime.toString() produces no timezone designator, causing JavaScript's new Date() to treat the UTC value as local time and display timestamps 7-8 hours ...
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 ...
Convert PT midnight cutoff to UTC for today-count query
Commits are stored in UTC but the cutoff was a naive LocalDateTime in PT, causing yesterday-evening PT commits (00:00–06:59 UTC) to be counted as today.
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 aft...
Bump kamo-shared-library версия 1.2.0 для дополнений SP1
Добавляет EmailTemplate, EmailTemplateCategory, TemplateStatus, TemplateKeys, CanonicalTemplate, CanonicalTemplateLoader и канонические ресурсы HTML.
Добавить CanonicalTemplateLoader + CanonicalTemplate
Читает три обязательных шаблона (WELCOME, PASSWORD RESET, EMAIL VERIFICATION - от классовых ресурсов **************************** потребляемый KamoInitializerSe...
Добавить канонический HTML + JSON для PASSWORD RESET, EMAIL VERIFICATION
Исходный контент для строк системы. Загрузка в KamoInitializerService Запуск CanonicalTemplateLoader и UPSERTed в email templates. Часть SP1.
Переименовать почтовый ящикId→id и providerStatus→status в ответе списка почтовых ящиков
Выравнивайте имена полей с внешними ожиданиями для списков почтовых ящиков участников.
Добавить EmailTemplate entity + репозиторий
Хранит одну строку SYSTEM для шаблона key (org id NULL, is system TRUE) плюс Один клон в группе на шаблон key. Soft-reference org id/category id. ДБ- Временные ...
Добавить EmailTemplateCategory entity + репозиторий
Org-scoped категории для шаблонов электронной почты. Soft BIGINT org id (без FK) Соответствует существующим моделям. Нечувствительная к делу уникальность имени ...
Добавить TemplateStatus enum + константы TemplateKeys для транзакционных шаблонов
Объявляет требуемые / заказные / приобретенные состояния жизненного цикла и три Требуются ключи шаблона (WELCOME, PASSWORD RESET, EMAIL VERIFICATION). Переменны...
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 KamoCRMAg...
Tighten KamoCRMAgeReqUpdateRunner per review
- Restore Javadoc paragraph explaining @Order(10) rationale. - Test now references the UPDATE_SQL constant directly instead of duplicating the SQL string, so ...
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 — start...
Замените все экземпляры логотипа CSS-фильтра белым SVG
Навигация, SubNavigation, Footer, SubFooter и Preloader все используемые тот же разбитый фильтр яркости-0 инвертного рисунка. Заменить на Логотип полностью белы...
Используйте белый логотип SVG в нижнем колонтитуле вместо фильтра CSS
То же исправление, что и нав — CSS-фильтр на img внутри фонового фильтра ненадежен на iOS Safari.
Охрана цветовой схемы с !важным против темы CSS override
DynamicMetaLoader может вводить удаленный CSS, который выигрывает каскад. Добавить Важность обеспечивает цветовую схему: темнота никогда не может быть преодолен...
Исключите нижние колонтитулы и навигационные ссылки из TouchOptimized Min-Height
TouchOptimized установила minHeight:44px на всех элементах <a> короче 44px, включая нижние навигационные линии (~20px). Это происходило во время гидратации на ж...
Используйте белый логотип SVG вместо CSS-фильтра
Фильтр CSS на Img внутри фонового фильтра ненадежен на iOS Safari. Создайте логотип-full-white.svg со всеми заполнениями #ffffff и загрузите его напрямую — ни ф...
Вариант темного режима Lock Tailwind на основе класса, никогда не медиа-запрос ОС
Tailwind v4 по умолчанию темный: утилиты реагируют на цветовую схему предпочтений (предпочтение ОС). @variant override гарантирует темноту: классы активируются ...
Используйте стиль встроенного фильтра на ссылке логотипа для надежного белого рендеринга
Классы фильтров Tailwind на элементах img несовместимы в мобильных браузерах. Встроенный стиль на якорном элементе гарантирует яркость (0) инверт (1) применяетс...
Силовая темная цветовая схема, поэтому браузер никогда не применяет рендеринг в светлом режиме
Переход от «светлого только» к «темному» в globals.css, генерации Viewport html-стиль элементов — это останавливает браузер от рендеринга SVG и нативного пользо...
Предотвращение рендеринга логотипа за строкой nav на мобильных устройствах
Обертка div с фильтром CSS создала новый контекст стека, который противоречил с фоновым фильтром заголовка в мобильных браузерах, заставляя логотип рисовать На ...
Решите прокрутку и мобильную вырезку на JumpToBar и PreviewBanner
Добавить overflowY: скрытый во внутренний контейнер JumpToBar для предотвращения вертикальной прокрутки Разрешить контент PreviewBanner обернуть на мобильный те...
Заменить пространство-y-4 встроенным гибким зазором в списках ссылок нижнего колонтитула
Tailwind space-y-4 использует :where() (специфичность 0) Нагрузка на жесткое обновление вызывает несогласованное вертикальное расстояние. ряд Стили встроены в S...
Set Traefik externalTrafficPolicy=Local to preserve client IP
With the default "Cluster" policy, kube-proxy SNATs external traffic to the node IP before forwarding to Traefik. That caused Traefik to see the node IP as the ...
Добавить отсутствующий запрос Интеграция i18n ключа по всем локализациям
Кнопка «Отправить запрос» в разделе «Необходима пользовательская интеграция?» КТА на /интеграции возвращался к исходному ключу **************** Потому что ключ ...
Логотипы интеграции + точные /интеграционные метаданные
Страницы интеграции и концентратор теперь отображают логотипы поставщиков (используя существующие **************** Активы на домашней странице TechStackBanner у...
Расширение / интеграция для всех поставщиков, перечисленных на главной странице
Выравнивает страницу /интеграции с фактической интеграцией Главная страница (TechStackBanner). Добавлено 28 новых страниц интеграции Что на самом деле предлагае...
Добавить домой ипотечные брокеры отраслевая страница
Страница нового отраслевого решения /решения / ипотечные брокеры брокеров и кредиторов. Следуйте честному фреймингу платформы: CRM + comms + docs + AI применяет...
Как вы видите судоходство?
Все это приходит в ваше рабочее пространство самостоятельно. Начните с бесплатного плана и прочитайте эту страницу через месяц.
