feat: 新增目标子任务管理功能模块

- 实现目标子任务的完整功能,包括数据库表设计、API接口、业务逻辑和文档说明。
- 支持用户创建、管理和跟踪目标子任务,提供增删改查操作及任务完成记录功能。
- 引入惰性任务生成机制,优化任务管理体验,提升系统性能和用户交互。
This commit is contained in:
richarjiang
2025-08-22 16:01:12 +08:00
parent 062a78a839
commit 3530d123fc
10 changed files with 1593 additions and 21 deletions

View File

@@ -0,0 +1,49 @@
-- 创建目标子任务表
CREATE TABLE IF NOT EXISTS `t_goal_tasks` (
`id` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '任务ID',
`goal_id` CHAR(36) NOT NULL COMMENT '目标ID',
`user_id` VARCHAR(255) NOT NULL COMMENT '用户ID',
`title` VARCHAR(255) NOT NULL COMMENT '任务标题',
`description` TEXT COMMENT '任务描述',
`start_date` DATE NOT NULL COMMENT '任务开始日期',
`end_date` DATE NOT NULL COMMENT '任务结束日期',
`target_count` INT NOT NULL DEFAULT 1 COMMENT '任务目标次数如喝水8次',
`current_count` INT NOT NULL DEFAULT 0 COMMENT '任务当前完成次数',
`status` ENUM('pending', 'in_progress', 'completed', 'overdue', 'skipped') NOT NULL DEFAULT 'pending' COMMENT '任务状态',
`progress_percentage` INT NOT NULL DEFAULT 0 COMMENT '完成进度百分比 (0-100)',
`completed_at` DATETIME COMMENT '任务完成时间',
`notes` TEXT COMMENT '任务备注',
`metadata` JSON COMMENT '任务额外数据',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除',
PRIMARY KEY (`id`),
INDEX `idx_goal_id` (`goal_id`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_status` (`status`),
INDEX `idx_start_date` (`start_date`),
INDEX `idx_end_date` (`end_date`),
INDEX `idx_deleted` (`deleted`),
INDEX `idx_user_goal` (`user_id`, `goal_id`),
INDEX `idx_user_status` (`user_id`, `status`),
INDEX `idx_user_date_range` (`user_id`, `start_date`, `end_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='目标子任务表';
-- 添加外键约束
ALTER TABLE `t_goal_tasks`
ADD CONSTRAINT `fk_goal_tasks_goal_id`
FOREIGN KEY (`goal_id`) REFERENCES `t_goals` (`id`)
ON DELETE CASCADE ON UPDATE CASCADE;
-- 添加检查约束MySQL 8.0+
-- ALTER TABLE `t_goal_tasks`
-- ADD CONSTRAINT `chk_target_count_positive` CHECK (`target_count` > 0);
--
-- ALTER TABLE `t_goal_tasks`
-- ADD CONSTRAINT `chk_current_count_non_negative` CHECK (`current_count` >= 0);
--
-- ALTER TABLE `t_goal_tasks`
-- ADD CONSTRAINT `chk_progress_percentage_range` CHECK (`progress_percentage` >= 0 AND `progress_percentage` <= 100);
--
-- ALTER TABLE `t_goal_tasks`
-- ADD CONSTRAINT `chk_date_range` CHECK (`end_date` >= `start_date`);