Files
photo-live/services/api/src/ads/ads.module.ts
T
浅念 4979091d2c feat(api): 广告位 CRUD——outbox ad.* 事件/audit/停用高优先级/版本化换图
Task 7(ads-carousel):/v1/admin/ads list/create/patch/delete 四端点。
- 事务三写:ads 行 + outbox(ad.updated 全量快照/ad.deleted 墓碑)+ audit
  (ad.create/update/delete);ad.* 信封 albumId 恒空串;停用迁移 true→false
  与删除均 priority='high';
- 创建/换图:staging head 三核(存在/bytes/contentType,assets complete 同
  口径)→ 事务内 copyIfAbsent 先于行写入(失败=孤儿终键对象,OSS 生命周期
  兜底)→ 版本化终键 adObjectKey(adId, v, ext);
- 更新:embed 乐观重试模式(条件 updateMany WHERE entityVersion),保证换图
  终键版本段与行版本严格对齐;换图三字段同时性校验(缺一 400);albumIds
  去重+相册存在性 count 校验([]/null 归一全局 null);
- 删除:条件 deleteMany 重跑保墓碑 entityVersion=末+1;重复删除 404;
- 载荷构建器独立 ad-payload.ts(Task 8 对账共用,逐字节同形约定);
- dto:AdCreateRequestDto.albumIds 收窄为 string[] | null(JSON null 在
  @IsOptional 下可达,embed settings 先例);
- e2e:describe 更名 ads domain (e2e),追加 ⑨-⑯ 八用例(真图直传/定向/
  非法 linkUrl/字段级 PATCH/换图/DELETE/权限/同步贯通),16/16 通过。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-28 23:57:43 +08:00

17 lines
712 B
TypeScript
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.
// services/api/src/ads/ —— 广告位管理模块(ads-carousel,仅 cn 入口
// 装配:广告是 cn 权威实体,ov 侧只承接 ads_ov 投影与公开读端点)。
// UploadsModule 取 STORAGE_PORT(storage.provider.ts env 工厂;模块已 export,
// 同 EmbedModule 之后的装配口径);PrismaModule 为 @Global,CRUD(Task 7)
// 直接注入 PrismaService。
import { Module } from '@nestjs/common';
import { UploadsModule } from '../uploads/uploads.module';
import { AdsController } from './ads.controller';
import { AdsService } from './ads.service';
@Module({
imports: [UploadsModule],
controllers: [AdsController],
providers: [AdsService],
})
export class AdsModule {}