Resolve duplicate emailTemplateServiceClient bean conflict
**************** and **************** were identical @Components with the same default bean name, causing **************** at startup. Delete the duplicate in r...
Bump kamo-shared-library to 1.4.0
Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...
SP6 교정 및 구현 품질 수정 적용
C1: 사용 NEXT PUBLIC H*** SITE KEY hardcoded placeholder 대신 env var C2: Change RegisterResponse.userId 및 모든 API params from number to string (CockroachDB unique r...
SP6 등록 마법사 refactor — 분할 PersonalInfo, 실제 등록 API 추가
- FormName(name field) 및 FormAvatar(Avatar Creator generator with generate/upload/skip mode for 13+)로 FormPersonalInfo를 대체합니다. - FormRecoveryEnforcement 삭제 (흐름에...
SP5 migrate KamoCRM agereq to ALL_WORK_ELIGIBLE
Add KamoCRMAgeReqUpdateRunner (order 10) — conditional idempotent UPDATE on startup; WHERE clause checks old value so re-runs are no-ops. Errors are swallowed s...
Address 4 code-review findings in registration and login paths
- Hide raw exception message in /register 500 path; log instead - Fail-closed (503) on email-verified DB check failure in login - verifyEmailToken throws if use...
Implement SP4 email verification and registration wiring
- Delete legacy email/VerificationEmail.java (hardcoded SMTP stub) - Add **************** (mirrors recovery package pattern) - Add **************** — token gene...
EmailVerification 추가 Token entity + repo + User.alias/emailVerified + UserRepo 쿼리; 범 1.4.0 (SP4)
Add SP4 email_verification_tokens DDL + User alias/email_verified columns
전화 + 보안 문제 (SP3)에 대한 계정 설정 페이지를 추가
API 배선을 가진 ***********를 추가하십시오 보안서비스 /api/account/*. Syncs nav 모든 3 위치.
Wire real API 호출 /recover 페이지 (SP3)
모든 fakeSubmit() stubs를 RecoveryApi 호출로 대체합니다. SMS OTP 추가 단계, 씨앗 이메일 입력, 새로운 비밀번호 단계 및 토큰 착륙 ?token= URL 퍼머를 통해.
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).
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 + VOIPSer...
Add InternalAuthFilter + POST /api/bulktext/send for service-to-service SMS (SP3)
복구 entities + 저장소 추가; 1.3.0 (SP3)에 범프
비밀번호 재설정 토큰, SmsOtp, RecoverySession, AccountVerificationCode 추가 SP3 복구 흐름에 대한 대응 저장소와 JPA entities.
SecurityQuestionCatalog enum + sq1/2/3 + SeedPhraseHash를 사용자 (SP3)에 추가하십시오
Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner
Browser의 backend-rendered modal을 통해 경로 미리보기 (SP2)
EmailTemplateBrowser는 이제 미리보기 모드를 직접 소유하므로 Manager no longer needs intercept 행 레벨 미리보기 요청 및 모드를 수정합니다.
철사 emailTemplateEdit에 진짜 API
TemplateApi.get에서 Hydrates, TemplateApi.update를 통해 저장합니다. (주) dropdown는 인라인 카테고리 생성 감당성으로 API 구동됩니다. 변수 picker는 variableContracts.ts (ReQUIRED에 대한 선언 계약 템플릿 키; ...
Wire EmailTemplateBrowser to real API + 시스템 기본 탭 추가
TemplateApi.list() 호출을 가진 모성 데이터의 ~140 줄을 대체합니다. (주) 다섯 번째 탭 '시스템 디폴트'는 top-level-org 관리자 및 렌더링에만 나타납니다 response.systemTemplates에서. 카테고리에서 팝업 필터Api.list(). 모든 행...
EmailTemplatePreview modal 추가하기
행 액션 미리보기를 엽니다. TemplateApi.p (review);를 통해 백엔드 렌더링 style isolation의 sandboxed iframe에 표시된 결과. 일치하기 사용하는 정확한 코드 경로, 그래서 당신이 미리보기는 어떤 수신자가 얻을. SP2의 부분.
사용되지 않은 이메일 삭제GeneralManager.tsx (~560 행 죽은 코드)
성분은 결코 어디에서든지 수입되지 않았습니다. 그것의 toggles (부스 취급, unsubscribe, 배송 추적, 이메일에서 기본)는 백엔드가 없었다 순수 화장품 setTimeout 루즈. 그 특징의 각 배 해당 백엔드가 존재하면 자신의 spec을 통해. SP2의 부분.
TemplateApi + categoryApi + variableContracts 클라이언트 모듈 추가
SP1의 /api/email/templates/* 및 *********** Typed TypeScript 헬퍼와 엔드포인트. variableContracts 미러 SP1 TemplateKeys Javadoc 그래서 편집기의 변수 피커는 선언 REQUIRED 템플릿에 대한 계약. SP2...
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...
Service-to-service endpoint에 대한 InternalAuthFilter 추가
/api/email/templates/send에 X-Internal-Auth 헤더를 유효성 검사합니다. /api/email/templates/seed-org/* 경로. 다른 경로 우회 이 필터 (사용자 세션 auth 그들을 처리). 비밀은 INTERNAL AUTH SECRET에서 온다 ...
EmailTemplateCategoryService 추가 — CRUD for org-scoped 카테고리
Case-insensitive name uniqueness per org 서비스 레이어에 강제 (DB의 일부 고유 인덱스를 매칭). 삭제 null 카테고리 id 범주를 제거하기 전에 영향을받는 템플릿에. SP1의 부분.
Add EmailTemplateService — CRUD + send + seed + reset-to-default
거래 이메일의 핵심 오케스트라. sendToUser는 템플릿을 해결합니다. 제목/체를 렌더링, 조직에서 org의 기본 도메인을 선택합니다. 도메인, noReply@{org.domain} 으로 이메일 보내기SmtpService 를 호출합니다. SeedForOrg for new-org Li...
Add NoReplySenderService for 'NoReply@{domain}' from-address
주소에서 거래 이메일에 대한 진실의 단일 소스. 지원하다 도메인 문자열, lowcase-normalizes, 반환 "NoReply@<domain>". Callers는 org의 도메인을 해결해야합니다 ( Organization.domains lookup 또는 유사) 그리고 그것을 안으로 ...
TemplateRenderer를 {{var}} 대용 추가하기
Stateless regex 기반 렌더링기. Missing vars 대체 빈 문자열 및 템플릿키 + orgId로 WARN 로그를 방출합니다. HTML escaping 없음 v1 - 값은 서버 제어입니다. SP1의 부분.
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 및 canonical HTML 자원.
CanonicalTemplateLoader + CanonicalTemplate 기록을 추가하십시오
3개의 필요한 템플릿(WELCOME, PASSWORD RESET, EMAIL VERIFICATION) 클래스 경로 리소스에서 *************** 제출하기 KamoInitializer System-row 묘종 서비스. SP1의 부분.
WELCOME, PASSWORD RESET, EMAIL VERIFICATION에 대한 canonical HTML + JSON 추가
시스템 행에 대한 Source-of-truth 내용. KamoInitializerService에서 로드됨 CanonicalTemplateLoader 및 UPSERTed의 시작은 email templates로 발송됩니다. SP1의 부분.
MailboxId→id와 공급자Status→status를 우편함 명부 응답에 지명하십시오
Align 필드 이름 회원 mailbox 목록에 대한 기대.
EmailTemplate entity + 저장소 추가
Template key (org id NULL, is system TRUE)에 대한 하나의 시스템 행 저장 Template key 당 org 당 한 clone. 소프트 환경 org id/category id. 사이트맵 driven timestamps; body blocks 및 태그에 대...
EmailTemplateCategory entity + 저장소 추가
Org-scoped 카테고리 이메일 템플릿. 소프트 BIGINT org id (FK 없음) 기존 패턴 일치. Case-insensitive 이름 고유성 per-org는 KamoInitializerService에 추가된 부분 인덱스를 통해 시행됩니다. SP1의 부분.
TemplateStatus enum + TemplateKeys 거래 템플릿에 대한 상수
REQUIRED/CUSTOM/ARCHIVED 수명주기 상태를 선언하고 3 필요한 템플릿 키 (WELCOME, PASSWORD RESET, EMAIL VERIFICATION). 각 REQUIRED 템플릿에 대한 가변 계약은 Javadoc으로 문서화 일정 클래스; SP3 및 SP4 콜러 참...