40 lines
1.8 KiB
TypeScript
40 lines
1.8 KiB
TypeScript
|
|
/**
|
|||
|
|
* 广告位管理接口(对齐 @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}` })
|
|||
|
|
}
|