Losita
e5b27df80d
Version: 0.7.2.dev.260322
...
feat(schedule-plan): ✨ 重构智能排程链路并修复粗排双节对齐问题
- ✨ 新增“对话级排程状态持久化”能力:引入 `agent_schedule_states` 模型/DAO,并接入启动迁移
- ✨ 智能排程图升级:补齐小幅微调(quick refine)分支,完善预算/并发/状态字段流转
- ✨ 预览链路增强:完善排程预览服务读写与桥接逻辑,新增本地预览页 `infra/schedule_preview_viewer.html`
- ♻️ 缓存治理统一:将相关缓存处理收口到 DAO + `cache_deleter` 联动清理,移除旧散落逻辑
- 🐛 修复粗排核心 bug:禁止单节降级,强制双节并按 `1-2/3-4/...` 对齐;修复结束日扫描边界问题
- ✅ 新增粗排回归测试:覆盖孤立单节、偶数起点双节、Filler 对齐等关键场景
2026-03-22 13:50:10 +08:00
Losita
f3f9902e93
Version: 0.7.1.dev.260321
...
feat(agent): ✨ 重构智能排程分流与双通道交付,补齐周级预算并接入连续微调复用
- 🔀 通用路由升级为 action 分流(chat/quick_note_create/task_query/schedule_plan),路由失败直接返回内部错误,不再回落聊天
- 🧭 智能排程链路重构:统一图编排与节点职责,完善日级/周级调优协作与提示词约束
- 📊 周级预算改为“有效周保底 + 负载加权分配”,避免有效周零预算并提升资源利用率
- ⚙️ 日级并发优化细化:按天拆分 DayGroup 并发执行,低收益天(suggested<=2)跳过,单天失败仅回退该天结果并继续全局
- 🧵 周级并发优化细化:按周并发 worker 执行,单周“单步动作”循环(每轮仅 1 个 Move/Swap 或 done),失败周保留原方案不影响其它周
- 🛰️ 新增排程预览双通道:聊天主链路输出终审文本,结构化 candidate_plans 通过 /api/v1/agent/schedule-preview 拉取
- 🗃️ 增补 Redis 预览缓存读写与清理逻辑,新增对应 API、路由、模型与错误码支持
- ♻️ 接入连续对话微调复用:命中同会话历史预览时复用上轮 HybridEntries,避免每轮重跑粗排
- 🛡️ 增加复用保护:仅当本轮与上轮 task_class_ids 集合一致才复用;不一致回退全量粗排
- 🧰 扩展预览缓存字段(task_class_ids/hybrid_entries/allocated_items),支撑微调承接链路
- 🗺️ 更新 README 5.4 Mermaid(总分流图 + 智能排程流转图)并补充决策文档
- ⚠️ 新增“连续微调复用”链路我尚未完成测试,且文档状态目前较为混乱,待连续对话微调功能真正测试完成后再统一更新
2026-03-21 22:08:35 +08:00
Losita
cd95aeeaaa
Version: 0.6.8.dev.260317
...
- 🧹 删除 `docs/apifox` 目录,接口契约统一迁移并维护于 Apifox 云端
- ✨ 新增“取消任务完成状态”接口
2026-03-17 22:54:07 +08:00
LoveLosita
bc56d471a8
Version: 0.6.7.dev.260317
...
✨ feat(agent): 新增 Token 配额门禁中间件(Redis 快照 + 封禁键 + 7 天懒重置)
- 🚪 在 `POST /api/v1/agent/chat` 挂载 `TokenQuotaGuard`,在请求进入业务逻辑前完成额度校验
- ⚡ 新增 Redis 配额快照与封禁键机制:超额用户命中封禁键后可快速拦截,降低重复查库带来的开销
- 🗃️ 新增用户配额 DAO 能力:按需读取 `token_limit`、`token_usage`、`last_reset_at`,并支持基于“到期条件更新”的懒重置
- 🔄 实现 7 天懒重置策略:用户访问时若检测到配额周期已到期,则重置 `token_usage` 并清理封禁状态
- 🚫 新增超额响应码 `40051`,用于标识 `token usage exceeds limit`
2026-03-17 19:46:08 +08:00
LoveLosita
96be3e2a02
Version: 0.6.6.dev.260317
...
✨ feat(task,agent): 新增任务完成接口,并打通聊天全链路 Token 记账
- ✅ 新增“标记任务为完成”接口,并补充幂等保护,避免重复完成导致状态污染
- 📊 为聊天链路补充 Token 统计能力:
- 流式主对话链路直接读取模型 `usage`
- Agent 链路通过 `Eino callback + ctx` 聚合 `Generate usage`
- 在流式场景下补齐缺失的 `usage` 数据
- 🧾 按口径 B 完成 Token 落库:
- 用户消息 `token` 记为 `0`
- 助手消息记录本轮总 `token`
- 持久化时同步更新 `chat_histories.tokens_consumed`、`agent_chats.tokens_total`、`users.token_usage`
- 🔄 异步标题生成产生的 Token 通过 Outbox 事件完成账本增量调整,保证统计口径一致
- 📝 同步更新 `AGENTS.md` 与 `.gitignore`
- 📚 小幅更新 README 说明文档
2026-03-17 18:23:07 +08:00
Losita
84371e2ff8
Version: 0.6.3.dev.260316
...
✨ feat(task): 新增四象限任务懒触发自动平移链路(读时派生 + Outbox 异步收敛)
- 🧩 为 `Task` 模型新增 `urgency_threshold_at` 字段,并补充复合索引 `user_id,is_completed,urgency_threshold_at,priority` 及相关事件 payload
- ♻️ 重构 `TaskService.GetUserTasks`:调整为“缓存/DB 读取原始任务 -> 读时派生优先级(`2 -> 1`、`4 -> 3`)-> 通过 `SETNX` 去重后发布平移事件”的处理链路
- 🚚 新增任务平移事件链路:
- `service/events/task_urgency_promote.go`
- 事件类型:`task.urgency.promote.requested`
- 支持 `Publish` + `RegisterHandler` + `ConsumeAndMarkConsumed` 的事务化消费流程
- 🛡️ 为 `TaskDAO` 新增幂等批量更新能力 `PromoteTaskUrgencyByIDs`,采用条件更新策略,仅对“达到阈值且未完成”的任务生效
- 🔌 更新启动接线逻辑:注册任务平移 handler,并将 `eventBus` 注入 `NewTaskService`
- 🧹 修复并升级任务缓存层,统一为 `[]model.Task` 原始模型缓存;同时清理误导性注释,并补充详细中文步骤化注释
- 🔗 打通 `QuickNote` 链路中的 `urgency_threshold_at` 透传与校验,覆盖 `state` / `tool` / `nodes` / `prompt` / `agent_quick_note` 全链路
- 💾 写库时补充落库 `task.UrgencyThresholdAt`
- 📝 新增功能决策记录
之前画的饼正在一块块填上~这一块饼填上之后,第一批开发的后端部分基本已经搞定了。后面的功能全都是天马行空的拓展功能。
2026-03-16 20:33:33 +08:00
Losita
daeff0afab
Version: 0.6.2.dev.260316
...
✨ 新增获取用户对话列表接口,采用分页读库方式实现,暂未引入缓存,以保证数据一致性
2026-03-16 16:53:14 +08:00
Losita
626fc700d2
Version: 0.6.1.dev.260316
...
♻️ refactor(outbox): 抽离通用事件总线,并完成 event_type-only 收口
- ✨ 新增 `infra` 层通用 `EventBus` / `EventContract`,统一事件发布与消费协议
- 🔄 将聊天持久化链路调整为通过 `service/events` 注册 handler 并发布事件,进一步解耦业务逻辑与异步处理流程
- 🧹 移除 `chat_history_async` 旧适配实现,以及基于 `biz_type` 的兼容分发逻辑
- 📝 更新 Outbox 异步持久化决策记录,明确保留方案 A,并正式启用方案 B
- 📚 同步更新 README 中关于 Outbox + Kafka 可靠异步链路的说明
- 🚚 当前 `outbox + kafka` 已与项目业务链路完全解耦,沉淀为通用、可靠性更强的消息队列能力;后续将参考消息队列的典型使用方式,逐步扩展到更多业务场景
- ✨ 补充跨不同分类事务管理器中的 `agent dao` 注册与接入支持
2026-03-16 13:00:26 +08:00
Losita
712bcd3605
Version: 0.6.0.dev.260315
...
新增对话落库对话计数原子自增机制,确保聊天记录和消息计数二者同时落库,保证一致性
2026-03-15 23:38:46 +08:00
Losita
d91784d65f
Version: 0.5.9.dev.260315
...
✨ 为原有流式聊天链路补充“聊天结束后异步调用 LLM 生成对话标题并落库”的机制,相关测试已通过
📄 新增“获取对话元信息”接口,便于前端统一获取对话的各类信息,包括上述异步生成的标题
2026-03-15 19:54:49 +08:00
Losita
7603a7561a
Version: 0.5.8.dev.260315
...
♻️ refactor(agent): 拆分 agentsvc,并增强 quicknote/outbox 注释与可维护性
- 📦 将 Agent 服务实现从 `service` 根目录迁移到 `service/agentsvc`,包含 `agent.go`、`agent_quick_note.go` 及相关测试
- 🔌 新增 service 层兼容桥接 `agent_bridge.go`,保持 `service.NewAgentService` 与 `*service.AgentService` 现有调用方式不变
- 📝 为 `quicknote` 补充高密度中文步骤化注释,覆盖 `graph` / `runner` / `nodes` / `tool` / `state` / `prompt`,明确职责边界、分支条件、重试与兜底策略
- 🧭 为 `infra/outbox` 与 service agent 链路补充详细中文注释,覆盖状态机流转、幂等处理、失败回写与异步持久化语义
- ✅ 统一格式化相关文件,并通过全量后端测试:`go test ./...`
📝 chore(docs): 更新 AGENTS.md 注释强制规范
- 📚 追加“注释规范(强制)”与“注释风格示例”
- ✍️ 明确复杂逻辑必须使用步骤化注释、跨文件调用需写调用目的、注释需同步维护
2026-03-15 18:08:33 +08:00
Losita
912a6d8cfe
Version: 0.5.0.dev.260310
...
refactor: ♻️ 调整 Outbox 写入时序并移除 Kafka 首包同步投递逻辑
* 将 `outbox` 表写入逻辑后置到 LLM 请求之后,减少主链路阻塞
* 删除 Codex 生成的 Kafka 首包同步投递抽象逻辑,简化消息发送流程
* 优化 SSE 首字到达时间,整体降低约 1s 延迟
* 当前在请求 LLM 之前的流程全部为 Redis 操作,显著降低 IO 开销
docs: 📊 保留 SSE 链路性能打点逻辑
* 保留原有 SSE 全链路打点计时代码,便于后续性能排查与分析
* 当前默认注释,如需使用可手动启用进行性能调试
2026-03-10 23:10:09 +08:00
Losita
959049db42
Version: 0.4.9.dev.260309
...
feat: 🗄️ 新增自动建表功能
* 新增项目启动时自动建表能力,减少手动初始化数据库步骤
* 解决 `agent_chat` 与 `chat_history` 结构体互相持有对方结构体用于 `preload` 导致的循环依赖问题
* 修复因结构体互相依赖引发的建表失败问题,保证数据库初始化流程稳定
feat: 🐳 Docker Compose 引入 Kafka 分区自动初始化
* 更新 `docker-compose` 配置,引入 Kafka partition 自动初始化脚本
* 保证服务启动后 Topic 即具备可用 partition,实现开箱即用
* 修复转移环境后 MySQL 等容器数据无法持久化的问题,统一改为使用命名卷进行数据持久化
docs: 📚 补充 Outbox + Kafka 持久化链路注释
* 为 Outbox + Kafka 消息持久化链路补充详细代码注释
* 提升异步消息链路的可读性与维护性
* 当前代码 Review 进度约 50%
undo: ⚠️ Kafka 初始化阶段出现消息短暂堆积
* 初次初始化项目时观察到消息在 Kafka 中短暂堆积现象
* 后续被消费者一次性消费且未再次复现
* 已在生产者启动、消费者启动以及消息消费流程中增加控制台日志输出,降低系统黑箱程度
* 后续若条件允许将进一步排查该现象的触发原因
2026-03-09 23:25:25 +08:00
LoveLosita
1ed558b488
Version: 0.4.8.dev.260308
...
feat: 🏗️ 实现 Agent 消息可靠异步持久化(Outbox + Kafka)
* 新增 Outbox 数据模型与消息载荷定义,位于 `backend/model/outbox.go`
* 新增 Outbox DAO,支持创建、扫描、发布标记、失败重试与消费落库事务,位于 `backend/dao/outbox.go`
* 新增 Kafka 基础封装,包含配置、生产者、消费者与消息包装,位于 `backend/kafka` 文件夹
* `config.go`:Kafka 配置文件
* `producer.go`:Kafka 生产者
* `consumer.go`:Kafka 消费者
* `envelope.go`:消息封装处理
* 新增异步管道服务,处理扫描投递与消费落库,位于 `backend/service/agent_async_pipeline.go`
* 接入 Agent 聊天链路的可靠持久化,替换原有 goroutine 直接写库逻辑,位于 `backend/service/agent.go`
* 启动流程接入管道初始化与启动,位于 `backend/cmd/start.go`
* 增加 Kafka 配置项,更新 `backend/config.yaml` 与 `backend/config.example.yaml`
* 引入 Kafka 依赖:`github.com/segmentio/kafka-go`(见 `backend/go.mod`, `backend/go.sum`)
fix: 🐛 修复首启偶发 user 消息重复落库问题
* 解决因 Outbox 状态并发回写竞态,导致 `consumed` 被晚到的 `published` 覆盖的问题
* 在 `MarkPublished` 中增加条件,避免覆盖已标记为 `consumed` 或 `dead` 的消息,修复位置:`backend/dao/outbox.go`
perf: ⚡ 更新 Docker Compose 配置与 Kafka 相关服务
* 更新 `docker-compose.yml` 文件,新增 Kafka 配置与服务
fix: 🧹 优化缓存删除逻辑
* 在 `cache deleter` 中忽略了 `model.AgentOutboxMessage`、`model.ChatHistory` 与 `model.AgentChat` 这三个结构体
* 防止这些结构体对应的表单删除缓存时,导致控制台消息爆炸
2026-03-08 12:53:54 +08:00
LoveLosita
4906f814fd
Version: 0.4.6.dev.260307
...
feat: 🎯 新增 Token 估算与裁剪工具
* 在 `backend/pkg/token_budget.go` 中新增 Token 估算与裁剪工具
* 最大上下文 Token 数量设置为 224000,预留冗余 28000
* 从最旧消息开始裁剪,直到历史 Token 数量低于预算
* 根据裁剪后的历史消息数量动态计算 Redis 动态窗口大小
refactor: ♻️ 接入 Token 裁剪至 Service 主流程
* 在 `backend/service/agent.go` 中接入 Token 裁剪逻辑
* 先从历史数据获取(缓存未命中则查询数据库)
* 按 Token 预算裁剪历史消息,裁剪后再喂模型
* 根据裁剪结果动态调整 Redis 会话窗口
refactor: ♻️ 改造 Redis 历史队列为会话级动态窗口
* 在 `backend/dao/agent-cache.go` 中新增 `SetSessionWindowSize` 与 `EnforceHistoryWindow`
* `PushMessage` 和 `BackfillHistory` 方法使用会话动态窗口,而非固定 20 条历史消息
* 默认窗口大小提升至 128,但会被会话动态窗口值覆盖
2026-03-07 16:37:07 +08:00
LoveLosita
26c350f378
Version: 0.4.4.dev.260307
...
feat: 🚀 增强会话管理与缓存机制
* 会话 ID 空值兜底,若 `conversation_id` 为空时自动生成 UUID
* 在响应头写入 `X-Conversation-ID`,供前端使用,保持同一会话状态
perf: ⚡ 会话状态缓存优化
* 当缓存未命中但 DB 已确认/创建会话后,调用 `SetConversationStatus` 回写 Redis
* 缓存写回失败时记录日志,不中断聊天主流程,确保业务流畅性
fix: 🐛 修复历史消息顺序问题与编译错误
* 修复历史消息顺序问题,保证返回的 N 条历史消息按时间正序喂给模型
* 通过反转 `created_at desc` 查询结果的切片,确保模型输入顺序正确
* 修复 `fmt.Errorf` 参数不匹配问题,修正编译错误
* 整理 `agent-cache.go` 为标准 UTF-8 编码,避免 Go 编译报错 `invalid UTF-8 encoding`
feat: 🛠️ 独立构建 MCP 服务器
* 使用 `Codex` 构建独立于后端的 MCP 服务器,简化与 Codex 的协作
* 通过该服务器方便 Codex 直接测试和查看 Redis 与 MySQL 中的数据
2026-03-07 15:25:40 +08:00
LoveLosita
204e78d1fe
Version: 0.4.3.dev.260305
...
perf: ⚡ 引入 Redis 缓存优化上下文读写性能
* 为上下文写入与提取逻辑新增 Redis 缓存层,减少数据库直接读取开销
* 在 Redis 中实现简单滑动窗口裁剪策略,控制上下文消息数量并降低存储压力
refactor: ♻️ 上下文持久化逻辑改为异步执行
* 对写缓存与写数据库逻辑引入 `goroutine` 实现简单异步处理
* 降低接口阻塞时间,提高 Agent 对话接口响应性能
* 当前尚未完善异步流程中的错误传递与处理机制,后续将补充完整错误链路管理
2026-03-05 22:36:53 +08:00
LoveLosita
f9d52e0c5e
Version: 0.4.1.dev.260304
...
feat: 💬 新增对话创建与上下文记忆机制
* 新增对话的创建与使用功能,实现会话级上下文隔离
* 实现上下文保存与传递机制,使模型具备持续对话记忆能力
* 引入滑动窗口策略控制上下文规模
* 当前窗口大小限制为 20 条消息,超过后自动丢弃最早消息以控制上下文长度
docs: 📝 更新示例配置文件
* 更新示例配置文件,新增 `agent` 相关配置信息
* 明确 Agent 模块运行所需参数,方便本地部署与环境初始化
undo: ⚠️ Agent 上下文读取性能待优化
* 当前测试中模型响应速度偏慢
* 计划后续将上下文暂存至缓存层,以减少读取与拼接开销并提升响应速度
2026-03-04 19:56:08 +08:00
LoveLosita
fca4004024
Version: 0.3.9.dev.260226
...
fix: 🐛 修复智能排程接口任务块信息缺失与数据插入错误
* 修复智能排程接口返回的任务块信息缺失问题,确保任务数据完整返回
* 修复 `UserInsertTaskItemRequestToModel` DTO 函数未填入起始时间字段的问题,解决多个接口插入数据时出现 500 错误
* 错误源自上次更新“获取最近完成动态任务接口”时,未同步更改数据库字段对应逻辑
* 将智能排程接口的 `ctx` 超时恢复为 1 秒,优化接口响应性能
feat: 🎯 新增正式应用日程接口
* 新增正式应用日程接口,并完成功能测试,确保业务流程无异常
2026-02-26 20:07:55 +08:00
LoveLosita
f934668838
Version: 0.3.6.dev.260223
...
feat: 🚀 新增智能编排日程接口与算法模块
* 新增智能编排日程接口,实现自动生成周维度课程安排
* 抽离核心算法至 `Logic` 包,统一存放调度与排课相关算法逻辑,优化项目结构分层
* 大多数用例测试通过,当前存在少量边界用例下“排课时间是否充足”的误判问题
* 返回的周视图数据在极端场景下存在数量偏差,待进一步完善边界控制
fix: 🐛 修复批量导入课程接口 500 错误
* 修复批量导入课程接口中未在 `event` 结构体填写时间字段的问题
* 解决因时间字段为空导致的服务端 500 错误,保证数据完整性
refactor: ♻️ 新增入参校验逻辑保障调度稳定性
* 在添加任务类时新增入参校验逻辑
* 避免非法数据进入调度流程,确保自动编排日程接口执行稳定
docs: 📚 更新 README 智能编排算法说明
* 补充智能编排日程算法的设计思路与实现说明
undo: ⚠️ 追加导入课程后缓存未自动失效
* 追加导入课程后未自动删除对应周安排缓存,存在数据不一致风险
* 当前未能稳定复现,计划后续定位缓存失效时序与触发条件问题
2026-02-23 21:49:46 +08:00
LoveLosita
dad1eade93
Version: 0.3.2.dev.260214
...
feat: ⏳ 新增获取当前正在进行的任务接口并完成测试
- 若当前为上课时间,返回当前任务 📚
- 若当前为下课/空闲时间,返回下一个任务 ➡️
- 若存在嵌入任务,支持嵌套返回结构 🧩
- 接口已测试通过 🧪
docs: 📝 小幅更新 README
fix: 🐛 修复获取最近已完成任务列表接口的遗漏问题
- 修复无法获取嵌入在课程中的任务问题 🔧
fix: 🐛 修复删除日程接口的字段遗漏问题
- 若删除的是单独任务块,补充删除 task_item 表的 embedded_time 字段
- 避免数据残留与状态异常 ✅
2026-02-14 21:46:02 +08:00
LoveLosita
63500b3b2a
Version: 0.3.0.dev.260212
...
refactor: ♻️ 基于 gorm 钩子实现自动缓存失效机制,再也不用牵一发而动全身写删缓存逻辑了~
- 通过 gorm hook 监听 MySQL 数据变更 🧩
- 自动删除对应表相关缓存,实现缓存失效自动化 🔄
- 移除原本写在 sv 层的手动删缓存逻辑 🧹
- 解耦业务逻辑与缓存控制,结构更加清晰 ✅
fix: 🐛 修复将任务类加入日程接口的时间字段遗漏问题
- 由于前版本 MySQL 表结构更新
- 漏写插入起始时间字段逻辑,导致500报错,现已补充 ⏱️
fix: 🐛 修复获取最近已完成任务列表接口的多个问题
- 移除不应存在的幂等键 🔁
- 修复“一个event输出多次”的问题(原因出自 dto 转换函数) 🔧
undo: ⚠️ 删除任务类接口未处理已安排任务块的解除逻辑
- 当前删除任务类时,未解除已被安排的任务块
- 该逻辑存在缺陷,计划在后续版本内修复 🛠️
2026-02-12 21:34:01 +08:00
LoveLosita
6dd1f656dc
Version: 0.2.6.dev.260211
...
feat: 🕒 为 schedule_events 表新增 start_time 与 end_time 字段
- 新增 start_time 与 end_time 两列
- 支持最近已完成任务列表接口
- 为后续获取当前正在进行的任务接口做准备 🚧
feat: ✅ 新增最近已完成任务列表接口并通过测试
- 完成接口实现与测试 🧪
- 当前 sv 层使用测试时间进行逻辑验证
- ⚠️ 生产环境需改回使用当前时间
2026-02-11 21:08:50 +08:00
LoveLosita
e5a4114202
Version: 0.2.5.dev.260211
...
feat: 🗑️ 新增删除任务类接口并实现级联删除
- 通过 task_class 与 task_item 两张表建立级联关系 🔗
- 删除 task_class 时自动删除关联的 task_item
- 保证数据一致性,避免产生孤立数据 ✅
2026-02-11 18:44:13 +08:00
LoveLosita
a2da9a2aa4
Version: 0.2.4.dev.260211
...
perf: 🚀 为获取任务队列中的任务与今日日程一览接口新增缓存
- 为获取任务队列中的任务接口增加缓存机制 ⚡
- 为今日日程一览接口增加缓存机制 📅
- 提升接口访问性能与响应速度 ✅
2026-02-11 17:31:12 +08:00
LoveLosita
cf9a3c79e4
Version: 0.2.3.dev.260211
...
fix: 🐛 修复刷新 Token 接口错误返回问题
- 当 token 本身存在问题时,改为返回 400 业务错误
- 不再错误地返回 500 服务端异常状态码 ✅
feat: 🔁 新增基于 X-Idempotency-Key 与 Redis 的通用幂等中间件
- 基于 X-Idempotency-Key 实现请求幂等控制 🧩
- 记录 UUID 及对应返回结果至 Redis
- 当相同 UUID 重复请求时,直接返回缓存结果 ⚡
- 应用于所有涉及增删改操作的接口
- 解决部分接口未实现幂等性的问题 🔒
2026-02-11 16:16:07 +08:00
LoveLosita
0bc06963ee
Version: 0.2.2.dev.260210
...
feat: 🗑️ 新增删除任务块接口
- 实现 schedules、schedule_events 与 task_items 三表的联动删除
- 保证数据一致性,避免遗留脏数据 ✅
2026-02-10 22:05:59 +08:00
LoveLosita
d5f0b8da63
Version: 0.2.1.dev.260210
...
feat: 🚦 新增基于 Redis 令牌桶的限流中间件
- 使用 Redis 实现令牌桶算法进行限流 🪣
- 覆盖除登录、注册、刷新 token 以外的所有接口 🔒
fix: 🐛 修复任务块添加到日程接口可修改已安排任务时间的问题
- 禁止通过该接口直接修改已安排任务块的时间
- 修正不合理的业务逻辑,保证数据一致性 ✅
2026-02-10 20:52:06 +08:00
LoveLosita
d07234e183
Version: 0.2.0.dev.260210
...
feat: 🗑️ 新增删除单个课程与解除安排日程接口
- 逻辑复杂,初版接口写完后才发现需求需要传切片
- 针对需求修改,通过大 for 循环和事务处理来解决问题 🔄
refactor: 🔧 移除部分冗余的用户 ID 验证逻辑
- sv/schedule.go 中,进来的 ID 已通过 redis 黑名单与 JWT 保护验证
- 去除重复的数据库查验,优化了代码流程 🛠️
refactor: 🔄 重构 API 层业务错误判断逻辑
- 抛弃了原有的手动比对方式,封装进 `respond` 包,简化判断流程
- 未来不再手动遍历数据链路,提升了开发效率 🧹
undo: ⚠️ 修复任务块添加到日程的接口问题(待修复)
- 接口允许直接修改已经安排的任务时间,且重复执行时未被禁止
- 此逻辑存在问题,计划在下个版本修复 🔧
undo: ⚠️ 重测接口的幂等性与其他特性
- 当前接口幂等性等特性尚未专门测试,后续计划重测所有接口
- 测试不充分,待进一步完善 🔄
undo: ⚠️ 修复刷新 token 接口错误处理问题
- 当前接口将 token 本身的错误以 500 错误返回,需修复此问题 🛠️
2026-02-10 19:51:05 +08:00
LoveLosita
6d857d16c2
Version: 0.1.4.dev.260208
...
feat: 📆 新增查看用户整周日程接口
2026-02-08 20:22:49 +08:00
LoveLosita
79b6be5f40
Version: 0.1.3.dev.260208
...
refactor: ♻️ 重命名部分接口接收器以避免与 dao 层包名冲突
- 调整部分接口接收器命名,避免与 dao 层包名重名 🧩
feat: 📅 新增获取用户今日日程接口并完成实现
fix: 🐛 修复现实日期与相对日期转换逻辑中的初始化时序问题
- 修复 conv/time.go 中日期转换函数的一个 bug ⏱️
- 解决 viper 在包级变量初始化时机过早的问题
- 避免因过早初始化导致无法读取配置中的学期开学/结束时间 📆
2026-02-08 19:09:40 +08:00
LoveLosita
75a44f2edd
Version: 0.1.2.dev.260207
...
feat: ⚠️ 批量导入课程接口支持冲突预检测与冲突提示
- 批量导入课程接口支持预先检测冲突
- 返回并展示具体发生冲突的课程信息 📚 💥
- 补全此前规划的冲突提示功能(把大饼补上了 🍞 )
refactor: 🧱 使用工作单元模式管理 dao 层事务
- 引入工作单元模式(Unit of Work)统一管理 dao 层
- 新建全局事务,使跨 repo 的 gorm 事务管理更加方便 🔁
fix: 🐛 修复将任务块添加进日程接口的多个问题
- 修复核心逻辑 bug(费了老大劲 😵💫 )
- 补充并覆盖该接口的多种异常与错误场景测试 🧪
2026-02-07 22:08:13 +08:00
LoveLosita
f4bea0576c
feat: 🗓️ 新增任务块排期能力并完善课程与日程模型
...
Version: 0.1.1.dev.260207
- 新增并测试通过将任务块排进日程接口 ✅
- 批量导入课程接口增加单双周功能,支持只在单双周上课的课程 📚
- 任务块时间定位逻辑调整为「第几周-周几」模式 🧭
refactor: 🔨 重构时间与日程数据结构
- 完成绝对日期与相对时间的转换逻辑 🔄
- 后续可根据需求灵活决定时间的传入与输出类型
- 再次重构 schedule 表单结构
- 拆分为 schedule_event(单)与 schedule(多)
- 建立前者对后者的一对多关系 🧩
fix: 🐛 大幅调整表结构与业务逻辑,修复大量历史遗留 bug 🔥
2026-02-07 16:33:30 +08:00
LoveLosita
132b7095ac
Version:0.1.0.dev.260205
...
feat: 🆕 完善course模块功能并优化批量导入接口
- 调整 task-class 模型代码并增加注释,使其更简洁易读 ✍️
- 结构调整:将课程相关接口从 schedule 分类移至独立的 course 分类 🚀
- 修改接口 URL 从 /schedule 更改为 /course 🔄
fix: 🐛 修复批量导入课程接口重复导入相同课程的 bug
- 通过在数据库添加唯一约束解决此问题 🔐
- 这只是初步修复,后续会在 sv 层增加重复/时间冲突检测逻辑 ⚠️
- 引导用户修改课表与任务块时间冲突的机制待实现 ⏳
refactor: 🔨 重构 schedule 表单结构
- 将节次管理策略从字符串存储改为原子化存储(如 1-2 节更改为单独两条记录)
- 为后续冲突检查与智能排课做准备 🧠
perf: 🚀 优化批量导入课程接口性能
- 通过数据暂存内存中减少数据插入 MySQL 的次数 ⚡
2026-02-05 16:51:15 +08:00
LoveLosita
1bcbd41bec
Version:0.0.7.dev.260204
...
feat: ✅ 新增获取完整任务类与修改任务类接口并完成测试
- 新增获取完整任务类接口 📋
- 实现创建任务类的逆向数据转换函数 🔄
- 工程量较大,涉及完整数据结构还原 🏗️
- 新增修改任务类接口 ✏️
- 调整 service 层 AddOrUpdateTaskClass 函数逻辑
- 复用创建任务类的大部分实现,并通过 method 区分创建/更新操作 ♻️
- 更新 dao 层操作逻辑 🗄️
- 增加防止越权修改其它用户任务类的机制 🔒
- 两个接口代码量巨大,但均已测试通过 🧪 💪
2026-02-04 22:08:58 +08:00
LoveLosita
eb521a4c35
Version:0.0.6.dev.260204
...
feat: 🏗️ 在 sv/dao 层引入 ctx 支持链路追踪与超时控制(预留扩展)
- 架构改造:在 sv 与 dao 层统一引入 ctx 🧩
- 为后续链路追踪、超时控制等能力提供支持 ⏱️ (未来开发)
perf: 🚀 为获取任务类列表接口引入 Redis 缓存并保证一致性
- 获取任务类列表接口新增 Redis 缓存提升访问速度 ⚡
- 通过新增任务类时主动删除缓存,确保主从一致性 ✅
- 防止缓存与数据库列表不一致问题 🛡️
2026-02-04 20:17:52 +08:00
LoveLosita
af8e8bd804
Version:0.0.5.dev.260204
...
feat: 🏗️ 完成任务分类创建与列表查询接口并通过测试
- 历经复杂嵌套逻辑处理 🌀
- 实现创建任务分类接口 ✅
- 实现获取任务分类列表接口 📋
- 接口测试全部通过 🧪
perf: 🚀 下个版本将为任务分类列表接口加入 Redis 缓存以提升查询速度 ⚡
2026-02-04 19:26:22 +08:00
LoveLosita
f554d9bd06
Version:0.0.4.dev.260203
...
feat: 📚 完成课程导入与校验接口(赶在 token 过期前…)
- 实现课程导入接口 ✅
- 实现课程信息校验接口 🔍
- 测试通过 🧪
fix: 🐛 修了一堆 bug,15 分钟 accessToken 默默见证了时间的流逝 ⏳ 😭
2026-02-03 22:05:11 +08:00
LoveLosita
a59bcfbc5e
Version:0.0.3.dev.260203
...
feat: ✨ 新增任务队列任务获取与创建接口
- 编写获取任务队列中任务的接口
- 编写新增任务接口
- 完成相关测试并验证通过 ✅
2026-02-03 20:27:36 +08:00
LoveLosita
5038ec2fc5
Version:0.0.2.dev.260203
...
feat: implement redis-based logout and jwt middleware 🚀 feat: 实现基于 Redis 的登出机制与 JWT 中间件 🚀
Middleware Construction: Implemented JWTTokenAuth middleware for Gin, featuring structured claims parsing and active session validation. 🛡️
中间件构建:为 Gin 框架实现了 JWTTokenAuth 中间件,支持结构化 Claims 解析与活跃会话验证。🛡️
Redis Integration: Introduced Redis for high-performance state management. Integrated CacheDAO into the Dependency Injection (DI) chain. ⚡
Redis 引入:引入 Redis 进行高性能状态管理。将 CacheDAO 成功集成至依赖注入 (DI) 调用链中。⚡
Secure Logout Module: Developed the logout functional module using a Redis Blacklist mechanism. 🔐
安全登出模块:开发了基于 Redis 黑名单 机制的登出功能模块。🔐
Marked invalidated tokens by storing jti (JWT ID) in Redis with automatic TTL expiration.
通过在 Redis 中存储 jti(JWT 唯一标识)并设置自动 TTL 过期,实现 Token 的主动失效。
Added blacklist checkpoints in both AuthMiddleware and RefreshToken logic to prevent session resurrection.
在认证中间件与 Token 刷新逻辑中同步增设黑名单检查点,杜绝登出后的“死灰复燃”。
Architecture Refinement: Upgraded ValidateRefreshToken and Service-layer handlers to use type-safe struct assertions instead of raw MapClaims. 🏗️
架构精进:升级了 ValidateRefreshToken 与 Service 层处理器,改用类型安全的结构体断言取代原始的 MapClaims,提升了代码健壮性。🏗️
2026-02-03 16:53:16 +08:00
LoveLosita
78aa38a6f3
Version:0.0.1.dev.260202
...
feat: build core architecture & implement user auth modules 🚀
feat: 搭建核心架构并实现用户认证模块 🚀
Framework Migration: Switched from Hertz to Gin, providing a more idiomatic and lightweight web foundation. ⚡
框架迁移:从 Hertz 切换至 Gin,构建了更符合 Go 惯例且轻量级的 Web 基础。⚡
Architectural Overhaul: Refactored the 3-layer architecture from global-variable-based calls to Explicit Dependency Injection (DI) via New... factory functions. This significantly improves testability and decoupling. 🏗️
架构重构:将三层架构从基于“全局变量”的调用重构为通过 New... 工厂函数实现的显式依赖注入 (DI)。这大幅提升了代码的可测试性与解耦程度。🏗️
User Auth: Completed and tested Register, Login, and Token Refresh APIs with robust error handling and Bcrypt password hashing. 🔐
用户认证:完成了注册、登录与 Token 刷新接口并通过测试,包含健壮的错误处理与 Bcrypt 密码哈希加密。🔐
Config Management: Integrated Viper for centralized, environment-aware configuration management. ⚙️
配置管理:集成了 Viper,实现了中心化且具备环境感知能力的配置管理。⚙️
DevOps & Docs:
Added docker-compose.yml for seamless MySQL 8.0 & environment setup. 🐳
Updated README.md with corrections for mistakes in image quoting and formats. 📝
运维与文档:
新增 docker-compose.yml,实现 MySQL 8.0 环境的一键启动。🐳
更新 README.md,修改了一些图片引用和格式上小错误。📝
2026-02-02 21:32:21 +08:00