Autumn-27
fea78b2d6f
feat(tasks): 任务列表支持批量修改分类
勾选多个任务后可一次性移动到目标分类,或选「未分类」把它们移出当前分类。
- db: 新增 SetTasksCategory,在单个事务里校验分类存在性并 UPDATE ... WHERE
id=ANY(...),返回真正被更新的 id 和刷新后的分类(含 task_count)。分类检查
放在事务内,避免并发删除把 UPDATE 变成外键冲突。单批上限 100。
- server: 新增 POST /api/tasks/category/batch。写入原子,响应里的逐任务失败
只可能是勾选后又被删掉的任务;顺带把 category_id 的解析(必填但可为 null)
抽成 parseCategoryIDField 与单任务接口共用。
- server: 把批量 id 的 trim/归一/去重逻辑从 controlTasksBatch 抽成
normalizeBatchTaskIDs,两个批量端点共用同一套重复判定。
- manager: SetTasksCategory 在 taskStateMu 内完成 DB 写入与运行中任务 DTO
刷新,防止与单任务更新交错后留下过期的 category_name。
- web: 选中工具栏新增「修改分类」对话框(需确认目标,避免误点批量改动);
「未分类」哨兵值统一提取为 UNCATEGORIZED_VALUE。
验证: go build / vet / gofmt、db 与 server 新增测试连本地 PG 实跑通过、
tsc --noEmit、biome check、next build 均通过。
2026-08-24 09:16:44 -04:00
..
2026-07-26 04:27:45 -04:00
2026-08-24 19:30:14 +08:00
2026-08-24 19:29:14 +08:00
2026-08-24 19:29:14 +08:00
2026-08-11 10:56:39 -04:00
2026-07-26 04:27:45 -04:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:30:07 +08:00
2026-08-24 14:14:15 +08:00
2026-08-24 19:29:38 +08:00
2026-08-24 19:31:16 +08:00
2026-07-26 04:27:45 -04:00
2026-07-26 04:27:45 -04:00
2026-08-24 19:31:16 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:28:18 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:29:24 +08:00
2026-08-24 19:29:24 +08:00
2026-08-24 14:14:15 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 14:14:15 +08:00
2026-08-24 19:28:18 +08:00
2026-08-24 19:28:18 +08:00
2026-07-26 04:27:45 -04:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 09:16:44 -04:00
2026-07-26 04:27:45 -04:00
2026-08-11 10:56:39 -04:00
2026-08-24 19:29:00 +08:00
2026-07-26 04:27:45 -04:00
2026-08-09 04:49:57 -04:00
2026-08-24 14:14:15 +08:00
2026-08-24 19:29:00 +08:00
2026-08-24 19:31:16 +08:00
2026-08-24 09:16:44 -04:00
2026-08-24 19:30:14 +08:00
2026-07-26 04:27:45 -04:00
2026-08-24 14:14:15 +08:00
2026-08-24 19:29:14 +08:00
2026-08-24 09:16:44 -04:00
2026-08-24 09:16:44 -04:00
2026-08-24 19:29:00 +08:00
2026-08-24 09:16:44 -04:00
2026-08-24 19:29:00 +08:00
2026-08-24 14:14:15 +08:00
2026-08-24 14:14:15 +08:00
2026-08-24 14:14:15 +08:00
2026-08-24 19:29:46 +08:00
2026-08-24 19:29:46 +08:00
2026-07-26 04:27:45 -04:00
2026-07-26 04:27:45 -04:00
2026-08-09 02:19:29 -04:00
2026-07-26 04:27:45 -04:00
2026-07-26 04:27:45 -04:00
2026-08-09 01:01:19 -04:00