spark-server/docs/daily/2026-09-24-change-list.md
DESKTOP-L8OUL9F\gfl0034 53426af122 feat: 多广场 channel、音乐公开 API 与订阅 package_name
支持 square/squarenovel/squaresteps/squarehealth 实例与 category 筛选;音乐增加免登录 grouped/track;订阅套餐按 package_name 区分;补 migration 0030/0031 与 OpenAPI。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-30 09:02:28 +08:00

299 lines
9.6 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.

# 每日变动 2026-09-24
## 11:12 — 新增 daily-change-list Agent Skill
### 概要
- 新增项目 skill:每次完成代码/配置/文档等实质性修改后,在 `docs/daily/` 写入或追加当日变动 Markdown。
- 文件名格式:`{yyyy}-{mm}-{dd}-change-list.md`(示例:`2026-09-24-change-list.md`)。
- `AGENTS.md` 与 `verify-before-done.mdc` 已挂接该流程。
### 变更范围
| 类型 | 说明 |
|------|------|
| 文档 / 配置 | Agent skill、daily 目录说明、Agent 与 verify 规则 |
### 主要文件
- `.cursor/skills/daily-change-list/SKILL.md` — skill 定义与模板
- `docs/daily/README.md` — 目录说明
- `AGENTS.md` — 第 7 条引用 skill
- `.cursor/rules/verify-before-done.mdc` — 完成前写入 daily
### 验证
- `make test`: skipped(仅 Agent/文档,无 Go 变更)
### 关联
- 用户请求:新增每日修改变动 markdown 流程
## 11:16 — daily 文件名改为 yyyy-mm-dd
### 概要
- 每日变动文件命名由 `{yyyy}-{dd}-{mm}` 调整为 `{yyyy}-{mm}-{dd}`(年月日 ISO 顺序)。
### 主要文件
- `.cursor/skills/daily-change-list/SKILL.md`
- `docs/daily/README.md`、`AGENTS.md`、`.cursor/rules/verify-before-done.mdc`
- `docs/daily/2026-09-24-change-list.md`(自 `2026-24-09-change-list.md` 重命名并更新文内日期)
### 验证
- `make test`: skipped(文档)
## 14:10 — Spark Messenger 主路径接入:好友拒绝 API + OpenAPI
### 概要
- 新增 `POST /v1/friends/requests/reject`,补齐 App 忽略/拒绝好友申请
- OpenAPI 补全 password-login / set-password / legal / feedback / subscriptions / reject
- 与 iOS `SparkIMClient` 主路径路由扩展配套
### 变更范围
| 类型 | 说明 |
|------|------|
| 功能 | 好友申请拒绝 |
| 文档 | OpenAPI 路径补全 |
| 配置 | client 模块与 popadmin 三页(同日 WIP) |
### 主要文件
- `internal/module/friend/logic/reject.go` — Reject 用例
- `internal/transport/http/handler/friend/handler.go` / `router.go` — HTTP
- `internal/transport/http/docs/openapi.yaml` — 规范
- `internal/module/client/**`、`migrations/0023_*.sql`、`deploy/popadmin/popadmin.js` — 法律/反馈/订阅/密码
### 验证
- `make test`: skipped(本机 PATH 无 go)
- 需部署后刷新 https://sparkapi.wyrs365.com/docs
### 关联
- Spark Messenger 全页面接入检查
## 14:48 — 修复 make lint / make test
### 概要
- 修复 `friend_test` 中 `Accept` 双返回值与测试邮箱 OTP
- 修复 `client` 模块 goconst/gocritic/goimports;`UpsertLegal`/`UpsertPlan` 改为指针入参
- 补充 `client`/`auth` logic 单测以满足 65% 覆盖率门禁
### 主要文件
- `internal/module/friend/logic/friend_test.go`
- `internal/module/client/logic/service.go`、`model/repo.go`
- `internal/module/client/logic/service_test.go`
- `internal/module/auth/logic/refresh_test.go`、`static_test.go`
- `internal/bootstrap/app.go`、`handler/friend/handler.go`、`handler/admin/client.go`
### 验证
- `make lint`: pass
- `make test`: pass
## 15:22 — Git commit 前必须 make test
### 概要
- 新增 always-on 规则 `git-commit-gate.mdc`:Agent 与用户 commit 前须 `make test` 通过,禁止擅自 `--no-verify`
- 新增 `scripts/git-hooks/pre-commit` 与 `make install-git-hooks` 安装到 `.git/hooks`
### 主要文件
- `.cursor/rules/git-commit-gate.mdc`
- `scripts/git-hooks/pre-commit`
- `Makefile`、`AGENTS.md`
### 验证
- `make test`: pass
### 使用
```bash
make install-git-hooks # 本机只需一次
```
## 14:55 — 意见反馈区分登录 / 游客
### 概要
- `POST /v1/feedback` 改为可选鉴权:有效 Bearer → `auth_type=login` + `uid`;无 token → `auth_type=guest`,必填 `contact`(邮箱或手机)
- 表增加 `auth_type` / `contact`;Admin list 支持 `?auth_type=login|guest`;popadmin App反馈页加筛选下拉
- OpenAPI 同步说明
## 14:53 — Android 白噪音对照后补音乐公开 API
### 概要
- 对照 `WhiteNoiseJSPPOldAndroid`:音乐主路径仍走欢休 `app.huanxiu.vip`;IM/登录/支付多为旧 JSPP TCP protobuf。
- 在 Spark V3 风格下补齐迁端缺口:单曲详情、分区嵌套列表、`requireMember` 筛选;公开路由免登录。
- 顺手修复先前好友拒绝用例测试(Accept 双返回值、测试邮箱)。
### 变更范围
| 类型 | 说明 |
|------|------|
| 功能 | 反馈登录/游客分流 |
| 数据库 | migration 0024 |
| 管理端 | popadmin 筛选 |
| 文档 | OpenAPI |
### 主要文件
- `migrations/0024_feedback_auth_type_contact.sql`
- `internal/module/client/**` — entity / logic / repo
- `internal/transport/http/auth.go` — `/v1/feedback` 可选鉴权
- `internal/transport/http/handler/admin/client.go` — auth_type 筛选
- `internal/transport/http/docs/openapi.yaml`
- `deploy/popadmin/popadmin.js`
### 验证
- `make test`: skipped(本机无 go)
- 需部署并执行 migration 后生效
### 关联
- 用户需求:意见反馈分登录与未登录
## 16:25 — 反馈用例补登录路径断言
### 概要
- 补充游客缺 contact 失败、登录态写入 auth_type/uid、AppVersion Header 回填的单测断言
- auth.go import 顺序整理
### 验证
- `make test`: skipped(本机无 go)
## 23:30 — 广场机器人 RSS + 媒体压缩检测
### 概要
- 广场每 5 分钟由随机 seed 机器人发海外主流媒体公开 RSS 帖(标题+短摘要+原文链接,URL 去重)。
- 机器人帖 `expires_at` 默认 15 天,到期软删且 Feed/详情不可见。
- 用户上传路径:凭证 size + 发帖声明宽高/体积软检测(默认可日志,可拒收)。
- 机器人配图:入库对象存储前压到最长边 ≤1080;视频路径 ≤720(ffmpeg)。
| 功能 | 音乐公开读 API 增强 |
| 文档 | OpenAPI music 路径与 schema |
| 修复 | friend Reject 单测 |
### 主要文件
- `internal/module/music/entity/track.go` — GroupedPlaylist / PlaylistGroup
- `internal/module/music/logic/service.go` — GetPublic、PlaylistGrouped、PlaylistQuery
- `internal/transport/http/handler/music/handler.go`、`router.go`、`auth.go`
- `internal/transport/http/docs/openapi.yaml`
- `internal/module/music/logic/service_test.go`、`friend/logic/friend_test.go`
### 验证
- `go test ./...`:通过(本机无 `make`;`golangci-lint` 与 Go 1.27 export data 不兼容,未跑 lint)
- `music/logic` coverage:74.7%
### 关联
- 用户:对照 Android 补全 spark-server 缺失 API(不 commit/push)
## 15:20 — 多广场实例 + 分类筛选
### 概要
- 同一套广场能力按 `channel` 隔离数据:`square` / `squarenovel` / `squaresteps` / `squarehealth`。
- 各广场支持分类 Tab:推荐/最新/热门/附近(排序)+ 搞笑/美女(帖标签);附近为 lat/lng 曼哈顿距离 stub。
- 发帖/点赞/评论/通知水位均带 channel;保留原 `/v1/square/...` 路径。
### 变更范围
| 类型 | 说明 |
|------|------|
| 功能 | squarebot 调度、TTL、RSS、配图压缩 |
| 配置 | `media` / `square_bot` |
| 数据库 | migration 0026 |
| 文档 | `docs/media.md`、`docs/square.md` |
### 主要文件
- `internal/module/squarebot/logic/*` — RSS / Tick / Worker / 压缩上传
- `internal/module/square/logic/bot_publish.go` — 发帖 + Expire
- `internal/infrastructure/media/*` — 图/视频压缩
- `internal/pkg/media/*` — 检测策略
- `internal/bootstrap/app.go` — 接线 Start/Stop
- `migrations/0026_square_bot_rss.sql`
- `configs/config.yaml`
### 验证
- `make test`: skipped(本机无 go)
- 部署后:`go run ./cmd/migrate`、`go run ./cmd/seed`,观察日志 `squarebot posted` / `squarebot expired`
### 关联
- 用户需求:广场机器人 RSS + 15 天过期 + 后台机器人媒体压缩检测
## 14:30 — 同开发者应用墙(Discover)
### 概要
- 新增免登录客户端接口 `GET /v1/developer-apps`(别名 `/api/client/pop|spark/developer-apps`)
- popadmin「同开发者应用」对接 `/api/admin/developer-apps` CRUD + 同步官网图标目录
- 回落默认官网应用目录;migration 编号为 0027(避开已占用的 0024 feedback)
### 变更范围
| 类型 | 说明 |
|------|------|
| 功能 | 同开发者应用列表 API |
| 管理端 | popadmin developer-apps 路径可落库 |
| 迁移 | `t_developer_apps` 种子数据(0027) |
### 主要文件
- `migrations/0027_developer_apps.sql` — 表与种子
- `internal/module/client/logic/developer_apps.go` — 业务
- `internal/module/client/model/repo.go` — 仓储
- `internal/transport/http/router*.go` / `auth.go` / handlers — 路由与免登录
- `deploy/popadmin/popadmin.js` — 客户端路径说明
### 验证
- `make test`: skipped(本机 PATH 无 go)
- 需部署 spark-server 并跑 migrate 后线上接口才可用;无 DB 时 logic 回落官网默认目录
### 关联
- 任务:发现页顶部接入同开发者应用列表(stash 合并进 main)
| 功能 | 多广场 + Feed `category` 筛选 |
| 迁移 | `0031_square_channel_category.sql` |
| 文档 | OpenAPI `{square_channel}` 路径;meta 枚举 |
### 主要文件
- `migrations/0031_square_channel_category.sql` — posts/notices/notice_state 加 channel/category
- `internal/module/square/entity/channel.go` — Channel / Category 枚举
- `internal/module/square/logic/*`、`model/*` — channel 隔离与 Feed 排序
- `internal/transport/http/handler/square`、`router.go` — 四前缀同路由 + `/categories`
- `internal/transport/http/docs/openapi.yaml`、`meta`、`i18n`
### 验证
- `go run ./cmd/migrate -config configs/config.yaml`:通过
- `go test ./...`:通过(本机无 `make`;golangci-lint 与 Go 1.27 不兼容)
- `square/logic` coverage:77.5%
### 关联
- 用户:spark-server 多广场 + 分类筛选(不 commit/push)