Reload market after create/update to initialize lazy collections
- Updated createMarket and updateMarket to reload market using getMarketById - This ensures all lazy collections (marketCustomForms, vendorProducts) are initial...
Correct path handling for mortgage fields and custom form data in lead imports
- Fixed mortgage fields to use 2-part paths (mortgageFields.loanAmount) in setNestedFieldOnCreateRequest - Fixed custom form data to use 3-part paths **********...
Make email/username login case-insensitive
- Normalize input username/email to lowercase before comparison - Use LOWER() function on database column for case-insensitive matching - Fixes issue where user...
Add backend validation for required fields in lead imports
- Add validateRequiredFields method to check required fields before import - Validate email, firstName, and lastName are present - Validate mortgage-specific fi...
Refactor LeadImportController to use LeadService.createLead
- Replace manual field mapping with LeadService.createLead for consistency - Add mapRowDataToCreateLeadRequest to convert import mappings to CreateLeadRequest -...
Add LeadController with CRUD endpoints and market config
- Add LeadController with GET, POST, PUT, DELETE endpoints - Add endpoint to get market configuration for a lead - Fix LeadImportController to use saveLead meth...
Cast getOrDefault to Boolean in formatEmail method
- Fix compilation error: incompatible types Object to boolean - Add explicit Boolean cast for toLowerCase and trim config options
Add LeadImportController with duplicate detection using vendorLeadID and composite key (vendorProductId|vendorLeadID)
Add CustomFormController for custom forms API endpoints
- Add REST controller at /api/security/custom-forms - Implement GET, POST, PUT, DELETE endpoints for form management - Support form structure with stacks and fi...
Add detailed logging to LeadVendorController for debugging title field issues
Update LeadVendorController to use title and description instead of name
Add LeadVendorController with full CRUD for vendors and products
Change LeadMarketDTO IDs to String to prevent JavaScript precision loss
Trigger rebuild to pick up updated kamo-shared-library with explicit repository queries
Add detailed logging to getMarketById for debugging market lookup issues
Trigger rebuild to pick up updated kamo-shared-library with String salesType in DTO
Return proper error message when market not found in getMarketById
Trigger rebuild to pick up updated kamo-shared-library with String salesType DTOs
Convert String salesType to SaleType enum in LeadMarketController
Add LeadMarketController for managing lead markets via REST API
使用组织流程Guid提供全组织的媒体信息
- 向媒体结构控制器添加组织存储器 - 更新了Feed以使用组织流Guid而不是查询所有会话 - 更新的创建程序 - 全组织范围内的饲料现在使用同铅饲料一样的单一溪流
修正 Media Stream 控制器的编译错误
- 固定缺失的收尾套 在得到Feed方法其他块 - 将地图( ()) 替换为 HashMap , 以便兼容 - 固定溪流变量,以便有效最终用于羊肉田 - 更新所有类似相关的代码,使用MediaBlockReasonType.LIKE而不是NO REASON - 固定铅流创建以通过铅参数
将 MediaFeed 控制器重命名为 MediaStream 控制器并添加线索流支持
- 将MediaFeed主计长改名为MediaStream主计长,处理通用媒体流 - 通过流程增加针对特定铅流的支持 - 种子端点现在接受可选的铅ID查询参数 - 员额创建支持牵头机构征求牵头评论 - 用于将主要注释转换为员额格式而添加的转换MediaObjToPostMap() - 主要评论作为MediaObjs存储...
添加社交媒体种子的 MediaFeed 控制器
- 添加带有 REST 端点的 MediaFeed 控制器,用于员额、评论和喜欢 - 实施有接入级过滤功能的分解饲料终端 - 为帖子图像添加图像上传端点 - 与媒体服务和图像服务相结合 - 支持员额创建、编辑、删除和评论 - 使用 MediaObj Report 实现类似/类似功能 - 利用存储代理端点生成适当的图像 ...
Add AccountController with endpoints for Members & Subscribers and Employees & Contractors
JobTitleController now uses pre-authenticated session from OTKPreAuthFilter to prevent 401 errors
SecurityRoleController now uses pre-authenticated session from OTKPreAuthFilter to prevent 401 errors
DomainController now uses pre-authenticated session from OTKPreAuthFilter to prevent 401 errors
Invalidate existing session before creating new one during login
- Check for existing *** cookie in login request - Delete/invalidate existing session before creating new one - Prevents reusing old session cookies when loggin...
Clear session data before deleting key to ensure session is unusable
- Set session data to empty JSON ({}) before deleting the key - Ensures session is unusable even if deletion fails or there's replication lag - Add error handli...
Improve logout cookie clearing - clear cookies across all domain/path combinations
- Clear cookies with base domain (e.g., .kamocrm.com) to cover all subdomains - Clear cookies for current hostname without domain attribute - Clear cookies unre...
使用avatarType 字段而不是复杂的代理检测
- 直接检查 AvatarType 字段以进行简单的类型检查 - 创建新相机时设置相机Type - 更简单、更能发挥作用
查询所有用户的外观以获取真正的实体而不是代理
- 从avatar获取用户ID,然后查询找到ByUserId(返回真实实体) - 从列表中查找匹配的外观并检查实例 - 这避免了代理问题 阻止实例工作
使用简单的过滤器检查是否是相片或 Avatar 创建器
- 删除复杂的代理检测逻辑 - 简单的过滤器找到ById结果 检查是否是AvatarPhoto - 如果不是相片, 默认为 Avatar 创建者 - 简单得多
使用 Hibernate Lazy Initializer 来从代理获取实际实体类
- 进入HibernateProxy的懒惰化器,以获得持久的阶级 - 检查是否是AvatarPhoto 或 Avatar 创建者 - 使用QQ强制初始化 - 这应该正确识别Avatar类型 即使它是一个代理
使用直接投影来确定外观类型而不是反射
- 试铸给AvatarPhoto先强制代理初始化 - 直接在投影后访问获取FileExtension() - 回到阿凡达阿凡达 造物主的铸造,如果相片铸造失败 - 更好的类型检测错误处理
通过抓取调用目标来改进代理类型检测
- 在代理上援引方法确定实际类型时处理分类例外 - 尝试先获取FileExtension(相片),再获取Style(阿凡达创建器) - 更好的Hibernate代理类型检测错误处理
改进模拟类型检测的 Hibernate 代理处理
- 搜索等级和接口以获取FileExtension方法 - 使用反射来检测 AvatarPhoto 与 AvatarAvatar 创建者在失败时 - 在类名检查中添加倒数 - 解决将相片造型人错误地当作"神通造型人"的问题
从寄存器重新装入相机以解决 Hibernate 代理实例
- 从关系中装入的神通实体可能是未成功检查的Hibernate代理 - 从寄存器重新装入相机以获得实际实体类型(相机或相机) - 如果重新装入失败, 使用反射法添加倒置逻辑 - 修正“ 未知的可视化类型” 错误, 导致无效可视化 URL
