Add analytics → analytics text replacement in changelog sanitization
Redact tokens ≥32 chars in changelog sanitization
Any word (run of non-whitespace) that is 32 characters or longer is replaced with **************** before titles and descriptions are sent to the translation se...
Generate TXT verification token on domain create, check in verify-dns
- createDomain: generate 32-char UUID token and store via setVerificationToken - verifyDns: check _kamo-verify TXT record for kamo-site-verification=<token> - T...
Update required aliases — add app, capcha, docs, sign; remove legacy
Bound translation concurrency to 3 threads to prevent DB pool exhaustion
Unbounded @Async (SimpleAsyncTaskExecutor) created 50 threads simultaneously when the retry scheduler fired, each opening a DB transaction and draining HikariCP...
Three bugs preventing changelog translations from being saved
1. **************** was discarding events because handleWebhook() had no @Transactional — save + publishEvent() ran outside any transaction. Add @Transact...
Add /setup/dns backend — one-domain enforcement, SSL probe, new aliases
- Enforce one custom domain per org in POST /api/security/domains - Add capcha, docs, sign to standard aliases; remove legacy aliases - Update verify-dns to tra...
Apply word replacement at translation time, not ingestion
Original text is preserved in the DB so that adding a new rule and re-triggering translation is all that is needed to update existing records. Changes: - Chang...
Move changelog word replacement to backend before translation
Text replacements (Docs→Docs, Meet→Meet, etc.) and secret name redaction (K8s secret names→***) were previously applied client-side in ChangelogClient.tsx, mean...
Check TeamMember.isOrganizationOwner flag for owner detection in my-networks endpoint
The previous check only looked at org.getOwner() (user_id_owner column) which can be null for existing orgs. The authoritative owner flag lives on the TeamMembe...
Include parent org in /org/domain response
The getOrganizationByDomain endpoint manually builds a response map but never included the parent organization reference. This prevented the frontend from knowi...
Don't let null translated description hide the English original in changelog
The translation lookup for non-en locales was unconditionally overwriting description with **************** which is null when: - the translation was saved befo...
중복 작업 흐름을 방지하기 위해 concurrency 그룹 추가
푸시 트리거가 워크플로우 및 워크플로우 dispatch가 불일 때 (또는 2개의 푸시는 빠른 성공에 도착합니다), 둘 다 실행할 것입니다 동시. concurrency 그룹을 추가하면 in-progress를 취소합니다. 새로운 작업을 시작할 때 동일한 작업 흐름 + 브레이크를 실행합니다.
리드 intake 관리 및 공개 수신 컨트롤러 추가
자동화된 납입 시스템에 대한 두 개의 컨트롤러 추가: - LeadIntakeController: 입구 엔드포인트, 필드를 위한 인증된 CRUD 매핑, 페이로드 큐 관리, 백로 처리 및 통계 - LeadIntakeReceiveController : 3rd-party를 수용하는 공공 엔드 ...
Login SQL에 있는 security level 란 참고
security level는 회원 테이블에 있습니다 (m), 회원 team member (e). 잘못된 별명 e.security level는 전체 SQL을 침묵으로 발생, 그래서 memberType은 쿼리 결과에서 설정되지 않았습니다.
Redis 세션의 Store memberType
CASE WHEN e.id를 추가하면 NULL THEN 'TEAM MEMBER' ELSE 'MEMBER' END가 없습니다. 로그인 SQL 쿼리 및 생성을 통해 결과를 전달 Redis, 그래서 frontend는 세션 데이터를 통해 일반 회원으로부터 팀 구성원을 구분할 수 있습니다.
ImagingController 및 Bean/imaging 제거 — ConversionService 및 DocsService로 이동
Upload endpoints now live 에 ConversionService 에 /api/conversion/imaging/*. 모든 관리 및 다운로드 엔드포인트 지금 DocsService에서 /api/docs/imaging/*.
Delegate thumbnail 세대를 변환 서비스, PDFBox 의존성을 제거
generateAndStoreThumbnails 이제 변환 PDF 변환 서비스 *************** 응답을 압축, 각 상점 thumb p{n}.png in MinIO, 페이지 WS 진행 상황을 게시합니다. PDFBox 제거.
Granular WS 진행으로 템플릿 업로드시 동기화 per-page thumbnail 발생
- pom.xml에 PDFBox 의존성 추가 - 변환 된 PDF를 저장 한 후, PDFRenderer를 통해 모든 페이지를 렌더링하고 {id} thumb p{n}.png로 업로드하십시오. - "Generated thumbnail N of M" 라벨이있는 페이지 (72-95% 범위) 당 ...
Changelog endpoint에 webhook secret validation 추가
Defense-in-depth: validates *** 헤더에 APIService Gateway validation 외에도 SecurityService 측.
회원 액세스 레벨 및 소유자 상태 엔드포인트 추가
GET 및 PATCH 추가 **************** 읽기 및 전체 권한 시행으로 액세스 레벨을 업데이트하기위한 엔드 포인트. createOrganizationOwner를 사용하여 조직 생성을 업데이트하십시오.
8개의 웹소켓 업데이트로 과립 변환 진행 단계 추가
단계: 다운로드 (0-15%) → 준비 (15-20%) → 변환 (20-65%) → (65-75%) → 저장 (75-90%) → 최종화 (90-100%) → 완료
Add extensive logging to synchronous conversion flow, fix bucket lookup
Use img.getAssocId() for bucket instead of local assocType variable. Add step-by-step logging for download, conversion call, and result.
