From 8e1a4be895097c8c538be29ab4952405db30b275 Mon Sep 17 00:00:00 2001 From: yml Date: Mon, 4 May 2026 09:55:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E5=89=8D=E7=AB=AF=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E7=AE=A1=E7=90=86=20API=20=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/frontend/src/services/admin.ts | 618 +----------------- .../frontend/src/services/admin/audit-logs.ts | 6 + apps/frontend/src/services/admin/auth.ts | 14 + apps/frontend/src/services/admin/dashboard.ts | 6 + apps/frontend/src/services/admin/index.ts | 11 + apps/frontend/src/services/admin/inventory.ts | 29 + .../src/services/admin/manual-redeem.ts | 50 ++ .../src/services/admin/message-deliveries.ts | 9 + apps/frontend/src/services/admin/orders.ts | 10 + .../src/services/admin/platform-config.ts | 373 +++++++++++ apps/frontend/src/services/admin/tasks.ts | 79 +++ apps/frontend/src/services/admin/users.ts | 26 + .../src/services/admin/webhook-events.ts | 17 + 13 files changed, 631 insertions(+), 617 deletions(-) create mode 100644 apps/frontend/src/services/admin/audit-logs.ts create mode 100644 apps/frontend/src/services/admin/auth.ts create mode 100644 apps/frontend/src/services/admin/dashboard.ts create mode 100644 apps/frontend/src/services/admin/index.ts create mode 100644 apps/frontend/src/services/admin/inventory.ts create mode 100644 apps/frontend/src/services/admin/manual-redeem.ts create mode 100644 apps/frontend/src/services/admin/message-deliveries.ts create mode 100644 apps/frontend/src/services/admin/orders.ts create mode 100644 apps/frontend/src/services/admin/platform-config.ts create mode 100644 apps/frontend/src/services/admin/tasks.ts create mode 100644 apps/frontend/src/services/admin/users.ts create mode 100644 apps/frontend/src/services/admin/webhook-events.ts diff --git a/apps/frontend/src/services/admin.ts b/apps/frontend/src/services/admin.ts index d89efd45..e8138fa3 100644 --- a/apps/frontend/src/services/admin.ts +++ b/apps/frontend/src/services/admin.ts @@ -1,617 +1 @@ -import { apiDelete, apiGet, apiGetBlob, apiPost } from '@/lib/http' -import type { - AdminAgisoMessagingDefaults, - AdminAgisoObservedShopItem, - AdminAgisoShopConfigItem, - AdminAuditLogItem, - AdminCloudtentaclesLoginTestResult, - AdminCloudtentaclesPersistedSession, - AdminCloudtentaclesSkuListResult, - AdminCloudtentaclesSendSmsResult, - AdminCloudtentaclesSourceConfig, - AdminCloudtentaclesValidateSessionResult, - AdminFulfillmentLookupResult, - AdminFulfillmentBindingConfigItem, - AdminKhhaoLoginTestResult, - AdminKhhaoOrderQueryResult, - AdminKhhaoSourceConfig, - AdminKhhaoSyncState, - AdminKhhaoOrderSyncResult, - AdminKuaishouEticketConsumeResult, - AdminKuaishouCloudFulfillmentConfig, - AdminKuaishouEticketDetailResult, - AdminKuaishouEticketShopInfoResult, - AdminKuaishouEticketSourceConfig, - AdminInventoryItemListItem, - AdminInventorySkuSuggestion, - AdminMessageDeliveryListItem, - AdminObservedProductItem, - AdminTaskActionResponse, - AdminDashboardSummary, - AdminLoginResponse, - AdminManualRedeemDetail, - AdminOrderDetail, - AdminOrderListItem, - AdminPagination, - AdminSessionSummary, - AdminTaskDetail, - AdminTaskListItem, - AdminUserListItem, - AdminWebhookEventDetail, - AdminWebhookEventListItem, - AdminWebhookReplayResponse, -} from '@/types/admin' - -export function loginAdmin(payload: { username: string; password: string }) { - return apiPost('/api/v1/admin/auth/login', payload) -} - -export function fetchAdminSession() { - return apiGet('/api/v1/admin/auth/session') -} - -export function logoutAdmin() { - return apiPost<{ success: boolean }>('/api/v1/admin/auth/logout', {}) -} - -export function fetchAdminDashboardSummary() { - return apiGet('/api/v1/admin/dashboard/summary') -} - -export function fetchAdminUsers(params?: Record) { - return apiGet<{ items: AdminUserListItem[]; pagination: AdminPagination }>('/api/v1/admin/users', params) -} - -export function createAdminUser(payload: { username: string; password: string; role: string; status?: string }) { - return apiPost<{ user: AdminUserListItem }>('/api/v1/admin/users', payload) -} - -export function updateAdminUserRole(userId: number | string, payload: { role: string }) { - return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/role`, payload) -} - -export function updateAdminUserStatus(userId: number | string, payload: { status: string }) { - return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/status`, payload) -} - -export function updateAdminUserInventoryGroups(userId: number | string, payload: { inventoryGroupCodes: string[] }) { - return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/inventory-groups`, payload) -} - -export function resetAdminUserPassword(userId: number | string, payload: { password: string }) { - return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/reset-password`, payload) -} - -export function fetchAdminAuditLogs(params?: Record) { - return apiGet<{ items: AdminAuditLogItem[]; pagination: AdminPagination }>('/api/v1/admin/audit-logs', params) -} - -export function fetchAdminAgisoShopConfigs() { - return apiGet<{ - filePath: string - defaults: AdminAgisoMessagingDefaults - shops: AdminAgisoShopConfigItem[] - observedShops: AdminAgisoObservedShopItem[] - }>('/api/v1/admin/platform-config/agiso-shops') -} - -export function saveAdminAgisoShopConfigs(payload: { - defaults: AdminAgisoMessagingDefaults - shops: Array> -}) { - return apiPost<{ - filePath: string - defaults: AdminAgisoMessagingDefaults - shops: AdminAgisoShopConfigItem[] - }>('/api/v1/admin/platform-config/agiso-shops', payload) -} - -export function fetchAdminKhhaoSourceConfig() { - return apiGet<{ - filePath: string - source: AdminKhhaoSourceConfig - stateFilePath: string - syncState: AdminKhhaoSyncState - }>('/api/v1/admin/platform-config/khhao-source') -} - -export function fetchAdminKuaishouEticketSourceConfig() { - return apiGet<{ - filePath: string - source: AdminKuaishouEticketSourceConfig - }>('/api/v1/admin/platform-config/kuaishou-eticket-source') -} - -export function saveAdminKuaishouEticketSourceConfig(payload: AdminKuaishouEticketSourceConfig) { - return apiPost<{ - filePath: string - source: AdminKuaishouEticketSourceConfig - }>('/api/v1/admin/platform-config/kuaishou-eticket-source', payload as unknown as Record) -} - -export function queryAdminKuaishouEticketDetail(payload: { - baseUrl?: string - shopId?: string - cookie?: string - eTicketId: string -}) { - return apiPost('/api/v1/admin/platform-config/kuaishou-eticket/query-detail', payload) -} - -export function queryAdminKuaishouEticketShopInfo(payload: { - baseUrl?: string - shopId?: string - cookie?: string -}) { - return apiPost('/api/v1/admin/platform-config/kuaishou-eticket/query-shop-info', payload) -} - -export function consumeAdminKuaishouEticket(payload: { - baseUrl?: string - shopId?: string - cookie?: string - eTicketId: string - oid?: string - formToken?: string - num?: number - storeId?: string -}) { - return apiPost('/api/v1/admin/platform-config/kuaishou-eticket/consume', payload) -} - -export function saveAdminKhhaoSourceConfig(payload: AdminKhhaoSourceConfig) { - return apiPost<{ - filePath: string - source: AdminKhhaoSourceConfig - stateFilePath: string - syncState: AdminKhhaoSyncState - }>('/api/v1/admin/platform-config/khhao-source', payload as unknown as Record) -} - -export function testAdminKhhaoLogin(payload: { - baseUrl?: string - username: string - password: string - maxCaptchaAttempts?: number - includeImageBase64?: boolean -}) { - return apiPost('/api/v1/admin/platform-config/khhao/test-login', payload) -} - -export function queryAdminKhhaoOrders(payload: { - baseUrl?: string - username: string - password: string - page?: number - limit?: number - maxCaptchaAttempts?: number -}) { - return apiPost('/api/v1/admin/platform-config/khhao/query-orders', payload) -} - -export function syncAdminKhhaoOrders(payload: { - baseUrl?: string - username: string - password: string - page?: number - limit?: number - maxCaptchaAttempts?: number -}) { - return apiPost('/api/v1/admin/platform-config/khhao/sync-orders', payload) -} - -export function fetchAdminCloudtentaclesSourceConfig() { - return apiGet<{ - filePath: string - sessionFilePath: string - source: AdminCloudtentaclesSourceConfig - session: AdminCloudtentaclesPersistedSession - }>('/api/v1/admin/platform-config/cloudtentacles-source') -} - -export function saveAdminCloudtentaclesSourceConfig(payload: AdminCloudtentaclesSourceConfig) { - return apiPost<{ - filePath: string - sessionFilePath: string - source: AdminCloudtentaclesSourceConfig - session: AdminCloudtentaclesPersistedSession - }>('/api/v1/admin/platform-config/cloudtentacles-source', payload as unknown as Record) -} - -export function sendAdminCloudtentaclesSmsCode(payload: { - baseUrl?: string - username?: string - phone?: string - deviceId?: string - deviceType?: number -}) { - return apiPost('/api/v1/admin/platform-config/cloudtentacles/send-sms-code', payload) -} - -export function testAdminCloudtentaclesLogin(payload: { - baseUrl?: string - username?: string - password?: string - phone?: string - code?: string - deviceId?: string - deviceType?: number -}) { - return apiPost('/api/v1/admin/platform-config/cloudtentacles/test-login', payload) -} - -export function validateAdminCloudtentaclesSession(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number -}) { - return apiPost('/api/v1/admin/platform-config/cloudtentacles/validate-session', payload) -} - -export function fetchAdminCloudtentaclesAsset(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/asset', payload) -} - -export function fetchAdminCloudtentaclesCategories(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/categories', payload) -} - -export function fetchAdminCloudtentaclesSkuList(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number -}) { - return apiPost('/api/v1/admin/platform-config/cloudtentacles/sku/list', payload) -} - -export function buyAdminCloudtentaclesSku(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - id?: number - count?: number -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/sku/buy', payload) -} - -export function useAdminCloudtentaclesSku(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - id?: number - virtualNumberId?: number - phone?: string -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/sku/use', payload) -} - -export function fetchAdminCloudtentaclesKnapsack(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/knapsack', payload) -} - -export function fetchAdminCloudtentaclesVnList(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - key?: string -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/list', payload) -} - -export function appointAdminCloudtentaclesVn(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - key?: string -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/appoint', payload) -} - -export function generateAdminCloudtentaclesVnLoginCode(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - key?: string - id?: number -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/generate-login-code', payload) -} - -export function fetchAdminCloudtentaclesVnCode(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - key?: string - phone?: string -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/fetch-code', payload) -} - -export function verifyAdminCloudtentaclesVnCode(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - key?: string - id?: number - code?: string -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/verify-code', payload) -} - -export function fetchAdminCloudtentaclesBindUrl(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - key?: string - id?: number -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/bind-url', payload) -} - -export function backAdminCloudtentaclesVn(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - key?: string - id?: number -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/back', payload) -} - -export function runAdminCloudtentaclesFullFlow(payload: { - baseUrl?: string - token?: string - deviceId?: string - deviceType?: number - skuId?: number - skuCount?: number - vnKey?: string -}) { - return apiPost>('/api/v1/admin/platform-config/cloudtentacles/debug/full-flow', payload) -} - -export function fetchAdminFulfillmentBindingConfigs() { - return apiGet<{ - filePath: string - bindings: AdminFulfillmentBindingConfigItem[] - observedProducts: AdminObservedProductItem[] - }>('/api/v1/admin/platform-config/fulfillment-bindings') -} - -export function lookupAdminFulfillmentBindingOrder(payload: { - provider?: string - platform?: string - shopId: string - platformOrderId: string -}) { - return apiPost('/api/v1/admin/platform-config/fulfillment-bindings/lookup-order', payload) -} - -export function saveAdminFulfillmentBindingConfigs(payload: { bindings: Array> }) { - return apiPost<{ - filePath: string - bindings: AdminFulfillmentBindingConfigItem[] - }>('/api/v1/admin/platform-config/fulfillment-bindings', payload) -} - -export function fetchAdminKuaishouCloudFulfillmentConfig() { - return apiGet<{ - filePath: string - source: AdminKuaishouCloudFulfillmentConfig - }>('/api/v1/admin/platform-config/kuaishou-cloud-fulfillment') -} - -export function saveAdminKuaishouCloudFulfillmentConfig(payload: AdminKuaishouCloudFulfillmentConfig) { - return apiPost<{ - filePath: string - source: AdminKuaishouCloudFulfillmentConfig - }>('/api/v1/admin/platform-config/kuaishou-cloud-fulfillment', payload as unknown as Record) -} - -export function fetchAdminOrders(params?: Record) { - return apiGet<{ items: AdminOrderListItem[]; pagination: AdminPagination }>('/api/v1/admin/orders', params) -} - -export function fetchAdminOrderDetail(orderId: number | string) { - return apiGet(`/api/v1/admin/orders/${orderId}`) -} - -export function fetchAdminTasks(params?: Record) { - return apiGet<{ items: AdminTaskListItem[]; pagination: AdminPagination }>('/api/v1/admin/tasks', params) -} - -export function fetchAdminTaskDetail(taskId: number | string) { - return apiGet(`/api/v1/admin/tasks/${taskId}`) -} - -export function fetchAdminTaskScreenshot(taskId: number | string) { - return apiGetBlob(`/api/v1/admin/tasks/${taskId}/screenshot`) -} - -export function retryAdminTask(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/retry`, {}) -} - -export function releaseAdminTaskInventory(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/release-inventory`, {}) -} - -export function releaseAdminTaskInventoryBinding(taskId: number | string, bindingId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/inventory-bindings/${bindingId}/release`, {}) -} - -export function regenerateAdminTaskClaimLink(taskId: number | string) { - return apiPost( - `/api/v1/admin/tasks/${taskId}/regenerate-claim-link`, - {}, - ) -} - -export function confirmAdminTaskAssistedRole(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/support-confirm-role`, {}) -} - -export function redeemAdminTaskAssisted(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/support-redeem`, {}) -} - -export function closeAdminTask(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/close`, {}) -} - -export function markAdminTaskManualReview(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/mark-manual-review`, {}) -} - -export function completeAdminTaskManualDispatch( - taskId: number | string, - payload: { - outcome: 'delivered' | 'failed' - resultMessage?: string - deliveryReference?: string - deliveredCredential?: string - }, -) { - return apiPost(`/api/v1/admin/tasks/${taskId}/complete-manual-dispatch`, payload) -} - -export function prepareAdminTaskKuaishouCloudFulfillment(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/prepare`, {}) -} - -export function refreshAdminTaskKuaishouCloudRoleInfo(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/refresh-role-info`, {}) -} - -export function dispatchAdminTaskKuaishouCloudFulfillment( - taskId: number | string, - payload: { - ticketCode?: string - } = {}, -) { - return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/dispatch`, payload) -} - -export function returnNumberAdminTaskKuaishouCloudFulfillment(taskId: number | string) { - return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/return-number`, {}) -} - -export function fetchAdminInventoryItems(params?: Record) { - return apiGet<{ items: AdminInventoryItemListItem[]; pagination: AdminPagination }>('/api/v1/admin/inventory', params) -} - -export function fetchAdminInventorySkuSuggestions(params?: Record) { - return apiGet<{ items: AdminInventorySkuSuggestion[] }>('/api/v1/admin/inventory/sku-suggestions', params) -} - -export function fetchAdminManualRedeemSkuSuggestions(params?: Record) { - return apiGet<{ items: AdminInventorySkuSuggestion[] }>('/api/v1/admin/manual-redeem/sku-suggestions', params) -} - -export function createAdminManualRedeemTask(payload: { - proofValue: string - skuCode: string - skuName?: string - remark?: string -}) { - return apiPost('/api/v1/admin/manual-redeem', payload) -} - -export function fetchAdminManualRedeemDetail(taskId: number | string) { - return apiGet(`/api/v1/admin/manual-redeem/${taskId}`) -} - -export function createAdminManualRedeemSession( - taskId: number | string, - payload: { loginType: string; forceRecreate?: boolean }, -) { - return apiPost(`/api/v1/admin/manual-redeem/${taskId}/session`, payload) -} - -export function fetchAdminManualRedeemSessionSummary(taskId: number | string) { - return apiGet(`/api/v1/admin/manual-redeem/${taskId}/session/summary`) -} - -export function refreshAdminManualRedeemSession(taskId: number | string) { - return apiPost(`/api/v1/admin/manual-redeem/${taskId}/session/refresh`, {}) -} - -export function removeAdminManualRedeemSession(taskId: number | string) { - return apiDelete(`/api/v1/admin/manual-redeem/${taskId}/session`) -} - -export function confirmAdminManualRedeemRole(taskId: number | string) { - return apiPost(`/api/v1/admin/manual-redeem/${taskId}/confirm-role`, {}) -} - -export function redeemAdminManualRedeem(taskId: number | string) { - return apiPost(`/api/v1/admin/manual-redeem/${taskId}/redeem`, {}) -} - -export function closeAdminManualRedeemTask(taskId: number | string) { - return apiPost(`/api/v1/admin/manual-redeem/${taskId}/close`, {}) -} - -export function fetchAdminMessageDeliveries(params?: Record) { - return apiGet<{ items: AdminMessageDeliveryListItem[]; pagination: AdminPagination }>( - '/api/v1/admin/message-deliveries', - params, - ) -} - -export function importAdminInventoryItems(payload: Record) { - return apiPost<{ total: number; created: number; duplicated: number }>('/api/v1/admin/inventory/import', payload) -} - -export function createAdminInventoryItem(payload: Record) { - return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>('/api/v1/admin/inventory', payload) -} - -export function releaseAdminInventoryItem(inventoryItemId: number | string) { - return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>(`/api/v1/admin/inventory/${inventoryItemId}/release`, {}) -} - -export function invalidateAdminInventoryItem(inventoryItemId: number | string, payload?: Record) { - return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>(`/api/v1/admin/inventory/${inventoryItemId}/invalidate`, payload || {}) -} - -export function fetchAdminWebhookEvents(params?: Record) { - return apiGet<{ items: AdminWebhookEventListItem[]; pagination: AdminPagination }>( - '/api/v1/admin/webhook-events', - params, - ) -} - -export function fetchAdminWebhookEventDetail(eventId: number | string) { - return apiGet(`/api/v1/admin/webhook-events/${eventId}`) -} - -export function replayAdminWebhookEvent(eventId: number | string) { - return apiPost(`/api/v1/admin/webhook-events/${eventId}/replay`, {}) -} +export * from './admin/index' diff --git a/apps/frontend/src/services/admin/audit-logs.ts b/apps/frontend/src/services/admin/audit-logs.ts new file mode 100644 index 00000000..1c389b86 --- /dev/null +++ b/apps/frontend/src/services/admin/audit-logs.ts @@ -0,0 +1,6 @@ +import { apiGet } from '@/lib/http' +import type { AdminAuditLogItem, AdminPagination } from '@/types/admin' + +export function fetchAdminAuditLogs(params?: Record) { + return apiGet<{ items: AdminAuditLogItem[]; pagination: AdminPagination }>('/api/v1/admin/audit-logs', params) +} diff --git a/apps/frontend/src/services/admin/auth.ts b/apps/frontend/src/services/admin/auth.ts new file mode 100644 index 00000000..aab2ddd1 --- /dev/null +++ b/apps/frontend/src/services/admin/auth.ts @@ -0,0 +1,14 @@ +import { apiGet, apiPost } from '@/lib/http' +import type { AdminLoginResponse, AdminSessionSummary } from '@/types/admin' + +export function loginAdmin(payload: { username: string; password: string }) { + return apiPost('/api/v1/admin/auth/login', payload) +} + +export function fetchAdminSession() { + return apiGet('/api/v1/admin/auth/session') +} + +export function logoutAdmin() { + return apiPost<{ success: boolean }>('/api/v1/admin/auth/logout', {}) +} diff --git a/apps/frontend/src/services/admin/dashboard.ts b/apps/frontend/src/services/admin/dashboard.ts new file mode 100644 index 00000000..518d3902 --- /dev/null +++ b/apps/frontend/src/services/admin/dashboard.ts @@ -0,0 +1,6 @@ +import { apiGet } from '@/lib/http' +import type { AdminDashboardSummary } from '@/types/admin' + +export function fetchAdminDashboardSummary() { + return apiGet('/api/v1/admin/dashboard/summary') +} diff --git a/apps/frontend/src/services/admin/index.ts b/apps/frontend/src/services/admin/index.ts new file mode 100644 index 00000000..5c0cdc09 --- /dev/null +++ b/apps/frontend/src/services/admin/index.ts @@ -0,0 +1,11 @@ +export * from './auth' +export * from './dashboard' +export * from './users' +export * from './audit-logs' +export * from './platform-config' +export * from './orders' +export * from './tasks' +export * from './inventory' +export * from './manual-redeem' +export * from './message-deliveries' +export * from './webhook-events' diff --git a/apps/frontend/src/services/admin/inventory.ts b/apps/frontend/src/services/admin/inventory.ts new file mode 100644 index 00000000..272348a7 --- /dev/null +++ b/apps/frontend/src/services/admin/inventory.ts @@ -0,0 +1,29 @@ +import { apiGet, apiPost } from '@/lib/http' +import type { AdminInventoryItemListItem, AdminInventorySkuSuggestion, AdminPagination } from '@/types/admin' + +export function fetchAdminInventoryItems(params?: Record) { + return apiGet<{ items: AdminInventoryItemListItem[]; pagination: AdminPagination }>('/api/v1/admin/inventory', params) +} + +export function fetchAdminInventorySkuSuggestions(params?: Record) { + return apiGet<{ items: AdminInventorySkuSuggestion[] }>('/api/v1/admin/inventory/sku-suggestions', params) +} + +export function importAdminInventoryItems(payload: Record) { + return apiPost<{ total: number; created: number; duplicated: number }>('/api/v1/admin/inventory/import', payload) +} + +export function createAdminInventoryItem(payload: Record) { + return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>('/api/v1/admin/inventory', payload) +} + +export function releaseAdminInventoryItem(inventoryItemId: number | string) { + return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>(`/api/v1/admin/inventory/${inventoryItemId}/release`, {}) +} + +export function invalidateAdminInventoryItem(inventoryItemId: number | string, payload?: Record) { + return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>( + `/api/v1/admin/inventory/${inventoryItemId}/invalidate`, + payload || {}, + ) +} diff --git a/apps/frontend/src/services/admin/manual-redeem.ts b/apps/frontend/src/services/admin/manual-redeem.ts new file mode 100644 index 00000000..d99ea912 --- /dev/null +++ b/apps/frontend/src/services/admin/manual-redeem.ts @@ -0,0 +1,50 @@ +import { apiDelete, apiGet, apiPost } from '@/lib/http' +import type { AdminInventorySkuSuggestion, AdminManualRedeemDetail } from '@/types/admin' + +export function fetchAdminManualRedeemSkuSuggestions(params?: Record) { + return apiGet<{ items: AdminInventorySkuSuggestion[] }>('/api/v1/admin/manual-redeem/sku-suggestions', params) +} + +export function createAdminManualRedeemTask(payload: { + proofValue: string + skuCode: string + skuName?: string + remark?: string +}) { + return apiPost('/api/v1/admin/manual-redeem', payload) +} + +export function fetchAdminManualRedeemDetail(taskId: number | string) { + return apiGet(`/api/v1/admin/manual-redeem/${taskId}`) +} + +export function createAdminManualRedeemSession( + taskId: number | string, + payload: { loginType: string; forceRecreate?: boolean }, +) { + return apiPost(`/api/v1/admin/manual-redeem/${taskId}/session`, payload) +} + +export function fetchAdminManualRedeemSessionSummary(taskId: number | string) { + return apiGet(`/api/v1/admin/manual-redeem/${taskId}/session/summary`) +} + +export function refreshAdminManualRedeemSession(taskId: number | string) { + return apiPost(`/api/v1/admin/manual-redeem/${taskId}/session/refresh`, {}) +} + +export function removeAdminManualRedeemSession(taskId: number | string) { + return apiDelete(`/api/v1/admin/manual-redeem/${taskId}/session`) +} + +export function confirmAdminManualRedeemRole(taskId: number | string) { + return apiPost(`/api/v1/admin/manual-redeem/${taskId}/confirm-role`, {}) +} + +export function redeemAdminManualRedeem(taskId: number | string) { + return apiPost(`/api/v1/admin/manual-redeem/${taskId}/redeem`, {}) +} + +export function closeAdminManualRedeemTask(taskId: number | string) { + return apiPost(`/api/v1/admin/manual-redeem/${taskId}/close`, {}) +} diff --git a/apps/frontend/src/services/admin/message-deliveries.ts b/apps/frontend/src/services/admin/message-deliveries.ts new file mode 100644 index 00000000..60fe8697 --- /dev/null +++ b/apps/frontend/src/services/admin/message-deliveries.ts @@ -0,0 +1,9 @@ +import { apiGet } from '@/lib/http' +import type { AdminMessageDeliveryListItem, AdminPagination } from '@/types/admin' + +export function fetchAdminMessageDeliveries(params?: Record) { + return apiGet<{ items: AdminMessageDeliveryListItem[]; pagination: AdminPagination }>( + '/api/v1/admin/message-deliveries', + params, + ) +} diff --git a/apps/frontend/src/services/admin/orders.ts b/apps/frontend/src/services/admin/orders.ts new file mode 100644 index 00000000..92059f78 --- /dev/null +++ b/apps/frontend/src/services/admin/orders.ts @@ -0,0 +1,10 @@ +import { apiGet } from '@/lib/http' +import type { AdminOrderDetail, AdminOrderListItem, AdminPagination } from '@/types/admin' + +export function fetchAdminOrders(params?: Record) { + return apiGet<{ items: AdminOrderListItem[]; pagination: AdminPagination }>('/api/v1/admin/orders', params) +} + +export function fetchAdminOrderDetail(orderId: number | string) { + return apiGet(`/api/v1/admin/orders/${orderId}`) +} diff --git a/apps/frontend/src/services/admin/platform-config.ts b/apps/frontend/src/services/admin/platform-config.ts new file mode 100644 index 00000000..ea9137ac --- /dev/null +++ b/apps/frontend/src/services/admin/platform-config.ts @@ -0,0 +1,373 @@ +import { apiGet, apiPost } from '@/lib/http' +import type { + AdminAgisoMessagingDefaults, + AdminAgisoObservedShopItem, + AdminAgisoShopConfigItem, + AdminCloudtentaclesLoginTestResult, + AdminCloudtentaclesPersistedSession, + AdminCloudtentaclesSkuListResult, + AdminCloudtentaclesSendSmsResult, + AdminCloudtentaclesSourceConfig, + AdminCloudtentaclesValidateSessionResult, + AdminFulfillmentBindingConfigItem, + AdminFulfillmentLookupResult, + AdminKhhaoLoginTestResult, + AdminKhhaoOrderQueryResult, + AdminKhhaoOrderSyncResult, + AdminKhhaoSourceConfig, + AdminKhhaoSyncState, + AdminKuaishouCloudFulfillmentConfig, + AdminKuaishouEticketConsumeResult, + AdminKuaishouEticketDetailResult, + AdminKuaishouEticketShopInfoResult, + AdminKuaishouEticketSourceConfig, + AdminObservedProductItem, +} from '@/types/admin' + +export function fetchAdminAgisoShopConfigs() { + return apiGet<{ + filePath: string + defaults: AdminAgisoMessagingDefaults + shops: AdminAgisoShopConfigItem[] + observedShops: AdminAgisoObservedShopItem[] + }>('/api/v1/admin/platform-config/agiso-shops') +} + +export function saveAdminAgisoShopConfigs(payload: { + defaults: AdminAgisoMessagingDefaults + shops: Array> +}) { + return apiPost<{ + filePath: string + defaults: AdminAgisoMessagingDefaults + shops: AdminAgisoShopConfigItem[] + }>('/api/v1/admin/platform-config/agiso-shops', payload) +} + +export function fetchAdminKhhaoSourceConfig() { + return apiGet<{ + filePath: string + source: AdminKhhaoSourceConfig + stateFilePath: string + syncState: AdminKhhaoSyncState + }>('/api/v1/admin/platform-config/khhao-source') +} + +export function saveAdminKhhaoSourceConfig(payload: AdminKhhaoSourceConfig) { + return apiPost<{ + filePath: string + source: AdminKhhaoSourceConfig + stateFilePath: string + syncState: AdminKhhaoSyncState + }>('/api/v1/admin/platform-config/khhao-source', payload as unknown as Record) +} + +export function testAdminKhhaoLogin(payload: { + baseUrl?: string + username: string + password: string + maxCaptchaAttempts?: number + includeImageBase64?: boolean +}) { + return apiPost('/api/v1/admin/platform-config/khhao/test-login', payload) +} + +export function queryAdminKhhaoOrders(payload: { + baseUrl?: string + username: string + password: string + page?: number + limit?: number + maxCaptchaAttempts?: number +}) { + return apiPost('/api/v1/admin/platform-config/khhao/query-orders', payload) +} + +export function syncAdminKhhaoOrders(payload: { + baseUrl?: string + username: string + password: string + page?: number + limit?: number + maxCaptchaAttempts?: number +}) { + return apiPost('/api/v1/admin/platform-config/khhao/sync-orders', payload) +} + +export function fetchAdminKuaishouEticketSourceConfig() { + return apiGet<{ + filePath: string + source: AdminKuaishouEticketSourceConfig + }>('/api/v1/admin/platform-config/kuaishou-eticket-source') +} + +export function saveAdminKuaishouEticketSourceConfig(payload: AdminKuaishouEticketSourceConfig) { + return apiPost<{ + filePath: string + source: AdminKuaishouEticketSourceConfig + }>('/api/v1/admin/platform-config/kuaishou-eticket-source', payload as unknown as Record) +} + +export function queryAdminKuaishouEticketDetail(payload: { + baseUrl?: string + shopId?: string + cookie?: string + eTicketId: string +}) { + return apiPost('/api/v1/admin/platform-config/kuaishou-eticket/query-detail', payload) +} + +export function queryAdminKuaishouEticketShopInfo(payload: { + baseUrl?: string + shopId?: string + cookie?: string +}) { + return apiPost('/api/v1/admin/platform-config/kuaishou-eticket/query-shop-info', payload) +} + +export function consumeAdminKuaishouEticket(payload: { + baseUrl?: string + shopId?: string + cookie?: string + eTicketId: string + oid?: string + formToken?: string + num?: number + storeId?: string +}) { + return apiPost('/api/v1/admin/platform-config/kuaishou-eticket/consume', payload) +} + +export function fetchAdminCloudtentaclesSourceConfig() { + return apiGet<{ + filePath: string + sessionFilePath: string + source: AdminCloudtentaclesSourceConfig + session: AdminCloudtentaclesPersistedSession + }>('/api/v1/admin/platform-config/cloudtentacles-source') +} + +export function saveAdminCloudtentaclesSourceConfig(payload: AdminCloudtentaclesSourceConfig) { + return apiPost<{ + filePath: string + sessionFilePath: string + source: AdminCloudtentaclesSourceConfig + session: AdminCloudtentaclesPersistedSession + }>('/api/v1/admin/platform-config/cloudtentacles-source', payload as unknown as Record) +} + +export function sendAdminCloudtentaclesSmsCode(payload: { + baseUrl?: string + username?: string + phone?: string + deviceId?: string + deviceType?: number +}) { + return apiPost('/api/v1/admin/platform-config/cloudtentacles/send-sms-code', payload) +} + +export function testAdminCloudtentaclesLogin(payload: { + baseUrl?: string + username?: string + password?: string + phone?: string + code?: string + deviceId?: string + deviceType?: number +}) { + return apiPost('/api/v1/admin/platform-config/cloudtentacles/test-login', payload) +} + +export function validateAdminCloudtentaclesSession(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number +}) { + return apiPost('/api/v1/admin/platform-config/cloudtentacles/validate-session', payload) +} + +export function fetchAdminCloudtentaclesAsset(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/asset', payload) +} + +export function fetchAdminCloudtentaclesCategories(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/categories', payload) +} + +export function fetchAdminCloudtentaclesSkuList(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number +}) { + return apiPost('/api/v1/admin/platform-config/cloudtentacles/sku/list', payload) +} + +export function buyAdminCloudtentaclesSku(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + id?: number + count?: number +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/sku/buy', payload) +} + +export function useAdminCloudtentaclesSku(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + id?: number + virtualNumberId?: number + phone?: string +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/sku/use', payload) +} + +export function fetchAdminCloudtentaclesKnapsack(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/knapsack', payload) +} + +export function fetchAdminCloudtentaclesVnList(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + key?: string +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/list', payload) +} + +export function appointAdminCloudtentaclesVn(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + key?: string +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/appoint', payload) +} + +export function generateAdminCloudtentaclesVnLoginCode(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + key?: string + id?: number +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/generate-login-code', payload) +} + +export function fetchAdminCloudtentaclesVnCode(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + key?: string + phone?: string +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/fetch-code', payload) +} + +export function verifyAdminCloudtentaclesVnCode(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + key?: string + id?: number + code?: string +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/verify-code', payload) +} + +export function fetchAdminCloudtentaclesBindUrl(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + key?: string + id?: number +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/bind-url', payload) +} + +export function backAdminCloudtentaclesVn(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + key?: string + id?: number +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/vn/back', payload) +} + +export function runAdminCloudtentaclesFullFlow(payload: { + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number + skuId?: number + skuCount?: number + vnKey?: string +}) { + return apiPost>('/api/v1/admin/platform-config/cloudtentacles/debug/full-flow', payload) +} + +export function fetchAdminFulfillmentBindingConfigs() { + return apiGet<{ + filePath: string + bindings: AdminFulfillmentBindingConfigItem[] + observedProducts: AdminObservedProductItem[] + }>('/api/v1/admin/platform-config/fulfillment-bindings') +} + +export function lookupAdminFulfillmentBindingOrder(payload: { + provider?: string + platform?: string + shopId: string + platformOrderId: string +}) { + return apiPost('/api/v1/admin/platform-config/fulfillment-bindings/lookup-order', payload) +} + +export function saveAdminFulfillmentBindingConfigs(payload: { bindings: Array> }) { + return apiPost<{ + filePath: string + bindings: AdminFulfillmentBindingConfigItem[] + }>('/api/v1/admin/platform-config/fulfillment-bindings', payload) +} + +export function fetchAdminKuaishouCloudFulfillmentConfig() { + return apiGet<{ + filePath: string + source: AdminKuaishouCloudFulfillmentConfig + }>('/api/v1/admin/platform-config/kuaishou-cloud-fulfillment') +} + +export function saveAdminKuaishouCloudFulfillmentConfig(payload: AdminKuaishouCloudFulfillmentConfig) { + return apiPost<{ + filePath: string + source: AdminKuaishouCloudFulfillmentConfig + }>('/api/v1/admin/platform-config/kuaishou-cloud-fulfillment', payload as unknown as Record) +} diff --git a/apps/frontend/src/services/admin/tasks.ts b/apps/frontend/src/services/admin/tasks.ts new file mode 100644 index 00000000..bc743716 --- /dev/null +++ b/apps/frontend/src/services/admin/tasks.ts @@ -0,0 +1,79 @@ +import { apiGet, apiGetBlob, apiPost } from '@/lib/http' +import type { AdminPagination, AdminTaskActionResponse, AdminTaskDetail, AdminTaskListItem } from '@/types/admin' + +export function fetchAdminTasks(params?: Record) { + return apiGet<{ items: AdminTaskListItem[]; pagination: AdminPagination }>('/api/v1/admin/tasks', params) +} + +export function fetchAdminTaskDetail(taskId: number | string) { + return apiGet(`/api/v1/admin/tasks/${taskId}`) +} + +export function fetchAdminTaskScreenshot(taskId: number | string) { + return apiGetBlob(`/api/v1/admin/tasks/${taskId}/screenshot`) +} + +export function retryAdminTask(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/retry`, {}) +} + +export function releaseAdminTaskInventory(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/release-inventory`, {}) +} + +export function releaseAdminTaskInventoryBinding(taskId: number | string, bindingId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/inventory-bindings/${bindingId}/release`, {}) +} + +export function regenerateAdminTaskClaimLink(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/regenerate-claim-link`, {}) +} + +export function confirmAdminTaskAssistedRole(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/support-confirm-role`, {}) +} + +export function redeemAdminTaskAssisted(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/support-redeem`, {}) +} + +export function closeAdminTask(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/close`, {}) +} + +export function markAdminTaskManualReview(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/mark-manual-review`, {}) +} + +export function completeAdminTaskManualDispatch( + taskId: number | string, + payload: { + outcome: 'delivered' | 'failed' + resultMessage?: string + deliveryReference?: string + deliveredCredential?: string + }, +) { + return apiPost(`/api/v1/admin/tasks/${taskId}/complete-manual-dispatch`, payload) +} + +export function prepareAdminTaskKuaishouCloudFulfillment(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/prepare`, {}) +} + +export function refreshAdminTaskKuaishouCloudRoleInfo(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/refresh-role-info`, {}) +} + +export function dispatchAdminTaskKuaishouCloudFulfillment( + taskId: number | string, + payload: { + ticketCode?: string + } = {}, +) { + return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/dispatch`, payload) +} + +export function returnNumberAdminTaskKuaishouCloudFulfillment(taskId: number | string) { + return apiPost(`/api/v1/admin/tasks/${taskId}/kuaishou-cloud/return-number`, {}) +} diff --git a/apps/frontend/src/services/admin/users.ts b/apps/frontend/src/services/admin/users.ts new file mode 100644 index 00000000..64350520 --- /dev/null +++ b/apps/frontend/src/services/admin/users.ts @@ -0,0 +1,26 @@ +import { apiGet, apiPost } from '@/lib/http' +import type { AdminPagination, AdminUserListItem } from '@/types/admin' + +export function fetchAdminUsers(params?: Record) { + return apiGet<{ items: AdminUserListItem[]; pagination: AdminPagination }>('/api/v1/admin/users', params) +} + +export function createAdminUser(payload: { username: string; password: string; role: string; status?: string }) { + return apiPost<{ user: AdminUserListItem }>('/api/v1/admin/users', payload) +} + +export function updateAdminUserRole(userId: number | string, payload: { role: string }) { + return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/role`, payload) +} + +export function updateAdminUserStatus(userId: number | string, payload: { status: string }) { + return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/status`, payload) +} + +export function updateAdminUserInventoryGroups(userId: number | string, payload: { inventoryGroupCodes: string[] }) { + return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/inventory-groups`, payload) +} + +export function resetAdminUserPassword(userId: number | string, payload: { password: string }) { + return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/reset-password`, payload) +} diff --git a/apps/frontend/src/services/admin/webhook-events.ts b/apps/frontend/src/services/admin/webhook-events.ts new file mode 100644 index 00000000..aee3111f --- /dev/null +++ b/apps/frontend/src/services/admin/webhook-events.ts @@ -0,0 +1,17 @@ +import { apiGet, apiPost } from '@/lib/http' +import type { AdminPagination, AdminWebhookEventDetail, AdminWebhookEventListItem, AdminWebhookReplayResponse } from '@/types/admin' + +export function fetchAdminWebhookEvents(params?: Record) { + return apiGet<{ items: AdminWebhookEventListItem[]; pagination: AdminPagination }>( + '/api/v1/admin/webhook-events', + params, + ) +} + +export function fetchAdminWebhookEventDetail(eventId: number | string) { + return apiGet(`/api/v1/admin/webhook-events/${eventId}`) +} + +export function replayAdminWebhookEvent(eventId: number | string) { + return apiPost(`/api/v1/admin/webhook-events/${eventId}/replay`, {}) +}