feat(ECR-042): OpsCMS FeedSlot 薄写面

Admin POST/PUT 复用 admin.cms.write;C 端 GET /home/feed-slots;首页无 active 槽隐藏推荐区、失败回退展示;无新 migration。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-13 20:02:01 +08:00
co-authored by Cursor
parent 655141980a
commit 56f661748a
27 changed files with 773 additions and 25 deletions
@@ -0,0 +1,40 @@
# Feature Spec: OpsCMS · FeedSlot 写面(Ops · ECR-042
> Status: `Active`**ECR-042 Closed**
> Map: `§7` · Capability: `OpsCMS` · BC: `Ops_CMS_NoUGC`
> Write-Wave: `docs/WAVE0/WRITE_WAVE_AUTHORIZATION.md`
> Predecessor: ECR-025 Closed · ECR-041 Closed
## Goal
运营可创建/更新/上下架 FeedSlot;C 端可读 active 槽位;首页主信息流区按 `home.main`(或 placement=home 的 active 槽)显隐;失败回退「仍展示推荐区」。
## In / Out
| In | Out |
|----|-----|
| Admin POST/PUT feed-slots · `admin.cms.write` | Banner 再扩 · ScheduledPublication 写 |
| C 端 GET `/home/feed-slots` | UGC 内容流正文 CMS · soft-delete |
| 首页:无 active home 槽 → 隐藏推荐区;API 失败 → 仍显示 | 真支付 · Crisis/Handoff · 新权限模型 |
## Domain
复用 `ops_feed_slots``code` 唯一 · `slot_key` · `placement` ∈ {home,explore,ask} · `active` · `system`system 不可改 code)。
## API
| Method | Path | Perm |
|--------|------|------|
| GET | `/admin/cms/feed-slots*` | cms.read |
| POST/PUT | `/admin/cms/feed-slots*` | cms.write |
| GET | `/home/feed-slots?placement=home` | DeviceAuth |
无 DELETE;下架 `active=false`
## AC
AC-F create/update/conflict/invalid · AC-S 401/403 · AC-A audit · AC-C 首页显隐与失败回退 · AC-O 无 Banner 合并 / 无 soft-delete
## Migration
无新表;权限已在 `000051`。本切片 **不新增 migration 文件**Max 保持 `000051`)。