Commit Graph

20 Commits

Author SHA1 Message Date
richarjiang
562c66a930 feat(ai): 添加AI报告生成历史记录功能,支持每日生成限制和双API提供商 2025-12-02 12:07:08 +08:00
richarjiang
ac231a7742 feat(challenges): 支持自定义挑战类型并优化必填字段验证
- 新增 CUSTOM 挑战类型枚举值
- requirementLabel 字段改为可选,允许为空并添加默认值处理
- minimumCheckInDays 最大值从 365 提升至 1000,支持更长周期挑战
- 推送通知模板支持自定义挑战的动态文案生成
- 新增 getCustomEncouragementTemplate 和 getCustomInvitationTemplate 函数
2025-11-27 11:11:26 +08:00
richarjiang
7a05097226 feat(challenges): add vip user restrictions for challenge creation
限制非会员用户只能创建一个未归档的自定义挑战,添加用户VIP状态检查和挑战数量限制逻辑
2025-11-27 08:33:46 +08:00
richarjiang
5d64a99ce5 feat(challenges): 添加挑战创建者标识和归档状态过滤
- 为挑战详情和列表接口添加isCreator字段标识创建者
- 过滤掉已归档的挑战,避免在列表和操作中显示
- 为挑战详情接口添加JWT认证守卫
- 将自定义挑战的progressUnit字段设为必填
- 优化挑战编辑时的错误提示信息
- 移除冗余的isCreator私有方法,直接在响应中设置标识
2025-11-26 18:57:13 +08:00
richarjiang
26e88ae610 feat(challenges): 添加挑战源和分享代码字段,更新挑战详情和列表接口 2025-11-26 17:26:27 +08:00
richarjiang
029b8f46b9 feat(challenges): 更新自定义挑战功能,支持时间戳转换及数据模型调整 2025-11-26 10:43:42 +08:00
richarjiang
93b4fcf553 feat(challenges): 添加用户自定义挑战功能及分享机制
实现完整的自定义挑战系统,支持用户创建、分享和管理个人挑战:

- 数据库扩展:添加 source、creator_id、share_code、is_public、max_participants、challenge_state 字段
- 分享机制:自动生成6位唯一分享码,支持公开和私密模式
- API接口:创建挑战、通过分享码加入、获取创建列表、更新归档挑战、重新生成分享码
- 权限控制:创建者专属编辑权限,频率限制防滥用(每日5个)
- 业务逻辑:人数限制检查、挑战状态流转、参与者统计
- 文档完善:使用文档和部署指南,包含API示例和回滚方案

兼容现有系统挑战,使用相同的打卡、排行榜和勋章系统
2025-11-25 19:07:09 +08:00
1c033cd801 feat(badges): 更新勋章系统,支持UUID作为勋章ID类型
feat(challenges): 优化进度报告,添加睡眠挑战勋章授予逻辑
fix(push-notifications): 修复推送测试服务初始化返回值问题
2025-11-15 23:25:02 +08:00
richarjiang
bac75f82ba feat(challenges): 在挑战列表和详情中添加勋章信息展示
为睡眠挑战类型添加勋章信息支持,在挑战列表和详情接口中返回 sleepChallengeMonth 勋章配置数据。

- 在 ChallengesModule 中注册 BadgeConfig 模型
- 在 ChallengesService 中注入 BadgeConfig 仓库
- 查询列表时,若存在睡眠挑战则预加载勋章配置
- 查询详情时,若为睡眠挑战则附加勋章信息
- 在 DTO 中新增 BadgeInfoDto 接口定义勋章数据结构
- 仅对激活状态的 sleepChallengeMonth 勋章进行查询和展示
2025-11-14 17:26:41 +08:00
richarjiang
7b4d7c4459 feat(badges): 添加用户勋章系统,支持睡眠挑战勋章自动授予
实现完整的用户勋章功能模块:
- 新增 BadgeConfig 和 UserBadge 数据模型,支持勋章配置和用户勋章管理
- 新增 BadgeService 服务,提供勋章授予、查询、展示状态管理等核心功能
- 在挑战服务中集成勋章授予逻辑,完成首次睡眠打卡授予 goodSleep 勋章,完成睡眠挑战授予 sleepChallengeMonth 勋章
- 新增用户勋章相关接口:获取用户勋章列表、获取可用勋章列表、标记勋章已展示
- 支持勋章分类(睡眠、运动、饮食等)、排序、启用状态管理
- 支持勋章来源追踪(挑战、系统、手动授予)和元数据记录
2025-11-14 17:08:02 +08:00
4d1b8910f8 feat(challenges): 修改挑战列表过滤条件为只显示正在进行的挑战 2025-10-01 22:54:03 +08:00
richarjiang
999fc7f793 feat(challenges): 支持公开访问挑战列表与详情接口
- 在 GET /challenges、GET /challenges/:id、GET /challenges/:id/rankings 添加 @Public() 装饰器,允许未登录用户访问
- 将 userId 改为可选参数,未登录时仍可返回基础数据
- 列表接口过滤掉 UPCOMING 状态挑战,仅展示进行中/已结束
- 返回 DTO 新增 unit 字段,用于前端展示进度单位
- 鉴权守卫优化:公开接口若携带 token 仍尝试解析并注入 user,方便后续业务逻辑
2025-09-30 16:43:46 +08:00
richarjiang
87c3cbfac9 feat(challenges): 新增分页排行榜接口并重构排行逻辑
- 新增 GET /challenges/:id/rankings 接口,支持分页查询排行榜
- 抽离 buildChallengeRankings 方法,统一排行榜数据构建逻辑
- 新增 ChallengeRankingListDto 与 GetChallengeRankingQueryDto 用于接口数据校验
- 优化挑战列表排序逻辑,按状态优先级与时间排序
- 修复排行榜索引计算错误,确保分页场景下排名正确
2025-09-30 11:17:31 +08:00
richarjiang
f13953030b feat(challenges): 新增今日上报值与目标值字段至排行榜接口 2025-09-29 17:22:10 +08:00
richarjiang
12acbbd166 feat(challenges): 新增今日打卡状态字段并更新进度构建逻辑
- 在 ChallengeProgressDto 中增加 checkedInToday 字段
- 修改 buildChallengeProgress 方法,支持传入 lastProgressAt 参数
- 所有调用处同步更新,确保返回包含今日打卡状态
- 使用 dayjs 判断最后进度时间是否为今日
2025-09-29 17:12:54 +08:00
richarjiang
64460a9d68 feat(challenges): 新增挑战类型字段并重构进度上报逻辑
- 数据库新增 type 列区分 water/exercise/diet/mood/sleep/weight 六类挑战
- 进度上报由增量模式改为绝对值模式,字段 increment_value → reportedValue
- 服务层按 challenge.targetValue 判断当日是否完成,再按 minimumCheckInDays 统计总进度
- 相关 DTO 与模型同步更新,支持新类型返回

BREAKING CHANGE: 上报接口字段由 increment 改为 value,且为当日绝对值
2025-09-29 15:14:48 +08:00
richarjiang
d87fc84575 feat(challenges): 使用 minimumCheckInDays 统一进度目标计算
将挑战完成目标从 targetValue/progressUnit 改为 minimumCheckInDays 字段驱动,确保列表、详情、加入、打卡各场景使用一致的完成天数标准,并移除前端展示字段 badge/subtitle。
2025-09-29 10:25:20 +08:00
richarjiang
22fcf694a6 fix(db): 统一字符集排序规则并修复时间戳类型
- 新增 SQL 脚本统一表与列字符集为 utf8mb4_unicode_ci
- 移除建表语句冗余 COLLATE 子句,由全局配置控制
- 将挑战起止时间字段由 Date 改为 BIGINT 时间戳,避免时区与精度问题
- 补充 Winston 日志追踪挑战详情查询性能
- 数据库模块新增 charset 与 collate 全局配置,确保后续表一致性

BREAKING CHANGE: challenge.startAt/endAt 由 Date 变更为 number(毫秒时间戳),调用方需同步调整类型
2025-09-29 09:59:06 +08:00
richarjiang
ae8039c9ed feat(challenges): 新增每日进度上报防重复机制
- 创建 t_challenge_progress_reports 表记录用户每日上报
- 通过唯一索引 (challenge_id, user_id, report_date) 确保每日仅一次有效上报
- 更新 progress 时先写入报告表,冲突则直接返回当前进度
- 模块中新增 ChallengeProgressReport 模型及相关依赖
2025-09-28 12:13:31 +08:00
richarjiang
1b7132a325 feat(challenges): 新增挑战功能模块及完整接口实现
- 新增挑战列表、详情、加入/退出、进度上报等 REST 接口
- 定义 Challenge / ChallengeParticipant 数据模型与状态枚举
- 提供排行榜查询与用户排名计算
- 包含接口文档与数据库初始化脚本
2025-09-28 12:02:39 +08:00