lty/qy_lty/.planning/REQUIREMENTS.md

139 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Requirements — QY LTY Backend
**初始化日期**: 2026-05-07
**类型**: Brownfield 文档化(从 `.planning/codebase/` 推断)
**状态**: 已落地能力归档完成Active milestone 待 `/gsd-new-milestone` 启动
---
## Validated已交付能力
以下需求均为 **2026-05-07 之前已上线** 的能力,从代码与 `docs/` 推断而来。任何修改都需要走完整 phase 流程,不要直接动。
### 用户与认证AUTH
- [x] **AUTH-01** 自定义用户模型 `ParadiseUser`(继承 AbstractUser含画像字段
- [x] **AUTH-02** Redis 后端 token 认证30 天 TTL
- [x] **AUTH-03** 手机号 + 阿里云 SMS 验证码登录
- [x] **AUTH-04** WeChat OAuthdjango-allauth + Weixin provider
- [x] **AUTH-05** 设备端 MAC 换 user-token`POST /api/user/mac-login/`
### AI 对话与语音AI
- [x] **AI-01** Kimi 单轮 / 多轮文本对话
- [x] **AI-02** 多服务商语音抽象(火山 / 阿里云 NLS / 腾讯)
- [x] **AI-03** TTS文本→语音+ ASR语音→文本通用接口
- [x] **AI-04** 字幕落库 + Bot 配置管理
### 设备交互DEV
- [x] **DEV-01** 双通道 WebSocketHeader 鉴权 + URL 鉴权)
- [x] **DEV-02** Channel Layer 分组 `device_{user_id}`
- [x] **DEV-03** 设备绑定 / 解绑 / 设主 / 状态查询 REST 接口
- [x] **DEV-04** Redis 心跳(`device:last_seen:{mac}`5 min TTL
- [x] **DEV-05** 设备 connected/disconnected 状态写库
- [x] **DEV-06** "后绑挤先绑"控制权语义
- [x] **DEV-07** 火山引擎 RTC token 签发(`room_{user_id}`
- [x] **DEV-08** 11 种 WebSocket message type 完整支持chat/weather/sing/dance/touch/flow_light/device_info/device_state/conversation_status/conversation_subtitle/factory_reset
### 卡片系统CARD
- [x] **CARD-01** 卡片分类 + 属性配置
- [x] **CARD-02** 批量生成 + 二维码
- [x] **CARD-03** 使用追踪 + 数据分析
### 成就ACH
- [x] **ACH-01** 成就定义 + 稀有度等级 + 用户进度
- [ ] **ACH-02** 成就解锁条件校验 — ⚠️ **TODO 占位**`achievement_app/views.py:139` 未实现;任意客户端可主张任意成就。**需要单独 phase 修复**。
### 订阅SUB
- [x] **SUB-01** 用户订阅模型 + 状态管理
- [x] **SUB-02** APScheduler 定时任务
### 好感度系统AFF2026-04 P1
- [x] **AFF-01** 设备级好感度计数(`UserDevice.favorability`
- [x] **AFF-02** 6 张配套表Rule/Level/Log/Counter/Setting/RewardClaim
- [x] **AFF-03** 配置驱动规则(区间随机 / 上限 / 冷却 / 等级奖励)
- [ ] **AFF-04** Service 层P2— 未交付,下个 milestone
- [ ] **AFF-05** 接口层P3— 未交付,下个 milestone
- [ ] **AFF-06** 客户端集成P4— 未交付,下个 milestone
### 视觉智能VI
- [x] **VI-01** 阿里云人脸检测 / 识别(`ali_vi_app`
### 通用基础设施INF
- [x] **INF-01** `StandardResponseMiddleware` 统一响应包装
- [x] **INF-02** `CustomPageNumberPagination` 自定义分页
- [x] **INF-03** Aliyun OSS 上传抽象
- [x] **INF-04** Aliyun Log Service 生产日志
- [x] **INF-05** Swagger / ReDoc API 文档drf-yasg
### 管理后台ADM
- [x] **ADM-01** Django AdminSimpleUI 主题,中英双语)
- [x] **ADM-02** `/api/v1/admin/` REST 命名空间
### 部署DEP
- [x] **DEP-01** Docker + docker-compose端口 12012
- [x] **DEP-02** Daphne ASGIHTTP + WebSocket 同进程)
- [x] **DEP-03** PostgreSQL + Redis 双依赖
- [x] **DEP-04** i18n 双语zh_HAns / en
---
## Active当前 milestone 目标)
**(暂无)**
本次 `/gsd-new-project` 是 brownfield 文档化,没有指定新 milestone。
下一次启动新功能开发时,请用:
```
/gsd-new-milestone
```
GSD 会引导你确认 milestone 目标、把新需求加到本段(带 REQ-ID然后 `/gsd-plan-phase` 拆 phase。
**候选优先级**(来自 CONCERNS.md 与项目活动信号,按风险/价值排序,仅供参考):
1. **HIGH** 修复 `ACH-02` 成就条件校验缺失 — 当前任意客户端可主张任意成就
2. **HIGH** 修复 SMS 验证码无频率限制 — 生产 DoS 向量
3. **HIGH** 收紧 `DEBUG` / `CORS_ALLOW_ALL_ORIGINS` 默认值 — 信息泄露 + CSRF 邻接风险
4. **HIGH** 移除测试 MAC `AA:BB:CC:DD:EE:FF` 硬编码绑定绕过
5. **HIGH** 测试基础设施搭建pytest + pytest-django + 关键路径测试)
6. **MEDIUM** 完成好感度系统 P2/P3/P4Service 层 + 接口层 + 客户端集成)
7. **MEDIUM** Python 3.8 → 3.11/3.12 升级
8. **MEDIUM** WebSocket URL token 鉴权废弃(防 access log 泄露)
9. **MEDIUM** 拆分 `device_interaction/views.py`1867 行单文件)
---
## Out of Scope
(理由详见 PROJECT.md此处不重复
- 管理后台前端 — 在 `../qy-lty-admin/` 独立项目
- Unity 客户端业务逻辑 — 在 `LTY_App_Project_URP` / `LTY_Project` 独立项目
- APM / 全链路追踪 — 暂不引入
- 多 Redis 实例 / Sentinel — 暂不上 HA
- 跨项目混合修改记录 — 各自维护
---
## Traceability
<!-- 由 /gsd-plan-phase 在生成 phase 时回填:每个 phase 解决哪些 REQ-ID -->
(暂无 phase`/gsd-new-milestone` 后启动)
---
*Last updated: 2026-05-07 after brownfield documentation pass*