บันทึกการเปลี่ยนแปลง
มีข่าวอะไร
การปรับปรุงทุกอย่างของแพลตฟอร์ม เมื่อมันถูกส่งออกไป
· 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).
· 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.
· VOIPService
Add InternalAuthFilter + POST /api/bulktext/send for service-to-service SMS (SP3)
· kamo-shared-library
เพิ่มคุณสมบัติการกู้คืน + respos; ชนกับ 1. 03 (P3)
เพิ่มรหัสผ่านใหม่@ info: whatsthis JPA ประกอบด้วยสารที่คล้ายคลึงกัน สําหรับการไหลของ PP3.
· kamo-shared-library
เพิ่มข้อมูลความปลอดภัยCreationCatalog enum + พื้นพื้นที่//3 + เมล็ดพันธุ์ PhraseHash สําหรับผู้ใช้ (PS3)
· InitializerService
Add SP3 recovery table DDL + User column additions to SchemaCleanupRunner
· kamo-internal
เส้นทางแสดงตัวอย่างผ่านโปรแกรมเบื้องหลังของเบราว์เซอร์
The mail TemptlopBrowser ตอนนี้เป็นเจ้าของการแสดงตัวอย่าง modal โดยตรง ดังนั้น ตัวจัดการไม่จําเป็นต้องดักจับการร้องขอแสดงตัวอย่างระดับแถวอีกต่อไป เปลี่ยนเส้นทางไปยังโหมดแก้ไข.
· kamo-internal
อีเมลแบบออนไลน์
ไฮดรา จากแม่แบบ Api. ได้ บันทึกผ่านทาง Api.update ประเภท ลดลงเป็น API-ไดรฟ์ที่มีบรรทัด ค่าใช้จ่ายสร้างหมวดหมู่ ตัวแปร Chicker reading from dictions.t (decorded attachment for RENTIEIST) ปุ่มแม่แบบ; ชุดทั่วไปสําหรับ CUSTOM) แก้ไขแถวแบบ REKL / SYSTEME แสดงป้ายเตือนที่เหมาะสม ปุ่มแสดงตัวอย่าง เปิด โปรแกรมเบื้องหลังrendered email TemplectPreview modal ส่วนของ SP2.
· kamo-internal
Comment=รายการจดหมายName
แทนที่การแสดงข้อมูล~140 บรรทัดของการเยาะเย้ยด้วยข้อความเรียก MagnatuneApi.list () เงื่อนไข แท็บที่ 5 สําหรับ 'ค่าปริยาย' จะปรากฏเฉพาะส่วนโฆษณาและส่วนแสดงผลของส่วนบนบนบน จากการตอบสนอง ระบบ ตัวกรองที่มีหมวดหมู่จากหมวดหมู่ Api.list () การกระทําในแถวทั้งหมด ~เสียงหลงดังจริง~ จุดสิ้นสุดของแบ็คเอนต์ ความผิดพลาดทางเครื่องจับเท็จ ส่วนของ SP2.
· kamo-internal
เพิ่มอีเมล
· kamo-internal
เพิ่มรายการอีเมล
· kamo-internal
เพิ่มรายการอีเมล
เปิดในตัวอย่างการกระทําแถว แบ็คเอนต์จัดการแฟ้มผ่านทาง ModelApi. preview ส่งผลให้แสดงในกรอบหินทราย สําหรับแยกรูปแบบ ตรงกับ เส้นทางรหัสที่แน่นอนที่ส่งใช้ ดังนั้นสิ่งที่คุณแสดงตัวอย่างคือสิ่งที่ผู้รับ ส่วนของ SP2.
· kamo-internal
เพิ่มมอดูลลูกข่าย Api + ประเภท Api + ตัวแปร
ห่อ SPE1 ของ /api/ email/ templets/* และ* idents จุดสิ้นสุดที่มีชนิดแฟ้มช่วยเหลือพิมพ์ ตัวแปร Keys Javadoc ดังนั้นเครื่องมือเลือกตัวแปรของเครื่องมือแก้ไขได้ประกาศ สัญญาสําหรับแม่แบบ ส่วนของ SP2.
· 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.
· 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.
· 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.
· EmailService
Add InternalAuthFilter for service-to-service endpoints
Validates X-Internal-Auth header on /api/email/templates/send and /api/email/templates/seed-org/* paths. Other paths bypass this filter (user session auth handles them). Secret comes from INTERNAL_AUTH_SECRET env var. Also adds transactional.smtp.user / transactional.smtp.pass config stubs consumed by EmailTemplateService — all three are sourced from the k8s configmap in production. Part of SP1.
· EmailService
Add EmailTemplateCategoryService — CRUD for org-scoped categories
Case-insensitive name uniqueness per org enforced at service layer (matches the partial unique index in the DB). Deletion nulls category_id on affected templates before removing the category row. Part of SP1.
· EmailService
Add EmailTemplateService — CRUD + send + seed + reset-to-default
Core orchestrator for transactional email. sendToUser resolves the template, renders subject/body, picks the org's primary domain from Organization.domains, and hands off to EmailSmtpService with NoReply@{org.domain} as from-address. Includes seedForOrg for new-org lifecycle hook and resetToDefault that copies a SYSTEM row's content over a per-org REQUIRED row. Auth for the send uses cluster-wide transactional SMTP service credentials (transactional.smtp.user / transactional.smtp.pass) rather than the per-member provider resolver — transactional sends have no acting member. Part of SP1.
· EmailService
Add NoReplySenderService for 'NoReply@{domain}' from-address
Single source of truth for transactional-email from addresses. Accepts a domain string, lowercase-normalizes it, returns "NoReply@<domain>". Callers must resolve the org's domain (via Organization.domains lookup or similar) and pass it in. Part of SP1.
· EmailService
Add TemplateRenderer for {{var}} substitution
Stateless regex-based renderer. Missing vars substitute empty string and emit a WARN log with templateKey + orgId for attribution. No HTML escaping in v1 — values are server-controlled. Part of SP1.
· 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.
· 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.
· kamo-shared-library
เพิ่มแผ่นเสียง Conical
อ่านเอกสารต้นแบบสามฉบับ ถนอมทรัพย์ นพบูรณ์EMAIL OF TRANSLATORS ~ประกาศออกไป~ ถูกจองโดย เครื่องเร่งอนุภาคของ SESTEMEE ส่วนของ SP1.
· kamo-shared-library
เพิ่มเอกสาร HTML + Json สําหรับ Wolcom, PassWord rest, EMAIL OF TRANSLATORS
ข้อมูลต้นฉบับของข้อมูลแถว SYSTEM โหลดที่ KamoInical Service เริ่มการทํางานโดย Canonical Temple Loader และ UpSported เป็นอีเมล ตราสาร ส่วนของ SP1.
· kamo-shared-library
เพิ่มรายการอีเมล
เก็บหนึ่งแถว SYSTEME ต่อแม่แบบ (org id NULL, is ระบบจริง) บวก ตัวโคลนต่อแกนต่อแม่แบบ พาธที่อ้างถึง org id/ category id ดีบี ไดรฟ์ Timetramps; Jonsonb for body blocks และป้ายกํากับ การ จัด เตรียม ให้ โปรแกรมจัดการค้นหา, การใช้อะตอมเพิ่มขึ้น และหมวดหมู่ Delate ทําความสะอาดผ่านทาง Unlinecategory Forrg ส่วนของ SP1.
· kamo-shared-library
เพิ่มรายการอีเมล
หมวดหมู่จดหมายที่อ่านแล้วสําหรับแม่แบบอีเมล พิมพ์แบบ SweetIMEX id (ไม่มี FK) ตรงกับรูปแบบที่มีอยู่ ชื่อตัวพิมพ์เล็ก- ใหญ่ บังคับใช้ผ่านทางดัชนีบางส่วนที่เพิ่มใน Kamemo Inniversity service. ส่วนของ SP1.
· kamo-shared-library
เพิ่มค่าคงที่ของต้นแบบจดหมาย
ประกาศสายรัด/CUSTOM/Archive Cycle และ 3 ต้องการกุญแจแม่แบบ (WELCE, PassWord resett, EMAIL OF TRANSLATORS สัญญาตัวแปรสําหรับแม่แบบ RECTIT ที่บันทึกเป็น JavaDoc บน คลาสค่าคงที่; PP3 และ SP4 อ้างอิงสิ่งเหล่านี้ ส่วนของ SP1.
· 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.
· 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.

จักรวาลของคุณกำลังรออยู่
เริ่มฟรีในไม่กี่นาที เพิ่มผลิตภัณฑ์เมื่อคุณพร้อม - ไม่มีการย้าย, ไม่มีการล็อกอินใหม่
ฟรีตลอดกาล — ไม่จำเป็นต้องใช้บัตรเครดิต