feat: add client latest release api
This commit is contained in:
+45
@@ -1400,3 +1400,48 @@
|
||||
- `.\init.ps1`:收尾验证通过(Python 3.12.3,依赖已满足,`manage.py check` 0 issues,打印启动命令)。
|
||||
- `py -3.12 manage.py test apps.portal.tests.PortalAccountFlowTests --keepdb --noinput --verbosity 2`:已尝试,因远程 MySQL `43.128.3.240` 在测试库迁移阶段连接超时(2003 / WinError 10060)中断,不是断言失败;数据库恢复后需补跑 portal 整组。
|
||||
- 下一步:看板当前无新的编号任务;建议优先确认真实支付回调到账闭环、上传/发布 Windows 客户端安装包,或补真实图片生成耗时验证并拆成新任务。
|
||||
|
||||
## 2026-07-06 决策:T-607 桌面端最新版本检查接口
|
||||
|
||||
- 状态:DONE(文档创建任务,未改代码)。
|
||||
- 背景:T-606 已有公开首页和 `DownloadRelease` 后台发布配置,但桌面端如果要自动检查更新,不能依赖解析 HTML,需要稳定 JSON 合约。
|
||||
- 变更:
|
||||
- `docs/06-tasks.md`:新增 T-607「桌面端最新版本检查接口」,依赖 T-606,状态 TODO。
|
||||
- `docs/api.md`:新增 `GET /api/v1/client/releases/latest?platform=windows` 合约、响应示例和安全约束。
|
||||
- `docs/routes.md`:登记计划中的公开版本检查 API。
|
||||
- `docs/02-requirements.md`:把桌面端版本检查 API 加入 P1 功能清单。
|
||||
- `docs/04-architecture.md`:同步公开只读例外、数据来源和不得暴露本地路径的约束。
|
||||
- `docs/current-state.md`、`docs/00-ai-start-here.md`、`docs/project-brief.md`、`README.md`:同步下一项任务为 T-607。
|
||||
- 决策:
|
||||
- 版本检查接口公开匿名可访问,不需要 API Key,不读取用户、不扣点、不占用生成接口限流。
|
||||
- 只返回 `DownloadRelease` 的公开发布元数据:`platform`、`version`、`download_url`、`sha256`、`release_notes`、`published_at`。
|
||||
- `platform` 缺省为 `windows`,支持 `windows` / `macos` / `linux`;非法平台返回 `400 bad_request`。
|
||||
- 无当前版本或当前版本没有下载地址时返回 HTTP 200,结构为 `release:null` + `message:"暂未发布"`,方便桌面端静默处理。
|
||||
- `download_url` 优先使用 `external_url`,否则用上传文件 URL 生成外部可访问绝对 URL;响应不得暴露 `MEDIA_ROOT`、文件系统路径、后台 ID、用户信息、模型配置或密钥。
|
||||
- 验证:文档修改;后续执行 T-607 时需补 `check`、目标 API 测试和 `git diff --check` 证据。
|
||||
- 下一步:领取 T-607,按文档实现公开版本检查 API。
|
||||
|
||||
## 2026-07-06 T-607 桌面端最新版本检查接口
|
||||
|
||||
- 状态:DONE。
|
||||
- 代码变更:
|
||||
- `apps/api/views.py`:新增 `ClientLatestReleaseView`,显式空认证 + `AllowAny`,公开匿名读取 `DownloadRelease(platform, is_current=True)`,返回版本、下载地址、SHA256、发布说明和发布时间;无当前版本或无下载地址返回 `release:null`。
|
||||
- `apps/api/urls.py`:新增 `GET /api/v1/client/releases/latest` 路由。
|
||||
- `apps/api/tests.py`:新增 `ClientLatestReleaseApiTests`,覆盖匿名无 Key、Web session/无效 Authorization 不影响公开读取、当前版本结构、文件 URL 绝对化、`external_url` 优先、无 current、无下载地址、非法平台、macOS 平台和内部字段不泄露。
|
||||
- 文档变更:
|
||||
- `docs/06-tasks.md`:T-607 标为 DONE。
|
||||
- `docs/api.md` / `docs/routes.md` / `docs/04-architecture.md`:从计划口径改为已实现口径。
|
||||
- `docs/current-state.md`、`docs/00-ai-start-here.md`、`docs/project-brief.md`、`README.md`:同步 Phase 6 当前状态、当前 API 列表和下一步口径。
|
||||
- 验证:
|
||||
- `.\init.ps1`:开工前通过(Python 3.12.3,依赖已满足,`manage.py check` 0 issues,打印启动命令)。
|
||||
- `py -3.12 -m py_compile apps\api\views.py apps\api\urls.py apps\api\tests.py`:通过。
|
||||
- `py -3.12 manage.py check`:通过,0 issues。
|
||||
- `py -3.12 manage.py makemigrations --check --dry-run`:通过,No changes detected。
|
||||
- `py -3.12 manage.py test apps.api.tests.ClientLatestReleaseApiTests --keepdb --noinput --verbosity 2`:通过,9 tests OK。
|
||||
- `py -3.12 manage.py test apps.api.tests.ApiKeyAuthenticationTests apps.api.tests.BalanceApiTests apps.api.tests.ModelsCatalogApiTests apps.api.tests.ClientLatestReleaseApiTests --keepdb --noinput --verbosity 2`:通过,25 tests OK。
|
||||
- `py -3.12 manage.py test apps.api --keepdb --noinput --verbosity 2`:首次运行 184 秒超时,没有拿到结论。
|
||||
- `py -3.12 manage.py test apps.api --keepdb --noinput --verbosity 1`:重跑通过,54 tests OK;仅保留 allauth 在 MySQL 条件唯一约束上的既有 `models.W036` 警告。
|
||||
- `.\init.ps1`:收尾验证通过(Python 3.12.3,依赖已满足,`manage.py check` 0 issues,打印启动命令)。
|
||||
- `git diff --check`:通过,仅 Windows CRLF 提示。
|
||||
- 决策:T-607 不继承 `ExternalApiView`,避免要求 API Key;也不挂 `GenerateRateThrottle`,避免版本检查占用生成额度。文件下载地址按请求生成绝对 URL;生产 HTTPS 由已有 proxy/HTTPS 配置保证。
|
||||
- 下一步:看板当前无新的编号任务;建议继续按业务优先级拆真实支付回调到账闭环、客户端下载包发布或真实图片耗时验证。
|
||||
|
||||
Reference in New Issue
Block a user