Files
photo-live/apps/admin/src/api/ads.ts
T

40 lines
1.8 KiB
TypeScript
Raw Normal View History

/**
* 广告位管理接口(对齐 @photo/contracts tags [ads]:listAdminAds /
* createAd / updateAd / deleteAd / initAdUpload,广告位轮播 Task 11;仅 admin 可用)
*
* - 列表全量不分页(sortOrder 升序、并列 createdAt 升序);imageUrl 为
* 现签 GET,过期后重拉本列表刷新
* - 直传两步:init 签发 staging 凭证 → 裸 fetch PUT(预签名 URL 自带
* 凭证,Content-Type 与申明一致);无 complete 步——创建/更新端点核验
* staging 对象后 copyIfAbsent 转存版本化终键
* - PATCH 部分更新:换图三字段(imageStagingKey/imageBytes/imageContentType)
* 必须同时提供;albumIds null=转全局
* - DELETE 硬删(数据不保留、无恢复端点;幂等 404)
*/
import request from '@/utils/http'
/** 广告位列表(全量不分页) */
export function fetchAds() {
return request.get<Api.Ads.ListResponse>({ url: '/v1/admin/ads' })
}
/** 初始化广告图直传(staging 键 + 预签名凭证) */
export function fetchInitAdUpload(data: Api.Ads.UploadInitPayload) {
return request.post<Api.Ads.UploadInitResponse>({ url: '/v1/admin/ads/uploads', data })
}
/** 创建广告位(服务端核验 staging 后转存终键;albumIds 空=全局) */
export function fetchCreateAd(data: Api.Ads.CreatePayload) {
return request.post<Api.Ads.Item>({ url: '/v1/admin/ads', data })
}
/** 更新广告位(部分更新;换图三字段同时提供) */
export function fetchUpdateAd(id: string, data: Api.Ads.UpdatePayload) {
return request.patch<Api.Ads.Item>({ url: `/v1/admin/ads/${id}`, data })
}
/** 硬删除广告位(无恢复;重复删除 404) */
export function fetchDeleteAd(id: string) {
return request.del<void>({ url: `/v1/admin/ads/${id}` })
}