158 lines
6.8 KiB
TypeScript
158 lines
6.8 KiB
TypeScript
import request from './request'
|
|
import type {
|
|
DashboardStats,
|
|
ApiClient,
|
|
ApiCredential,
|
|
CallbackCredential,
|
|
CallbackSubscription,
|
|
CreateTestOrderResult,
|
|
DeliveryBindResult,
|
|
DeliveryOrderInfo,
|
|
DeliveryLinkResult,
|
|
DeliverySubmitResult,
|
|
FulfillmentOrder,
|
|
LoginResult,
|
|
Merchant,
|
|
MerchantMember,
|
|
MerchantProduct,
|
|
PageResult,
|
|
ProductCatalogItem,
|
|
User,
|
|
WalletAccount,
|
|
WalletLedgerEntry,
|
|
} from '../types'
|
|
|
|
export const authApi = {
|
|
login: async (username: string, password: string) => {
|
|
const res = await request.post('/auth/login', { username, password })
|
|
return res.data.data as LoginResult
|
|
},
|
|
profile: async () => {
|
|
const res = await request.get('/auth/profile')
|
|
return res.data.data as User
|
|
},
|
|
}
|
|
|
|
export const dashboardApi = {
|
|
stats: () =>
|
|
request.get('/dashboard').then((r) => r.data.data as DashboardStats),
|
|
}
|
|
|
|
export const userApi = {
|
|
list: (params?: Record<string, unknown>) =>
|
|
request.get('/users', { params }).then((r) => r.data.data as PageResult<User>),
|
|
create: (data: { username: string; password: string; nickname?: string; role?: string }) =>
|
|
request.post('/users', data).then((r) => r.data.data as User),
|
|
updateStatus: (id: number, status: number) =>
|
|
request.patch(`/users/${id}/status`, { status }).then((r) => r.data.data),
|
|
}
|
|
|
|
export const merchantApi = {
|
|
current: () =>
|
|
request.get('/merchant').then((r) => r.data.data as { merchant: Merchant; role: MerchantMember['role'] }),
|
|
products: (params?: Record<string, unknown>) =>
|
|
request.get('/merchant/products', { params }).then((r) => r.data.data as PageResult<MerchantProduct>),
|
|
createProduct: (data: Partial<MerchantProduct> & {
|
|
product_code?: string
|
|
product_name?: string
|
|
category?: string
|
|
description?: string
|
|
attributes?: string
|
|
}) => request.post('/merchant/products', data).then((r) => r.data.data as MerchantProduct),
|
|
updateProduct: (id: number, data: Partial<MerchantProduct>) =>
|
|
request.patch(`/merchant/products/${id}`, data).then((r) => r.data.data),
|
|
orders: (params?: Record<string, unknown>) =>
|
|
request.get('/merchant/orders', { params }).then((r) => r.data.data as PageResult<FulfillmentOrder>),
|
|
createTestOrder: (data: {
|
|
sku: string
|
|
buyer_reference?: string
|
|
note?: string
|
|
order_status?: 'paid' | 'ship_failed'
|
|
}) => request.post('/merchant/orders/test', data).then((r) => r.data.data as CreateTestOrderResult),
|
|
getDeliveryLink: (orderNo: string) =>
|
|
request.get(`/merchant/orders/${encodeURIComponent(orderNo)}/delivery-link`).then((r) => r.data.data as DeliveryLinkResult),
|
|
revokeDeliveryLink: (orderNo: string) =>
|
|
request.post(`/merchant/orders/${encodeURIComponent(orderNo)}/delivery-link/revoke`).then((r) => r.data.data),
|
|
restoreDeliveryLink: (orderNo: string) =>
|
|
request.post(`/merchant/orders/${encodeURIComponent(orderNo)}/delivery-link/restore`).then((r) => r.data.data as DeliveryLinkResult),
|
|
wallet: () =>
|
|
request.get('/merchant/wallet').then((r) => r.data.data as WalletAccount),
|
|
ledger: (params?: Record<string, unknown>) =>
|
|
request.get('/merchant/wallet/ledger', { params }).then((r) => r.data.data as PageResult<WalletLedgerEntry>),
|
|
adjustWallet: (data: { amount: number; idempotency_key: string; note?: string }) =>
|
|
request.post('/merchant/wallet/adjust', data).then((r) => r.data.data as WalletAccount),
|
|
apiClients: () =>
|
|
request.get('/merchant/api-clients').then((r) => r.data.data as ApiClient[]),
|
|
createApiClient: (data: {
|
|
name: string
|
|
scopes: string
|
|
signature_version?: string
|
|
expires_at?: string
|
|
}) => request.post('/merchant/api-clients', data).then((r) => r.data.data as ApiCredential),
|
|
updateApiClientStatus: (id: number, status: ApiClient['status']) =>
|
|
request.patch(`/merchant/api-clients/${id}/status`, { status }).then((r) => r.data.data),
|
|
callbacks: () =>
|
|
request.get('/merchant/callbacks').then((r) => r.data.data as CallbackSubscription[]),
|
|
createCallback: (data: { name: string; url: string; events: string }) =>
|
|
request.post('/merchant/callbacks', data).then((r) => r.data.data as CallbackCredential),
|
|
updateCallbackStatus: (id: number, status: CallbackSubscription['status']) =>
|
|
request.patch(`/merchant/callbacks/${id}/status`, { status }).then((r) => r.data.data),
|
|
members: () =>
|
|
request.get('/merchant/members').then((r) => r.data.data as MerchantMember[]),
|
|
addMember: (data: { user_id: number; role: MerchantMember['role']; is_default?: boolean }) =>
|
|
request.post('/merchant/members', data).then((r) => r.data.data as MerchantMember),
|
|
}
|
|
|
|
export const deliveryApi = {
|
|
getOrder: (orderNo: string, auth?: { exp?: string; sign?: string }) =>
|
|
request.get(`/delivery/v1/orders/${encodeURIComponent(orderNo)}`, { params: auth }).then((r) => r.data.data as DeliveryOrderInfo),
|
|
bind: (orderNo: string, gameAccount: string, auth?: { exp?: string; sign?: string }) =>
|
|
request.post(
|
|
`/delivery/v1/orders/${encodeURIComponent(orderNo)}/bind`,
|
|
{
|
|
game_account: gameAccount,
|
|
},
|
|
{ params: auth },
|
|
).then((r) => r.data.data as DeliveryBindResult),
|
|
submit: (orderNo: string, gameAccount: string, bindUUID: string, auth?: { exp?: string; sign?: string }) =>
|
|
request.post(
|
|
`/delivery/v1/orders/${encodeURIComponent(orderNo)}/submit`,
|
|
{
|
|
game_account: gameAccount,
|
|
bind_uuid: bindUUID,
|
|
},
|
|
{ params: auth },
|
|
).then((r) => r.data.data as DeliverySubmitResult),
|
|
}
|
|
|
|
export const platformApi = {
|
|
merchants: (params?: Record<string, unknown>) =>
|
|
request.get('/platform/merchants', { params }).then((r) => r.data.data as PageResult<Merchant>),
|
|
createMerchant: (data: {
|
|
code: string
|
|
name: string
|
|
contact_name?: string
|
|
contact_info?: string
|
|
owner_user_id?: number
|
|
owner_username?: string
|
|
owner_password?: string
|
|
owner_nickname?: string
|
|
features?: string
|
|
fee_type?: 'rate' | 'fixed'
|
|
fee_rate_bp?: number
|
|
fee_fixed_amount?: number
|
|
}) => request.post('/platform/merchants', data).then((r) => r.data.data as Merchant),
|
|
updateMerchant: (id: number, data: Partial<Merchant>) =>
|
|
request.patch(`/platform/merchants/${id}`, data).then((r) => r.data.data),
|
|
addMember: (
|
|
merchantId: number,
|
|
data: { user_id: number; role: MerchantMember['role']; is_default?: boolean },
|
|
) => request.post(`/platform/merchants/${merchantId}/members`, data).then((r) => r.data.data as MerchantMember),
|
|
productCatalog: () =>
|
|
request.get('/platform/product-catalog').then((r) => r.data.data as ProductCatalogItem[]),
|
|
merchantProducts: (merchantId: number) =>
|
|
request.get(`/platform/merchants/${merchantId}/products`).then((r) => r.data.data as ProductCatalogItem[]),
|
|
assignProducts: (merchantId: number, catalogIds: number[]) =>
|
|
request.post(`/platform/merchants/${merchantId}/products/assign`, { catalog_ids: catalogIds }).then((r) => r.data.data as { assigned: number }),
|
|
}
|