Add sessionTimeoutMinutes to all security DTOs and request objects
Add market_id FK to POS entities and market-filtered repository queries
Add market association (ManyToOne FK to CommerceMarket) to Offering, InventoryItem, RentalAsset, Vendor, and SubscriptionPlan entities. Add findByMarketId queri...
Add CommerceMarketService with full CRUD for markets, categories, and vendors
Add DTOs for commerce markets, vendor categories, and market vendors
Add repositories for commerce markets, vendor categories, and market vendors
Serialize POS DTO uid/id as string in JSON for JS safe integer
- RetailOrderDTO.uid, **************** EngagementDetailDTO.id/linkId, MortgageAppDTO.uid - Use @JsonSerialize(using = ToStringSerializer.class) to avoid precisi...
Use explicit @Query for findByUidAndOrganization_Id to avoid deployment/startup issues with derived query
Commerce repository and service updates (EngagementRepository, OrderRepository, CommerceService)
Add EmbNameFull.formatFull(), fix @Builder warnings, repo method renames
Replace formatFull() with formatEmbNameFull() - EmbNameFull has no formatFull method
Server-side order filtering (status, dateFrom, dateTo), CommerceService overload
Phase 1-3 foundation - RETAIL, MORTGAGE, RENTAL assets
Phase 1 RETAIL: - CommitmentContextType.SALE, processOrderPaid: Commitment, Transaction, InventoryAllocation, FulfillmentOrder - checkInventoryForOrder on creat...
Use Uid instead of Id for BaseEntity-derived relations
- FulfillmentOrderRepository: findBySourceCommitmentId -> findBySourceCommitmentUid (Commitment uses uid) - TransactionRepository: findByOrderId -> findByOrderU...
Add ordering (createdAt DESC) and date range filter
- EngagementRepository: OrderByDateCreatedDesc on all find methods - CommerceService: dateFrom/dateTo params, in-memory date filter - Engagements API now suppor...
Add EngagementDomainTypeConverter for VENDOR→SERVICE, no manual SQL
- JPA AttributeConverter maps legacy VENDOR to SERVICE when reading from DB - Applied to Engagement.domain and OrgPOSConfig.enabledDomains - Removes need for ma...
Replace pos beans with commerce package
- Add commerce package (Order, Intent, Offering, InventoryItem, InventoryPool, etc.) - Add CommerceService replacing POSService, RetailProductService, RetailInv...
Enterprise validation in POSService
- createRetailOrder: null check on request - createLineItem: null check, quantity > 0, unitPrice >= 0 validation
Add POS/inventory domain entities, DTOs, repos and services
- Add POS beans (retail, rental, mortgage, subscription, vendor) - Add RetailProduct, RetailInventoryStock, RetailOrder, MortgageApp DTOs - Add RetailProductSer...
Populate vendorProduct relationship when fetching leads
Update getLeadsByOrganizationId() to populate the @Transient vendorProduct field for each lead that has a vendorProductId. This ensures the vendor and product d...
Add status, subStatus, source, and dateCreated fields
- Added status, subStatus, source, dateCreated, and isActive fields to Lead entity - Updated LeadDTO with frontend-compatible fields (status, subStatus, source,...
Refactor Lead assignment from String to Employee reference
- Changed Lead.assignedUser (String) to Lead.assignedEmployee (Employee) - Added LeadAssignment entity to track assignment history - Added LeadAssignmentType en...
Add phone extension support to CreateLeadRequest, UpdateLeadRequest, and LeadDTO
Resolve MultipleBagFetchException and fix custom form persistence
- Simplified CustomFormRepository query to avoid multiple bag fetches - Fixed LeadMarketService to properly save and load custom form associations - Use saveAnd...
Properly save and load custom form associations for markets
- Removed repository delete, now using JPA orphan removal for cleanup - Initialize lazy marketCustomForms collection before clearing - Ensure collections are in...
Resolve MultipleBagFetchException in CustomFormRepository
- Simplified findByIdAndOrganizationId query to avoid fetching multiple bags - Removed LEFT JOIN FETCH for stacks and fields in same query - Collections are now...
Resolve MultipleBagFetchException by using transactional lazy loading
- LeadMarketRepository: Reverted to simple query without multiple JOIN FETCH - LeadMarketService: Added @Transactional(readOnly=true) to getMarketById with expl...
Add eager loading for repository queries to fix lazy loading issues
- CustomFormRepository: Added LEFT JOIN FETCH for stacks and fields in findByIdAndOrganizationId - LeadMarketRepository: Added LEFT JOIN FETCH for marketCustomF...
Add salesSubType field to LeadMarketDTO for mortgage field detection
- Added salesSubType field to distinguish between parent SaleType and sub-types - When SaleType has a parent (e.g., RESIDENTIAL_MORTGAGE), salesType becomes the...
Add market-based lead fields and custom form data support
- Add marketId field to Lead entity - Create LeadCustomFormData entity with JSONB column for custom form data - Add LeadCustomFormDataRepository - Update LeadDT...
Add parent-child hierarchy support to SaleType enum
- Added RESIDENTIAL_MORTGAGE, COMMERCIAL_MORTGAGE, SERVICE_CUSTOM as children of SERVICE - Added PRODUCT_CUSTOM as child of PRODUCT - Added helper methods: getP...
Add lead import DTOs (LeadImportRequest, LeadImportResponse) for file-based lead imports
Change NATS DeliverPolicy from All to New to prevent message replay - only deliver new messages after subscription
Add support for unique consumer names in NATS subscriptions - Add overloaded subscribe() method that accepts custom consumer name - Allows multiple chat sessions to have independent NATS consumers - Fixes issue where all sessions shared same consumer causing message delivery conflicts
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.