feat(albums): soft-delete albums (admin+owner, hidden & irreversible, both app entries)
契约 deleteAlbum(DELETE /albums/{albumId} → 204 幂等)+ status enum 'deleted':
- 服务端:softDelete(canView 404→canManage 403 防枚举;乐观锁 claim +
outbox album.updated priority=high + audit album.delete);列表/详情/更新/
成员/资产/分类/水印/照片/展示位绑定全部 deleted→404;公开端 cn
(status!=='active')与 ov(isAlbumVisibleOv)天然屏蔽;ov 副本经
album.updated 载荷 status 直投自动下线
- Admin:列表表格操作「删除」+ 详情页头「删除相册」(确认含不可恢复说明)
- App:操作面板「删除相册」(红字、二次确认、成功退回列表并刷新)
- 验证:API 56/56、App 397/397(analyze 0)、admin typecheck/lint/test/build 绿
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
+6
@@ -0,0 +1,6 @@
|
||||
-- 宣传图/封面共用(用户决策 2026-09-23):albums_ov 增 coverAssetKey 投影列
|
||||
-- (asset.updated kind=cover 分流写入;banner/cover 互为展示层回退)。
|
||||
-- 存量行回填:迁移后由对账 bootstrap(asset.updated 当前态重放)或下次
|
||||
-- cover 资产事件自然补齐,不手工 UPDATE。
|
||||
-- AlterTable
|
||||
ALTER TABLE `albums_ov` ADD COLUMN `coverAssetKey` VARCHAR(255) NULL;
|
||||
@@ -47,7 +47,11 @@ model albums_ov {
|
||||
emergencyDisabled Boolean @default(false)
|
||||
translations Json // [{locale,title,description,venue,address}](cn 原文数组)
|
||||
categories Json // [{id,sortOrder,translations:[{locale,name}]}]
|
||||
// 宣传图/封面投影键(asset.updated 事件按 kind 分列存储)。展示层双向回退
|
||||
// (用户决策 2026-09-23「宣传图和封面用一个」):banner 缺失时公开侧回退
|
||||
// cover 键——需求 §4.2「封面可复用宣传图」基线的反向补充。
|
||||
bannerAssetKey String? @db.VarChar(255)
|
||||
coverAssetKey String? @db.VarChar(255)
|
||||
defaultLocale String @db.VarChar(16)
|
||||
timezone String @default("Asia/Shanghai") @db.VarChar(64)
|
||||
startAt DateTime? @db.DateTime(6)
|
||||
|
||||
Reference in New Issue
Block a user