Delete CalendarIntegration entity and repository — replaced by ContactIntegration
Add **************** to CalendarEvent, replace CalendarIntegration FK
Add DAV fields to UserCalendar, replace CalendarIntegration FK with ContactIntegration
Remove no-op PrePersist/PreUpdate from ContactIntegration; add syncStatus test assertion
Add ContactIntegration entity replacing CalendarIntegration
Introduces the ContactIntegration JPA entity in the new contacts sub-package, supporting CalDav/CardDav provider integration with per-org or per-member ownershi...
Make NATS expectedStream configurable via nats.jetstream.stream.name property
Add EmailSignatureTemplate entity and repository
JPA entity for persisting email header/signature/footer template configurations per organization scope. Stores all design settings, template selections, image s...
Add website and social links fields to Organization and Member
Add EmbSocialLinks embeddable with fields for LinkedIn, Twitter, Facebook, Instagram, YouTube, TikTok, and GitHub URLs. Add website (VARCHAR 500) and embedded ...
Add eager-fetch query for pending reviews with article details
Add **************** query that JOIN FETCHes the article entity so review listings can include article guid/title without LazyInitializationException.
Decouple KB media from articles and add resource management support
Decouple KbMedia from KbArticle (remove article FK), add KbArticleMedia join table for many-to-many article-media links, add title/description/ dateUpdated fiel...
Add @JsonIgnore to KB entity lazy collections and back-references
Prevents LazyInitializationException and circular serialization when returning KB entities via REST endpoints.
Add Knowledge Base entities, enums, repositories, and rights
- 4 new enums: KbArticleStatus, KbReviewStatus, KbMediaType, KbEmbeddingStatus - ServiceType.KNOWLEDGE_BASE(18) and 6 KB RoleRightType entries (21-26) - 6 JPA e...
Add findByProviderId query to AiModelRepository for model enable/disable
Use native query for markConversationRead to resolve Hibernate 6.2 type mismatch
CURRENT_TIMESTAMP in JPQL returns java.sql.Timestamp which doesn't match the Instant-typed updatedAt field. Native query with NOW() bypasses this.
Use database-level timestamps instead of Instant.now()
Replace all @Builder.Default Instant.now() and @PreUpdate methods with @CreationTimestamp(source=DB) and @UpdateTimestamp(source=DB) so the database is the sing...
Add email metadata entities and repositories
Migrate JPA entities and repos from EmailService to shared library so KamoInitializerService can manage all schemas via ddl-auto.
Add ChildOrgSecurityModel entity and link security models to roles
Add backend support for child organization security models with a many-to-many relationship to security roles via OrgRoleSecurityModel join entity. Includes ent...
Add abstract title fields to BranchTitleResolution
Add memberAbstract and teamMemberAbstract fields with defaults for the label customization system.
Split ageReqType into ageReqTypeMember and ageReqTypeTeamMember
Separate age requirement tracking for members vs team members in Organization entity.
Rename Employee to TeamMember and Employment to TeamMembership
Rename all Employee/Employment references to TeamMember/TeamMembership across classes, variables, methods, DB annotations, enum values, and display text. Also u...
Add BranchTitleResolution, resolveEffectiveBranchTitles, updateBranchTitles
Fetch parent message in same query to eliminate reply N+1
Alias m.msg and LEFT JOIN FETCH msg.parent so that threaded reply messages have their parent loaded in the initial query rather than triggering a separate SELEC...
Fix N+1 query and add composite index for chat message loading
- Add LEFT JOIN FETCH m.msg to both repository queries to eagerly load MediaObjMsg in the same query, eliminating up to 100 extra SQL queries per chat windo...
Add matchIfMissing=false to ConditionalOnProperty for commerce beans
Makes it explicit that CommerceService and EngagementLifecycle are disabled by default when kamo.commerce.enabled is not set. Any service that does not configur...
Replace ConditionalOnBean with ConditionalOnProperty for CommerceService
**************** is evaluated before Spring Data JPA registers user-defined repository beans, making it unreliable. Replace with **************** which is evalu...
Eliminate full-table scan and N+1 queries on leads endpoint
- LeadRepository: add findByOrganizationId JPQL query (uses ORG_ID index) instead of loading entire LEADS table and filtering in Java - LeadCustomFormDataRepo...
Make commerce beans conditional on repository availability
Add **************** to EngagementLifecycle and CommerceService so they only load when commerce repositories are scanned. Prevents UnsatisfiedDependencyExceptio...
Allow app startup when NATS is unavailable
Remove @ConditionalOnBean from jetStream() and add @Nullable to the Connection parameter. When natsConnection() returns null (NATS unreachable), Spring no longe...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.