- 支持创建/编辑/删除优惠码,设置赠送金额和使用限制 - 注册页面实时验证优惠码并显示赠送金额 - 支持 URL 参数自动填充 (?promo=CODE) - 添加优惠码验证接口速率限制 - 使用数据库行锁防止并发超限 - 新增后台优惠码管理页面,支持复制注册链接
70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
/**
|
|
* Admin Promo Codes API endpoints
|
|
*/
|
|
|
|
import { apiClient } from '../client'
|
|
import type {
|
|
PromoCode,
|
|
PromoCodeUsage,
|
|
CreatePromoCodeRequest,
|
|
UpdatePromoCodeRequest,
|
|
BasePaginationResponse
|
|
} from '@/types'
|
|
|
|
export async function list(
|
|
page: number = 1,
|
|
pageSize: number = 20,
|
|
filters?: {
|
|
status?: string
|
|
search?: string
|
|
}
|
|
): Promise<BasePaginationResponse<PromoCode>> {
|
|
const { data } = await apiClient.get<BasePaginationResponse<PromoCode>>('/admin/promo-codes', {
|
|
params: { page, page_size: pageSize, ...filters }
|
|
})
|
|
return data
|
|
}
|
|
|
|
export async function getById(id: number): Promise<PromoCode> {
|
|
const { data } = await apiClient.get<PromoCode>(`/admin/promo-codes/${id}`)
|
|
return data
|
|
}
|
|
|
|
export async function create(request: CreatePromoCodeRequest): Promise<PromoCode> {
|
|
const { data } = await apiClient.post<PromoCode>('/admin/promo-codes', request)
|
|
return data
|
|
}
|
|
|
|
export async function update(id: number, request: UpdatePromoCodeRequest): Promise<PromoCode> {
|
|
const { data } = await apiClient.put<PromoCode>(`/admin/promo-codes/${id}`, request)
|
|
return data
|
|
}
|
|
|
|
export async function deleteCode(id: number): Promise<{ message: string }> {
|
|
const { data } = await apiClient.delete<{ message: string }>(`/admin/promo-codes/${id}`)
|
|
return data
|
|
}
|
|
|
|
export async function getUsages(
|
|
id: number,
|
|
page: number = 1,
|
|
pageSize: number = 20
|
|
): Promise<BasePaginationResponse<PromoCodeUsage>> {
|
|
const { data } = await apiClient.get<BasePaginationResponse<PromoCodeUsage>>(
|
|
`/admin/promo-codes/${id}/usages`,
|
|
{ params: { page, page_size: pageSize } }
|
|
)
|
|
return data
|
|
}
|
|
|
|
const promoAPI = {
|
|
list,
|
|
getById,
|
|
create,
|
|
update,
|
|
delete: deleteCode,
|
|
getUsages
|
|
}
|
|
|
|
export default promoAPI
|