Add recovery entities + repos; bump to 1.3.0 (SP3)
Adds PasswordResetToken, SmsOtp, RecoverySession, AccountVerificationCode JPA entities with corresponding repositories for SP3 recovery flow.
Add SecurityQuestionCatalog enum + sq1/2/3 + seedPhraseHash to User (SP3)
Bump kamo-shared-library version to 1.2.0 for SP1 additions
Adds EmailTemplate, EmailTemplateCategory, TemplateStatus, TemplateKeys, CanonicalTemplate, CanonicalTemplateLoader, and canonical HTML resources.
Add CanonicalTemplateLoader + CanonicalTemplate record
Reads the three REQUIRED templates (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION) from classpath resources at **************** Consumed by KamoInitializerService...
Add canonical HTML + JSON for WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION
Source-of-truth content for SYSTEM rows. Loaded at KamoInitializerService startup by CanonicalTemplateLoader and UPSERTed into email_templates. Part of SP1.
Add EmailTemplate entity + repository
Stores one SYSTEM row per template_key (org_id NULL, is_system TRUE) plus one clone per org per template_key. Soft-reference org_id/category_id. DB- driven time...
Add EmailTemplateCategory entity + repository
Org-scoped categories for email templates. Soft BIGINT org_id (no FK) matches existing patterns. Case-insensitive name uniqueness per-org is enforced via a part...
Add TemplateStatus enum + TemplateKeys constants for transactional templates
Declares the REQUIRED/CUSTOM/ARCHIVED lifecycle states and the three required template keys (WELCOME, PASSWORD_RESET, EMAIL_VERIFICATION). Variable contracts fo...
Add domain ownership verification via DNS TXT record
- OrgDomain: add verificationToken and ownershipVerified fields - DomainService: add setVerificationToken() and setOwnershipVerified() - DomainDTO: expose verif...
Query CommitLogs with LEFT JOIN so zero-translation records are caught by retry
The old query selected from CommitLogTranslation — commit logs with no translations at all were invisible to it. Use LEFT JOIN from CommitLog so the HAVING COUN...
Add sslConfirmed/sslConfirmedAt fields to OrgDomain and DomainDTO
Adds two new fields to OrgDomain entity and DomainDTO to track SSL certificate confirmation status after the auto-cert service issues a certificate. Also adds s...
Add billing entities and repositories for Stripe integration
New package **************** with 9 entities (BillingCustomer, BillingSubscription, BillingPaymentMethod, BillingInvoice, BillingCredit, BillingCreditLedger, Bi...
Use UUID for SubscriptionPlanTranslation FK to match BaseUuidEntity PK type
Add translation entities and repositories for CommitLog, KbArticle, SubscriptionPlan
- CommitLogTranslation + CommitLogTranslationId (PK: commit_log_id, locale) - KbArticleTranslation + KbArticleTranslationId (PK: article_uid, locale) - Subscrip...
Restore removed languages with translationSupported field
Add translationSupported boolean to LanguageType enum. Restore URDU, MARATHI, TELUGU, and GUJARATI (translationSupported=false). All 22 previously supported lan...
Replace removed DocumentNotFoundException with ImagingException in ImageService
DocumentNotFoundException was deleted as part of the Document entity removal but ImageService still referenced it in 9 places. Replaced with the existing Imagin...
Remove standalone Document entity — all docs now use Img/ImgDat imaging system
The Document entity, DocumentRepository, and DocumentNotFoundException are removed. DocsService WOPI and Docs integration now operates entirely through the Img ...
Add Lead Intake system entities, repos, DTOs, and service
Adds the complete data layer for the automated lead intake system: - 4 entities: LeadIntakeEndpoint, LeadIntakeFieldMapping, LeadIntakeRawPayload, LeadIntakePro...
Remove memberType field entirely to prevent Hibernate duplicate column
The previous fixes (@Transient on field, @Access(AccessType.FIELD) on class) were insufficient. Bytecode inspection revealed Lombok's @Setter generated a public...
Add @Access(AccessType.FIELD) to Member to stop Hibernate mapping getMemberType() as a column
The previous fix (@Transient on the memberType field) was insufficient. Hibernate 6 was still discovering the public getMemberType() method via property scannin...
Track uploaded-by member on Img entity
Add createdByMember (ManyToOne) field to Img so the uploader is persisted at upload time. ImageService.uploadDocument() now sets it from the calling member. Hib...
Resolve security_level SQL error caused by duplicate MEMBER_TYPE column in Hibernate 6
Member.java mapped MEMBER_TYPE both as @DiscriminatorColumn and as an explicit @Column field. Hibernate 6 selected the column twice in the parent table projecti...
Add findActiveSharesForSwMember and countNewSharesForSwMember queries to ImgShareRepository
Add null safety checks in MemberRightsAppliedService and fix role save in MemberService
Add doc sharing security rights (SHARE_DOCS_SEARCH_MEMBERS, SHARE_DOCS_ALIAS_MEMBERS, SHARE_DOCS_SEARCH_TEAM_MEMBERS, SHARE_DOCS_ALIAS_TEAM_MEMBERS)
New RoleRightType entries (IDs 108-111) under ServiceType.DOCS to control member document sharing permissions with search vs alias-only access patterns.
Add real BLAKE3 hashing, pre-upload dedup check, and org-scoped dedup
- Replace BLAKE3 placeholder with real BouncyCastle Blake3Digest in HashUtils - Add dedupScope column to ImgOrgAssoc (GLOBAL or ORG, default GLOBAL) - Add org-s...
Add thumbPageCount field and findNeedingPageThumbnails query for per-page thumbnail support
Add e-signature template entities, enums, and repositories
New JPA entities for the e-signature template design system: ESignTemplate, ESignTemplateSigner, ESignTemplateDesignVersion, and ESignTemplateFieldLink with sup...
Add findByProjectIn query to CommitLogRepository for stats endpoint
Migrate subscription JSON fields to entity-based @ManyToMany relationships
Replace jsonb string columns (compatiblePlanIds, includedInPlanIds, applicablePlanIds, applicableBillingCycles) with proper JPA @ManyToMany join tables and @Ele...
Add CommitType enum, CommitLog entity, and CommitLogRepository for changelog system
Add member access level system with owner promotion and security controls
Rename CLIENT→MEMBER and INTERNAL→TEAM_MEMBER in ImageAccessLevelType with {var} placeholders for org-specific labels. Move securityLevel from TeamMember to Mem...
Pass SYSTEM_WIDE as parameter instead of FQCN in JPQL query
Hibernate may not resolve fully-qualified enum names in JPQL across all versions. Pass ImageAssocType.SYSTEM_WIDE as a named parameter instead.
Add e-signature template support to imaging system
- Add SigTemplateStatusType enum (PENDING, COMPLETED, ARCHIVED) - Add SYSTEM_WIDE ImageAssocType for cross-context templates - Add isSigTemplate, sigTemplateSta...
Add minimum advance booking field to webinar type
Adds minAdvanceBookingMinutes to WebinarType entity and DTOs, allowing admins to require slots be booked a minimum time in advance (e.g., 24 hours). Slots close...
Replace invalid JPQL temporal arithmetic with application-layer filtering
Hibernate 6 rejects subtracting a Long from an Instant in JPQL. Replaced findWebinarsWithDueReminders (which did nanosecond arithmetic in the query) with ******...
Add PUBLIC_WEBINAR scope to API key system
Adds a new ApiKeyScope.PUBLIC_WEBINAR enum value to gate access to public webinar scheduling, joining, and cancellation endpoints.
Add webinar scheduling system entities, repositories, DTOs, and enums
Introduces the complete data model for the webinar scheduling system: - 9 JPA entities: WebinarType, WebinarPresenter, WebinarReminder, WebinarAvailabilitySlo...
Remove RestTemplate bean dependency from BaseProviderHttpClient
BaseProviderHttpClient now creates its own RestTemplate internally instead of requiring one from the application context, fixing startup crash in SecurityServic...
Implement complete retail provider integration system with 10 e-commerce providers
Add full adapter implementations for Shopify, BigCommerce, WooCommerce, Wix, Ecwid, Squarespace, Magento, Shift4Shop, PrestaShop, and OpenCart. Includes HTTP cl...
Add UserRepository.findByEmailEmail for account creation email lookup
Add **************** and ****************
New query methods for account detail page — order lookup by purchaser and account listing by org.
Replace RetailCustomer with Account-based customer model
Account.java was already the commerce customer entity but was too minimal. RetailCustomer duplicated this concept. This commit: - Enhances Account with commerc...
RetailProviderConfigRepository uses MarketId not MarketUid
CommerceMarket PK field is 'id' not 'uid'. Spring Data query derivation failed with 'No property uid found for type CommerceMarket'.
Offering.requires_shipping DB default, PriceListEntryRepository Long type
- Add columnDefinition DEFAULT true for requires_shipping on Offering to handle existing rows during ALTER TABLE migration - Fix **************** to take Long...
Add RetailService (2376 lines) and 38 retail DTOs
RetailService provides full CRUD for all KamoRetail entities across 7 domains: catalog (categories, brands, attributes, variants, images, tags, reviews), custom...
Add KamoRetail enterprise data model — 109 new entities, repositories, and provider abstraction
Full retail POS data model designed for standalone KamoRetail operation and bidirectional sync with Shopify, BigCommerce, Wix, Squarespace, Shift4Shop, Ecwid, W...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
