diff --git a/apps/backend/src/types/admin-read-inputs.js b/apps/backend/src/types/admin-read-inputs.js deleted file mode 100644 index b0531e3f..00000000 --- a/apps/backend/src/types/admin-read-inputs.js +++ /dev/null @@ -1,93 +0,0 @@ -// @ts-check - -export {} - -/** - * @typedef {{ - * userId?: number | string - * username?: string - * role?: string - * allowedInventoryGroups?: string[] - * }} AdminViewerSessionInput - */ - -/** - * @typedef {{ - * page?: number | string - * pageSize?: number | string - * platformOrderId?: string - * payStatus?: string - * skuCode?: string - * dateFrom?: string - * dateTo?: string - * }} AdminOrderListQueryInput - */ - -/** - * @typedef {{ - * page?: number | string - * pageSize?: number | string - * status?: string - * platformOrderId?: string - * taskNo?: string - * skuCode?: string - * roleId?: string - * dateFrom?: string - * dateTo?: string - * }} AdminTaskListQueryInput - */ - -/** - * @typedef {{ - * page?: number | string - * pageSize?: number | string - * skuCode?: string - * credentialType?: string - * status?: string - * batchNo?: string - * inventoryGroupCode?: string - * }} AdminInventoryListQueryInput - */ - -/** - * @typedef {{ - * credentialType?: string - * keyword?: string - * limit?: number | string - * inventoryGroupCode?: string - * }} AdminInventorySkuSuggestionQueryInput - */ - -/** - * @typedef {{ - * page?: number | string - * pageSize?: number | string - * provider?: string - * platform?: string - * platformOrderId?: string - * processed?: string - * visibility?: string - * relatedOrderId?: string - * dateFrom?: string - * dateTo?: string - * }} AdminWebhookEventListQueryInput - */ - -/** - * @typedef {{ - * page?: number | string - * pageSize?: number | string - * provider?: string - * platform?: string - * status?: string - * shopId?: string - * platformOrderId?: string - * taskNo?: string - * dateFrom?: string - * dateTo?: string - * }} AdminMessageDeliveryListQueryInput - */ - -/** - * @typedef {number | string} AdminEntityIdInput - */ diff --git a/apps/backend/src/types/admin-read-inputs.ts b/apps/backend/src/types/admin-read-inputs.ts new file mode 100644 index 00000000..3914eef9 --- /dev/null +++ b/apps/backend/src/types/admin-read-inputs.ts @@ -0,0 +1,73 @@ +export type AdminViewerSessionInput = { + userId?: number | string + username?: string + role?: string + allowedInventoryGroups?: string[] +} + +export type AdminOrderListQueryInput = { + page?: number | string + pageSize?: number | string + platformOrderId?: string + payStatus?: string + skuCode?: string + dateFrom?: string + dateTo?: string +} + +export type AdminTaskListQueryInput = { + page?: number | string + pageSize?: number | string + status?: string + platformOrderId?: string + taskNo?: string + skuCode?: string + roleId?: string + dateFrom?: string + dateTo?: string +} + +export type AdminInventoryListQueryInput = { + page?: number | string + pageSize?: number | string + skuCode?: string + credentialType?: string + status?: string + batchNo?: string + inventoryGroupCode?: string +} + +export type AdminInventorySkuSuggestionQueryInput = { + credentialType?: string + keyword?: string + limit?: number | string + inventoryGroupCode?: string +} + +export type AdminWebhookEventListQueryInput = { + page?: number | string + pageSize?: number | string + provider?: string + platform?: string + platformOrderId?: string + processed?: string + visibility?: string + relatedOrderId?: string + dateFrom?: string + dateTo?: string +} + +export type AdminMessageDeliveryListQueryInput = { + page?: number | string + pageSize?: number | string + provider?: string + platform?: string + status?: string + shopId?: string + platformOrderId?: string + taskNo?: string + dateFrom?: string + dateTo?: string +} + +export type AdminEntityIdInput = number | string diff --git a/apps/backend/src/types/admin-read-models.js b/apps/backend/src/types/admin-read-models.js deleted file mode 100644 index eee36ebe..00000000 --- a/apps/backend/src/types/admin-read-models.js +++ /dev/null @@ -1,206 +0,0 @@ -// @ts-check - -export {} - -/** - * @typedef {{ - * totalBindingCount: number - * reservedBindingCount: number - * consumedBindingCount: number - * releasedBindingCount: number - * roleKeys: string[] - * }} AdminTaskBindingSummary - */ - -/** - * @typedef {{ - * status: string - * trigger: string - * reason: string - * platformOrderId: string - * responseStatus: number - * errorMessage: string - * requestId: string - * updatedAt: string | null - * }} AdminAgisoAutoDeliveryStatus - */ - -/** - * @typedef {{ - * orderId: number - * provider: string - * platform: string - * shopId: string - * shopName: string - * platformOrderId: string - * orderStatus: string - * payStatus: string - * buyerId: string - * buyerName: string - * receiverContact: string - * totalAmount: string - * totalAmountFen: number - * currency: string - * paidAt: string | null - * createdAt: string - * updatedAt: string - * itemCount: number - * totalQuantity: number - * itemSummary: string - * taskCount: number - * systemBindingStatus: string - * userBindingStatus: string - * systemBoundTaskCount: number - * completedBindingTaskCount: number - * totalBindingCount: number - * reservedBindingCount: number - * consumedBindingCount: number - * releasedBindingCount: number - * }} AdminOrderListItem - */ - -/** - * @typedef {{ - * taskId: number - * taskNo: string - * platformOrderId: string - * skuCode: string - * skuName: string - * status: string - * executorKey: string - * deliveryStatus: string - * resultCode: string - * resultMessage: string - * systemBindingStatus: string - * userBindingStatus: string - * loginType: string - * roleName: string - * roleId: string - * browserSessionId: string - * claimedAt: string | null - * roleConfirmedAt: string | null - * redeemedAt: string | null - * retryCount: number - * bindingSummary: AdminTaskBindingSummary - * lastError: string - * createdAt: string - * updatedAt: string - * inventoryDisplayMasked: string - * inventoryCredentialType: string - * claimToken: string - * screenshotPath: string - * agisoAutoDelivery: AdminAgisoAutoDeliveryStatus | null - * }} AdminTaskListItem - */ - -/** - * @typedef {{ - * inventoryItemId: number - * skuCode: string - * batchNo: string - * credentialType: string - * inventoryGroupCode: string - * displayValue: string - * status: string - * reservedByTaskId: number | null - * reservedByTaskNo: string - * platformOrderId: string - * systemBindingStatus: string - * userBindingStatus: string - * invalidReason: string - * deliveredAt: string | null - * createdAt: string - * updatedAt: string - * }} AdminInventoryItemListItem - */ - -/** - * @typedef {{ - * eventId: number - * provider: string - * platform: string - * platformRaw: string - * shopId: string - * shopName: string - * eventType: string - * eventKey: string - * signatureValid: boolean - * processed: boolean - * processError: string - * visibilityLevel: string - * relatedOrderId: number | null - * platformOrderId: string - * buyerId: string - * buyerName: string - * totalAmount: string - * totalAmountFen: number - * currency: string - * itemCount: number - * taskCount: number - * messageText: string - * requestTimestamp: string - * requestSign: string - * aopic: string - * sourceHost: string - * sourceIp: string - * userAgent: string - * createdAt: string - * headers?: Record - * query?: Record - * body?: Record - * payload?: Record - * }} AdminWebhookEventListItem - */ - -/** - * @typedef {{ - * skuCode: string - * credentialType: string - * inventoryGroupCode: string - * totalCount: number - * availableCount: number - * latestUpdatedAt: string | null - * }} AdminInventorySkuSuggestion - */ - -/** - * @typedef {{ - * page: number - * pageSize: number - * total: number - * }} AdminPagination - */ - -/** - * @typedef {{ - * items: AdminOrderListItem[] - * pagination: AdminPagination - * }} AdminOrderListResponse - */ - -/** - * @typedef {{ - * items: AdminTaskListItem[] - * pagination: AdminPagination - * }} AdminTaskListResponse - */ - -/** - * @typedef {{ - * items: AdminInventoryItemListItem[] - * pagination: AdminPagination - * }} AdminInventoryListResponse - */ - -/** - * @typedef {{ - * items: AdminWebhookEventListItem[] - * pagination: AdminPagination - * }} AdminWebhookEventListResponse - */ - -/** - * @typedef {{ - * items: AdminInventorySkuSuggestion[] - * }} AdminInventorySkuSuggestionResponse - */ diff --git a/apps/backend/src/types/admin-read-models.ts b/apps/backend/src/types/admin-read-models.ts new file mode 100644 index 00000000..582597f1 --- /dev/null +++ b/apps/backend/src/types/admin-read-models.ts @@ -0,0 +1,176 @@ +export type AdminTaskBindingSummary = { + totalBindingCount: number + reservedBindingCount: number + consumedBindingCount: number + releasedBindingCount: number + roleKeys: string[] +} + +export type AdminAgisoAutoDeliveryStatus = { + status: string + trigger: string + reason: string + platformOrderId: string + responseStatus: number + errorMessage: string + requestId: string + updatedAt: string | null +} + +export type AdminOrderListItem = { + orderId: number + provider: string + platform: string + shopId: string + shopName: string + platformOrderId: string + orderStatus: string + payStatus: string + buyerId: string + buyerName: string + receiverContact: string + totalAmount: string + totalAmountFen: number + currency: string + paidAt: string | null + createdAt: string + updatedAt: string + itemCount: number + totalQuantity: number + itemSummary: string + taskCount: number + systemBindingStatus: string + userBindingStatus: string + systemBoundTaskCount: number + completedBindingTaskCount: number + totalBindingCount: number + reservedBindingCount: number + consumedBindingCount: number + releasedBindingCount: number +} + +export type AdminTaskListItem = { + taskId: number + taskNo: string + platformOrderId: string + skuCode: string + skuName: string + status: string + executorKey: string + deliveryStatus: string + resultCode: string + resultMessage: string + systemBindingStatus: string + userBindingStatus: string + loginType: string + roleName: string + roleId: string + browserSessionId: string + claimedAt: string | null + roleConfirmedAt: string | null + redeemedAt: string | null + retryCount: number + bindingSummary: AdminTaskBindingSummary + lastError: string + createdAt: string + updatedAt: string + inventoryDisplayMasked: string + inventoryCredentialType: string + claimToken: string + screenshotPath: string + agisoAutoDelivery: AdminAgisoAutoDeliveryStatus | null +} + +export type AdminInventoryItemListItem = { + inventoryItemId: number + skuCode: string + batchNo: string + credentialType: string + inventoryGroupCode: string + displayValue: string + status: string + reservedByTaskId: number | null + reservedByTaskNo: string + platformOrderId: string + systemBindingStatus: string + userBindingStatus: string + invalidReason: string + deliveredAt: string | null + createdAt: string + updatedAt: string +} + +export type AdminWebhookEventListItem = { + eventId: number + provider: string + platform: string + platformRaw: string + shopId: string + shopName: string + eventType: string + eventKey: string + signatureValid: boolean + processed: boolean + processError: string + visibilityLevel: string + relatedOrderId: number | null + platformOrderId: string + buyerId: string + buyerName: string + totalAmount: string + totalAmountFen: number + currency: string + itemCount: number + taskCount: number + messageText: string + requestTimestamp: string + requestSign: string + aopic: string + sourceHost: string + sourceIp: string + userAgent: string + createdAt: string + headers?: Record + query?: Record + body?: Record + payload?: Record +} + +export type AdminInventorySkuSuggestion = { + skuCode: string + credentialType: string + inventoryGroupCode: string + totalCount: number + availableCount: number + latestUpdatedAt: string | null +} + +export type AdminPagination = { + page: number + pageSize: number + total: number +} + +export type AdminOrderListResponse = { + items: AdminOrderListItem[] + pagination: AdminPagination +} + +export type AdminTaskListResponse = { + items: AdminTaskListItem[] + pagination: AdminPagination +} + +export type AdminInventoryListResponse = { + items: AdminInventoryItemListItem[] + pagination: AdminPagination +} + +export type AdminWebhookEventListResponse = { + items: AdminWebhookEventListItem[] + pagination: AdminPagination +} + +export type AdminInventorySkuSuggestionResponse = { + items: AdminInventorySkuSuggestion[] +} diff --git a/apps/backend/src/types/admin-route-inputs.js b/apps/backend/src/types/admin-route-inputs.js deleted file mode 100644 index 86f495be..00000000 --- a/apps/backend/src/types/admin-route-inputs.js +++ /dev/null @@ -1,167 +0,0 @@ -// @ts-check - -export {}; - -/** - * @typedef {import('./admin-read-inputs.js').AdminInventoryListQueryInput} AdminInventoryRouteQuery - */ - -/** - * @typedef {import('./admin-read-inputs.js').AdminInventorySkuSuggestionQueryInput} AdminInventorySkuSuggestionRouteQuery - */ - -/** - * @typedef {import('./admin-read-inputs.js').AdminMessageDeliveryListQueryInput} AdminMessageDeliveryRouteQuery - */ - -/** - * @typedef {import('./admin-read-inputs.js').AdminOrderListQueryInput} AdminOrderRouteQuery - */ - -/** - * @typedef {import('./admin-read-inputs.js').AdminTaskListQueryInput} AdminTaskRouteQuery - */ - -/** - * @typedef {import('./admin-read-inputs.js').AdminViewerSessionInput} AdminRouteAdminSession - */ - -/** - * @typedef {import('./admin-read-inputs.js').AdminWebhookEventListQueryInput} AdminWebhookEventRouteQuery - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminKuaishouEticketSourceConfigInput} AdminKuaishouEticketSourceConfigRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminNotificationConfigInput} AdminNotificationConfigRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminNotificationTestInput} AdminNotificationTestRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminScheduledJobsConfigInput} AdminScheduledJobsConfigRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminAgisoShopConfigSaveInput} AdminAgisoShopConfigRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminKuaishouEticketDetailQueryInput} AdminKuaishouEticketDetailQueryRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminKuaishouEticketConsumeInput} AdminKuaishouEticketConsumeRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminKuaishouEticketShopInfoInput} AdminKuaishouEticketShopInfoRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesSourceConfigInput} AdminCloudtentaclesSourceConfigRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminKuaishouCloudFulfillmentConfigInput} AdminKuaishouCloudFulfillmentConfigRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesSendSmsCodeInput} AdminCloudtentaclesSendSmsCodeRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesTestLoginInput} AdminCloudtentaclesTestLoginRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesValidateSessionInput} AdminCloudtentaclesValidateSessionRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesCatalogQueryInput} AdminCloudtentaclesCatalogQueryRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesSkuBuyInput} AdminCloudtentaclesSkuBuyRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesSkuUseInput} AdminCloudtentaclesSkuUseRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesVirtualNumberInput} AdminCloudtentaclesVirtualNumberRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminCloudtentaclesFullFlowInput} AdminCloudtentaclesFullFlowRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminFulfillmentBindingConfigSaveInput} AdminFulfillmentBindingConfigRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminFulfillmentBindingLookupInput} AdminFulfillmentBindingLookupRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminInventoryCreateInput} AdminInventoryCreateRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminInventoryImportInput} AdminInventoryImportRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminInventoryInvalidateInput} AdminInventoryInvalidateRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminUserInventoryGroupsInput} AdminUserInventoryGroupsRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminTaskManualDispatchInput} AdminTaskManualDispatchRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminTaskKuaishouCloudDispatchInput} AdminTaskKuaishouCloudDispatchRouteBody - */ - -/** - * @typedef {import('./admin-write-inputs.js').AdminManualRedeemCreateInput} AdminManualRedeemCreateRouteBody - */ - -/** - * @typedef {{ inventoryItemId?: string }} AdminInventoryRouteParams - */ - -/** - * @typedef {{ orderId?: string }} AdminOrderRouteParams - */ - -/** - * @typedef {{ taskId?: string, bindingId?: string }} AdminTaskRouteParams - */ - -/** - * @typedef {{ taskId?: string }} AdminManualRedeemRouteParams - */ - -/** - * @typedef {{ eventId?: string }} AdminWebhookEventRouteParams - */ - -/** - * @typedef {{ id?: string }} AdminEntityRouteParams - */ - -/** - * @typedef {{ sourceKey?: string }} AdminCloudtentaclesSourceRouteParams - */ diff --git a/apps/backend/src/types/admin-route-inputs.ts b/apps/backend/src/types/admin-route-inputs.ts new file mode 100644 index 00000000..328ee9be --- /dev/null +++ b/apps/backend/src/types/admin-route-inputs.ts @@ -0,0 +1,82 @@ +import type { + AdminInventoryListQueryInput, + AdminInventorySkuSuggestionQueryInput, + AdminMessageDeliveryListQueryInput, + AdminOrderListQueryInput, + AdminTaskListQueryInput, + AdminViewerSessionInput, + AdminWebhookEventListQueryInput, +} from './admin-read-inputs.js' +import type { + AdminAgisoShopConfigSaveInput, + AdminCloudtentaclesCatalogQueryInput, + AdminCloudtentaclesFullFlowInput, + AdminCloudtentaclesSendSmsCodeInput, + AdminCloudtentaclesSkuBuyInput, + AdminCloudtentaclesSkuUseInput, + AdminCloudtentaclesSourceConfigInput, + AdminCloudtentaclesTestLoginInput, + AdminCloudtentaclesValidateSessionInput, + AdminCloudtentaclesVirtualNumberInput, + AdminFulfillmentBindingConfigSaveInput, + AdminFulfillmentBindingLookupInput, + AdminInventoryCreateInput, + AdminInventoryImportInput, + AdminInventoryInvalidateInput, + AdminKuaishouCloudFulfillmentConfigInput, + AdminKuaishouEticketConsumeInput, + AdminKuaishouEticketDetailQueryInput, + AdminKuaishouEticketShopInfoInput, + AdminKuaishouEticketSourceConfigInput, + AdminManualRedeemCreateInput, + AdminNotificationConfigInput, + AdminNotificationTestInput, + AdminScheduledJobsConfigInput, + AdminTaskKuaishouCloudDispatchInput, + AdminTaskManualDispatchInput, + AdminUserInventoryGroupsInput, +} from './admin-write-inputs.js' + +export type AdminInventoryRouteQuery = AdminInventoryListQueryInput +export type AdminInventorySkuSuggestionRouteQuery = AdminInventorySkuSuggestionQueryInput +export type AdminMessageDeliveryRouteQuery = AdminMessageDeliveryListQueryInput +export type AdminOrderRouteQuery = AdminOrderListQueryInput +export type AdminTaskRouteQuery = AdminTaskListQueryInput +export type AdminRouteAdminSession = AdminViewerSessionInput +export type AdminWebhookEventRouteQuery = AdminWebhookEventListQueryInput + +export type AdminKuaishouEticketSourceConfigRouteBody = AdminKuaishouEticketSourceConfigInput +export type AdminNotificationConfigRouteBody = AdminNotificationConfigInput +export type AdminNotificationTestRouteBody = AdminNotificationTestInput +export type AdminScheduledJobsConfigRouteBody = AdminScheduledJobsConfigInput +export type AdminAgisoShopConfigRouteBody = AdminAgisoShopConfigSaveInput +export type AdminKuaishouEticketDetailQueryRouteBody = AdminKuaishouEticketDetailQueryInput +export type AdminKuaishouEticketConsumeRouteBody = AdminKuaishouEticketConsumeInput +export type AdminKuaishouEticketShopInfoRouteBody = AdminKuaishouEticketShopInfoInput +export type AdminCloudtentaclesSourceConfigRouteBody = AdminCloudtentaclesSourceConfigInput +export type AdminKuaishouCloudFulfillmentConfigRouteBody = AdminKuaishouCloudFulfillmentConfigInput +export type AdminCloudtentaclesSendSmsCodeRouteBody = AdminCloudtentaclesSendSmsCodeInput +export type AdminCloudtentaclesTestLoginRouteBody = AdminCloudtentaclesTestLoginInput +export type AdminCloudtentaclesValidateSessionRouteBody = AdminCloudtentaclesValidateSessionInput +export type AdminCloudtentaclesCatalogQueryRouteBody = AdminCloudtentaclesCatalogQueryInput +export type AdminCloudtentaclesSkuBuyRouteBody = AdminCloudtentaclesSkuBuyInput +export type AdminCloudtentaclesSkuUseRouteBody = AdminCloudtentaclesSkuUseInput +export type AdminCloudtentaclesVirtualNumberRouteBody = AdminCloudtentaclesVirtualNumberInput +export type AdminCloudtentaclesFullFlowRouteBody = AdminCloudtentaclesFullFlowInput +export type AdminFulfillmentBindingConfigRouteBody = AdminFulfillmentBindingConfigSaveInput +export type AdminFulfillmentBindingLookupRouteBody = AdminFulfillmentBindingLookupInput +export type AdminInventoryCreateRouteBody = AdminInventoryCreateInput +export type AdminInventoryImportRouteBody = AdminInventoryImportInput +export type AdminInventoryInvalidateRouteBody = AdminInventoryInvalidateInput +export type AdminUserInventoryGroupsRouteBody = AdminUserInventoryGroupsInput +export type AdminTaskManualDispatchRouteBody = AdminTaskManualDispatchInput +export type AdminTaskKuaishouCloudDispatchRouteBody = AdminTaskKuaishouCloudDispatchInput +export type AdminManualRedeemCreateRouteBody = AdminManualRedeemCreateInput + +export type AdminInventoryRouteParams = { inventoryItemId?: string } +export type AdminOrderRouteParams = { orderId?: string } +export type AdminTaskRouteParams = { taskId?: string, bindingId?: string } +export type AdminManualRedeemRouteParams = { taskId?: string } +export type AdminWebhookEventRouteParams = { eventId?: string } +export type AdminEntityRouteParams = { id?: string } +export type AdminCloudtentaclesSourceRouteParams = { sourceKey?: string } diff --git a/apps/backend/src/types/admin-write-inputs.js b/apps/backend/src/types/admin-write-inputs.js deleted file mode 100644 index 65b80aae..00000000 --- a/apps/backend/src/types/admin-write-inputs.js +++ /dev/null @@ -1,378 +0,0 @@ -// @ts-check - -export {}; - -/** - * @typedef {{ - * skuCode?: string - * displayValue?: string - * batchNo?: string - * credentialType?: string - * inventoryGroupCode?: string - * }} AdminInventoryCreateInput - */ - -/** - * @typedef {{ - * skuCode?: string - * displayValue?: string - * batchNo?: string - * credentialType?: string - * inventoryGroupCode?: string - * }} AdminInventoryImportRowInput - */ - -/** - * @typedef {{ - * rows?: AdminInventoryImportRowInput[] - * codes?: unknown[] - * skuCode?: string - * batchNo?: string - * credentialType?: string - * inventoryGroupCode?: string - * }} AdminInventoryImportInput - */ - -/** - * @typedef {{ - * inventoryGroupCodes?: string[] - * }} AdminUserInventoryGroupsInput - */ - -/** - * @typedef {{ - * messageTemplate?: string - * autoDeliveryMessageTemplate?: string - * }} AdminAgisoMessagingDefaultsInput - */ - -/** - * @typedef {{ - * shopId?: string - * shopName?: string - * accessToken?: string - * enabled?: boolean | null - * messageTemplate?: string - * autoDeliveryMessageTemplate?: string - * appSecret?: string - * apiVersion?: string - * sendMessageEndpoint?: string - * }} AdminAgisoShopConfigWriteItemInput - */ - -/** - * @typedef {{ - * defaults?: AdminAgisoMessagingDefaultsInput - * shops?: AdminAgisoShopConfigWriteItemInput[] - * }} AdminAgisoShopConfigSaveInput - */ - -/** - * @typedef {{ - * id?: string - * enabled?: boolean - * priority?: number | string - * provider?: string - * platform?: string - * shopId?: string - * internalSkuCode?: string - * internalSkuName?: string - * externalSkuCode?: string - * externalItemId?: string - * externalSkuName?: string - * resolvedSkuName?: string - * cloudSourceKey?: string - * cloudSourceKeyFallbacks?: string[] - * cloudSkuId?: number | string - * cloudSkuName?: string - * vnKey?: string - * autoBuyEnabled?: boolean - * minAssetReserve?: number | string - * autoReturnNumberAfterDispatch?: boolean - * autoConsumeAfterDispatch?: boolean - * kuaishouConsumeShopId?: string - * kuaishouConsumeShopName?: string - * notes?: string - * }} AdminKuaishouCloudFulfillmentItemInput - */ - -/** - * @typedef {{ - * enabled?: boolean - * items?: AdminKuaishouCloudFulfillmentItemInput[] - * }} AdminKuaishouCloudFulfillmentConfigInput - */ - -/** - * @typedef {{ - * shopId?: string - * kshopName?: string - * cookie?: string - * userAvatar?: string - * enabled?: boolean - * }} AdminKuaishouEticketShopConfigWriteItemInput - */ - -/** - * @typedef {{ - * enabled?: boolean - * baseUrl?: string - * shops?: AdminKuaishouEticketShopConfigWriteItemInput[] - * }} AdminKuaishouEticketSourceConfigInput - */ - -/** - * @typedef {{ - * id?: string - * name?: string - * deviceKey?: string - * enabled?: boolean - * }} AdminNotificationBarkRecipientInput - */ - -/** - * @typedef {{ - * enabled?: boolean - * channels?: { - * bark?: { - * enabled?: boolean - * serverUrl?: string - * recipients?: AdminNotificationBarkRecipientInput[] - * } - * } - * }} AdminNotificationConfigInput - */ - -/** - * @typedef {{ - * title?: string - * body?: string - * url?: string - * }} AdminNotificationTestInput - */ - -/** - * @typedef {{ - * id?: string - * type?: string - * enabled?: boolean - * intervalSeconds?: number | string - * cooldownSeconds?: number | string - * config?: { - * assetThreshold?: number | string - * } - * }} AdminScheduledJobInput - */ - -/** - * @typedef {{ - * enabled?: boolean - * jobs?: AdminScheduledJobInput[] - * }} AdminScheduledJobsConfigInput - */ - -/** - * @typedef {{ - * baseUrl?: string - * shopId?: string - * cookie?: string - * }} AdminKuaishouEticketShopInfoInput - */ - -/** - * @typedef {{ - * baseUrl?: string - * shopId?: string - * cookie?: string - * eTicketId?: string - * }} AdminKuaishouEticketDetailQueryInput - */ - -/** - * @typedef {{ - * baseUrl?: string - * shopId?: string - * cookie?: string - * eTicketId?: string - * oid?: string - * formToken?: string - * num?: number | string - * storeId?: string - * }} AdminKuaishouEticketConsumeInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * enabled?: boolean - * baseUrl?: string - * username?: string - * password?: string - * phone?: string - * deviceId?: string - * deviceType?: number | string - * sources?: AdminCloudtentaclesSourceConfigInput[] - * }} AdminCloudtentaclesSourceConfigInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * username?: string - * phone?: string - * deviceId?: string - * deviceType?: number | string - * }} AdminCloudtentaclesSendSmsCodeInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * username?: string - * password?: string - * phone?: string - * code?: string - * deviceId?: string - * deviceType?: number | string - * }} AdminCloudtentaclesTestLoginInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * token?: string - * deviceId?: string - * deviceType?: number | string - * }} AdminCloudtentaclesValidateSessionInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * token?: string - * deviceId?: string - * deviceType?: number | string - * }} AdminCloudtentaclesCatalogQueryInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * token?: string - * deviceId?: string - * deviceType?: number | string - * id?: number | string - * count?: number | string - * }} AdminCloudtentaclesSkuBuyInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * token?: string - * deviceId?: string - * deviceType?: number | string - * id?: number | string - * virtualNumberId?: number | string - * phone?: string - * }} AdminCloudtentaclesSkuUseInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * token?: string - * deviceId?: string - * deviceType?: number | string - * key?: string - * id?: number | string - * phone?: string - * code?: string - * }} AdminCloudtentaclesVirtualNumberInput - */ - -/** - * @typedef {{ - * sourceKey?: string - * baseUrl?: string - * token?: string - * deviceId?: string - * deviceType?: number | string - * skuId?: number | string - * skuCount?: number | string - * vnKey?: string - * }} AdminCloudtentaclesFullFlowInput - */ - -/** - * @typedef {{ - * provider?: string - * platform?: string - * shopId?: string - * platformOrderId?: string - * }} AdminFulfillmentBindingLookupInput - */ - -/** - * @typedef {{ - * provider?: string - * platform?: string - * shopId?: string - * shopName?: string - * skuCode?: string - * skuName?: string - * profileKey?: string - * enabled?: boolean - * priority?: number | string - * config?: Record - * match?: { - * externalSkuCode?: string - * externalItemId?: string - * externalSkuName?: string - * config?: Record - * } - * }} AdminFulfillmentBindingConfigWriteItemInput - */ - -/** - * @typedef {{ - * bindings?: AdminFulfillmentBindingConfigWriteItemInput[] - * }} AdminFulfillmentBindingConfigSaveInput - */ - -/** - * @typedef {{ - * reason?: string - * }} AdminInventoryInvalidateInput - */ - -/** - * @typedef {{ - * outcome?: string - * resultMessage?: string - * deliveryReference?: string - * deliveredCredential?: string - * }} AdminTaskManualDispatchInput - */ - -/** - * @typedef {{ - * ticketCode?: string - * }} AdminTaskKuaishouCloudDispatchInput - */ - -/** - * @typedef {{ - * proofValue?: string - * skuCode?: string - * skuName?: string - * remark?: string - * }} AdminManualRedeemCreateInput - */ diff --git a/apps/backend/src/types/admin-write-inputs.ts b/apps/backend/src/types/admin-write-inputs.ts new file mode 100644 index 00000000..86b04b7d --- /dev/null +++ b/apps/backend/src/types/admin-write-inputs.ts @@ -0,0 +1,304 @@ +export type AdminInventoryCreateInput = { + skuCode?: string + displayValue?: string + batchNo?: string + credentialType?: string + inventoryGroupCode?: string +} + +export type AdminInventoryImportRowInput = { + skuCode?: string + displayValue?: string + batchNo?: string + credentialType?: string + inventoryGroupCode?: string +} + +export type AdminInventoryImportInput = { + rows?: AdminInventoryImportRowInput[] + codes?: unknown[] + skuCode?: string + batchNo?: string + credentialType?: string + inventoryGroupCode?: string +} + +export type AdminUserInventoryGroupsInput = { + inventoryGroupCodes?: string[] +} + +export type AdminAgisoMessagingDefaultsInput = { + messageTemplate?: string + autoDeliveryMessageTemplate?: string +} + +export type AdminAgisoShopConfigWriteItemInput = { + shopId?: string + shopName?: string + accessToken?: string + enabled?: boolean | null + messageTemplate?: string + autoDeliveryMessageTemplate?: string + appSecret?: string + apiVersion?: string + sendMessageEndpoint?: string +} + +export type AdminAgisoShopConfigSaveInput = { + defaults?: AdminAgisoMessagingDefaultsInput + shops?: AdminAgisoShopConfigWriteItemInput[] +} + +export type AdminKuaishouCloudFulfillmentItemInput = { + id?: string + enabled?: boolean + priority?: number | string + provider?: string + platform?: string + shopId?: string + internalSkuCode?: string + internalSkuName?: string + externalSkuCode?: string + externalItemId?: string + externalSkuName?: string + resolvedSkuName?: string + cloudSourceKey?: string + cloudSourceKeyFallbacks?: string[] + cloudSkuId?: number | string + cloudSkuName?: string + vnKey?: string + autoBuyEnabled?: boolean + minAssetReserve?: number | string + autoReturnNumberAfterDispatch?: boolean + autoConsumeAfterDispatch?: boolean + kuaishouConsumeShopId?: string + kuaishouConsumeShopName?: string + notes?: string +} + +export type AdminKuaishouCloudFulfillmentConfigInput = { + enabled?: boolean + items?: AdminKuaishouCloudFulfillmentItemInput[] +} + +export type AdminKuaishouEticketShopConfigWriteItemInput = { + shopId?: string + kshopName?: string + cookie?: string + userAvatar?: string + enabled?: boolean +} + +export type AdminKuaishouEticketSourceConfigInput = { + enabled?: boolean + baseUrl?: string + shops?: AdminKuaishouEticketShopConfigWriteItemInput[] +} + +export type AdminNotificationBarkRecipientInput = { + id?: string + name?: string + deviceKey?: string + enabled?: boolean +} + +export type AdminNotificationConfigInput = { + enabled?: boolean + channels?: { + bark?: { + enabled?: boolean + serverUrl?: string + recipients?: AdminNotificationBarkRecipientInput[] + } + } +} + +export type AdminNotificationTestInput = { + title?: string + body?: string + url?: string +} + +export type AdminScheduledJobInput = { + id?: string + type?: string + enabled?: boolean + intervalSeconds?: number | string + cooldownSeconds?: number | string + config?: { + assetThreshold?: number | string + } +} + +export type AdminScheduledJobsConfigInput = { + enabled?: boolean + jobs?: AdminScheduledJobInput[] +} + +export type AdminKuaishouEticketShopInfoInput = { + baseUrl?: string + shopId?: string + cookie?: string +} + +export type AdminKuaishouEticketDetailQueryInput = { + baseUrl?: string + shopId?: string + cookie?: string + eTicketId?: string +} + +export type AdminKuaishouEticketConsumeInput = { + baseUrl?: string + shopId?: string + cookie?: string + eTicketId?: string + oid?: string + formToken?: string + num?: number | string + storeId?: string +} + +export type AdminCloudtentaclesSourceConfigInput = { + sourceKey?: string + enabled?: boolean + baseUrl?: string + username?: string + password?: string + phone?: string + deviceId?: string + deviceType?: number | string + sources?: AdminCloudtentaclesSourceConfigInput[] +} + +export type AdminCloudtentaclesSendSmsCodeInput = { + sourceKey?: string + baseUrl?: string + username?: string + phone?: string + deviceId?: string + deviceType?: number | string +} + +export type AdminCloudtentaclesTestLoginInput = { + sourceKey?: string + baseUrl?: string + username?: string + password?: string + phone?: string + code?: string + deviceId?: string + deviceType?: number | string +} + +export type AdminCloudtentaclesValidateSessionInput = { + sourceKey?: string + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number | string +} + +export type AdminCloudtentaclesCatalogQueryInput = { + sourceKey?: string + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number | string +} + +export type AdminCloudtentaclesSkuBuyInput = { + sourceKey?: string + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number | string + id?: number | string + count?: number | string +} + +export type AdminCloudtentaclesSkuUseInput = { + sourceKey?: string + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number | string + id?: number | string + virtualNumberId?: number | string + phone?: string +} + +export type AdminCloudtentaclesVirtualNumberInput = { + sourceKey?: string + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number | string + key?: string + id?: number | string + phone?: string + code?: string +} + +export type AdminCloudtentaclesFullFlowInput = { + sourceKey?: string + baseUrl?: string + token?: string + deviceId?: string + deviceType?: number | string + skuId?: number | string + skuCount?: number | string + vnKey?: string +} + +export type AdminFulfillmentBindingLookupInput = { + provider?: string + platform?: string + shopId?: string + platformOrderId?: string +} + +export type AdminFulfillmentBindingConfigWriteItemInput = { + provider?: string + platform?: string + shopId?: string + shopName?: string + skuCode?: string + skuName?: string + profileKey?: string + enabled?: boolean + priority?: number | string + config?: Record + match?: { + externalSkuCode?: string + externalItemId?: string + externalSkuName?: string + config?: Record + } +} + +export type AdminFulfillmentBindingConfigSaveInput = { + bindings?: AdminFulfillmentBindingConfigWriteItemInput[] +} + +export type AdminInventoryInvalidateInput = { + reason?: string +} + +export type AdminTaskManualDispatchInput = { + outcome?: string + resultMessage?: string + deliveryReference?: string + deliveredCredential?: string +} + +export type AdminTaskKuaishouCloudDispatchInput = { + ticketCode?: string +} + +export type AdminManualRedeemCreateInput = { + proofValue?: string + skuCode?: string + skuName?: string + remark?: string +} diff --git a/apps/backend/src/types/admin-write-models.js b/apps/backend/src/types/admin-write-models.js deleted file mode 100644 index be10859f..00000000 --- a/apps/backend/src/types/admin-write-models.js +++ /dev/null @@ -1,109 +0,0 @@ -// @ts-check - -export {} - -/** - * @typedef {import('./admin-read-models.js').AdminInventoryItemListItem} AdminInventoryItemListItem - */ - -/** - * @typedef {import('./admin-read-models.js').AdminInventorySkuSuggestion} AdminInventorySkuSuggestion - */ - -/** - * @typedef {{ - * inventoryItem: AdminInventoryItemListItem | null - * }} AdminInventoryMutationResponse - */ - -/** - * @typedef {{ - * total: number - * created: number - * duplicated: number - * }} AdminInventoryImportResponse - */ - -/** - * @typedef {{ - * items: AdminInventorySkuSuggestion[] - * }} AdminInventoryGroupListResponse - */ - -/** - * @typedef {{ - * messageTemplate: string - * autoDeliveryMessageTemplate: string - * }} AdminAgisoMessagingDefaults - */ - -/** - * @typedef {{ - * shopId: string - * shopName: string - * accessToken: string - * accessTokenMasked: string - * enabled: boolean | null - * messageTemplate: string - * autoDeliveryMessageTemplate: string - * appSecretConfigured: boolean - * apiVersion: string - * sendMessageEndpoint: string - * }} AdminAgisoShopConfigItem - */ - -/** - * @typedef {{ - * filePath: string - * defaults: AdminAgisoMessagingDefaults - * shops: AdminAgisoShopConfigItem[] - * }} AdminAgisoShopConfigSaveResponse - */ - -/** - * @typedef {{ - * eventId: number - * replayed: boolean - * result: unknown - * }} AdminWebhookReplayResponse - */ - -/** - * @typedef {{ - * taskId: number - * taskNo: string - * status: string - * deliveryStatus: string - * resultCode: string - * resultMessage: string - * inventoryItemId: number | null - * primaryClaimTokenId: number | null - * lastError: string - * updatedAt: string - * }} AdminTaskActionPayload - */ - -/** - * @typedef {{ - * task: AdminTaskActionPayload - * claimUrl?: string - * token?: string - * }} AdminTaskActionResponse - */ - -/** - * @typedef {AdminTaskActionResponse & { - * bindingId: number - * inventoryItemId: number - * }} AdminTaskBindingReleaseResponse - */ - -/** - * @typedef {'delivered' | 'failed'} AdminManualDispatchOutcome - */ - -/** - * @typedef {AdminTaskActionResponse & { - * outcome: AdminManualDispatchOutcome - * }} AdminTaskManualDispatchResponse - */ diff --git a/apps/backend/src/types/admin-write-models.ts b/apps/backend/src/types/admin-write-models.ts new file mode 100644 index 00000000..674d86ad --- /dev/null +++ b/apps/backend/src/types/admin-write-models.ts @@ -0,0 +1,80 @@ +import type { + AdminInventoryItemListItem, + AdminInventorySkuSuggestion, +} from './admin-read-models.js' + +export type { AdminInventoryItemListItem, AdminInventorySkuSuggestion } + +export type AdminInventoryMutationResponse = { + inventoryItem: AdminInventoryItemListItem | null +} + +export type AdminInventoryImportResponse = { + total: number + created: number + duplicated: number +} + +export type AdminInventoryGroupListResponse = { + items: AdminInventorySkuSuggestion[] +} + +export type AdminAgisoMessagingDefaults = { + messageTemplate: string + autoDeliveryMessageTemplate: string +} + +export type AdminAgisoShopConfigItem = { + shopId: string + shopName: string + accessToken: string + accessTokenMasked: string + enabled: boolean | null + messageTemplate: string + autoDeliveryMessageTemplate: string + appSecretConfigured: boolean + apiVersion: string + sendMessageEndpoint: string +} + +export type AdminAgisoShopConfigSaveResponse = { + filePath: string + defaults: AdminAgisoMessagingDefaults + shops: AdminAgisoShopConfigItem[] +} + +export type AdminWebhookReplayResponse = { + eventId: number + replayed: boolean + result: unknown +} + +export type AdminTaskActionPayload = { + taskId: number + taskNo: string + status: string + deliveryStatus: string + resultCode: string + resultMessage: string + inventoryItemId: number | null + primaryClaimTokenId: number | null + lastError: string + updatedAt: string +} + +export type AdminTaskActionResponse = { + task: AdminTaskActionPayload + claimUrl?: string + token?: string +} + +export type AdminTaskBindingReleaseResponse = AdminTaskActionResponse & { + bindingId: number + inventoryItemId: number +} + +export type AdminManualDispatchOutcome = 'delivered' | 'failed' + +export type AdminTaskManualDispatchResponse = AdminTaskActionResponse & { + outcome: AdminManualDispatchOutcome +} diff --git a/apps/backend/src/types/repository-inputs.js b/apps/backend/src/types/repository-inputs.js deleted file mode 100644 index 8713499f..00000000 --- a/apps/backend/src/types/repository-inputs.js +++ /dev/null @@ -1,231 +0,0 @@ -// @ts-check - -export {} - -/** - * @typedef {{ - * page?: number - * pageSize?: number - * platformOrderId?: string - * payStatus?: string - * skuCode?: string - * dateFrom?: string - * dateTo?: string - * }} OrderListQueryInput - */ - -/** - * @typedef {{ - * provider: string - * platform: string - * shopId?: string - * shopName?: string - * platformOrderId: string - * orderStatus: string - * payStatus: string - * buyerId: string - * buyerName: string - * receiverContact: string - * totalAmount: number | string - * currency: string - * rawPayloadJson?: string | Record - * paidAt?: string | null - * }} OrderWriteInputBase - */ - -/** - * @typedef {OrderWriteInputBase & { - * createdAt: string - * updatedAt: string - * }} OrderCreateInput - */ - -/** - * @typedef {OrderWriteInputBase & { - * updatedAt: string - * createdAt?: string - * }} OrderUpdateInput - */ - -/** - * @typedef {{ - * skuCode: string - * skuName: string - * quantity: number - * specJson?: string | Record - * itemSnapshotJson?: string | Record - * createdAt: string - * updatedAt: string - * }} OrderItemReplaceInput - */ - -/** - * @typedef {{ - * page?: number - * pageSize?: number - * status?: string - * platformOrderId?: string - * taskNo?: string - * skuCode?: string - * roleId?: string - * dateFrom?: string - * dateTo?: string - * }} TaskListQueryInput - */ - -/** - * @typedef {{ - * browserSessionId?: string - * loginType?: string - * nickname?: string - * roleId?: string - * roleName?: string - * area?: string - * partitionName?: string - * screenshotPath?: string - * artifactsJson?: string | Record - * stateJson?: string | Record - * }} TaskTencentContextPatch - */ - -/** - * @typedef {{ - * orderId: number - * orderItemId: number - * unitIndex: number - * taskNo: string - * provider: string - * platform: string - * shopId?: string - * shopName?: string - * platformOrderId: string - * profileId: number | string - * executorKey: string - * taskStatus?: string - * inventoryStatus?: string - * deliveryStatus?: string - * resultCode?: string - * resultMessage?: string - * claimToken?: string - * claimExpiresAt?: string | null - * automationMode?: string - * requiresClaim?: boolean - * userActionStatus?: string - * attemptCount?: number - * lastError?: string - * contextJson?: string | Record - * createdAt: string - * updatedAt: string - * tencentContext?: TaskTencentContextPatch - * }} TaskCreateInput - */ - -/** - * @typedef {{ - * task_status?: string - * inventory_status?: string - * delivery_status?: string - * result_code?: string - * result_message?: string - * claim_token?: string - * claim_expires_at?: string | null - * automation_mode?: string - * requires_claim?: boolean - * user_action_status?: string - * attempt_count?: number - * last_error?: string - * context_json?: string | Record - * claimed_at?: string | null - * role_confirmed_at?: string | null - * redeemed_at?: string | null - * updated_at?: string - * browser_session_id?: string - * login_type?: string - * nickname?: string - * role_id?: string - * role_name?: string - * area?: string - * partition_name?: string - * screenshot_path?: string - * artifacts_json?: string | Record - * state_json?: string | Record - * }} TaskUpdatePatch - */ - -/** - * @typedef {{ - * page?: number - * pageSize?: number - * skuCode?: string - * credentialType?: string - * status?: string - * batchNo?: string - * inventoryGroupCode?: string - * allowedInventoryGroupCodes?: string[] | null - * }} InventoryListQueryInput - */ - -/** - * @typedef {{ - * credentialType?: string - * keyword?: string - * limit?: number - * inventoryGroupCode?: string - * allowedInventoryGroupCodes?: string[] | null - * }} InventorySkuSuggestionQueryInput - */ - -/** - * @typedef {{ - * batchNo?: string - * skuCode: string - * credentialType?: string - * inventoryGroupCode?: string - * displayValue: string - * payload?: Record - * createdAt: string - * updatedAt: string - * }} InventoryCreateItemInput - */ - -/** - * @typedef {{ - * page?: number - * pageSize?: number - * provider?: string - * platform?: string - * platformOrderId?: string - * processed?: string - * visibility?: string - * relatedOrderId?: string - * dateFrom?: string - * dateTo?: string - * }} WebhookEventListQueryInput - */ - -/** - * @typedef {{ - * provider: string - * platform: string - * shopId?: string - * shopName?: string - * eventType: string - * eventKey: string - * signatureValid?: boolean - * headersJson?: string | Record - * queryJson?: string | Record - * bodyJson?: string | Record - * processed?: boolean - * processError?: string - * relatedOrderId?: number | null - * createdAt: string - * }} WebhookEventCreateInput - */ - -/** - * @typedef {{ - * processed?: boolean - * process_error?: string - * related_order_id?: number | null - * }} WebhookEventUpdatePatch - */ diff --git a/apps/backend/src/types/repository-inputs.ts b/apps/backend/src/types/repository-inputs.ts new file mode 100644 index 00000000..0cec63d6 --- /dev/null +++ b/apps/backend/src/types/repository-inputs.ts @@ -0,0 +1,197 @@ +export type OrderListQueryInput = { + page?: number + pageSize?: number + platformOrderId?: string + payStatus?: string + skuCode?: string + dateFrom?: string + dateTo?: string +} + +export type OrderWriteInputBase = { + provider: string + platform: string + shopId?: string + shopName?: string + platformOrderId: string + orderStatus: string + payStatus: string + buyerId: string + buyerName: string + receiverContact: string + totalAmount: number | string + currency: string + rawPayloadJson?: string | Record + paidAt?: string | null +} + +export type OrderCreateInput = OrderWriteInputBase & { + createdAt: string + updatedAt: string +} + +export type OrderUpdateInput = OrderWriteInputBase & { + updatedAt: string + createdAt?: string +} + +export type OrderItemReplaceInput = { + skuCode: string + skuName: string + quantity: number + specJson?: string | Record + itemSnapshotJson?: string | Record + createdAt: string + updatedAt: string +} + +export type TaskListQueryInput = { + page?: number + pageSize?: number + status?: string + platformOrderId?: string + taskNo?: string + skuCode?: string + roleId?: string + dateFrom?: string + dateTo?: string +} + +export type TaskTencentContextPatch = { + browserSessionId?: string + loginType?: string + nickname?: string + roleId?: string + roleName?: string + area?: string + partitionName?: string + screenshotPath?: string + artifactsJson?: string | Record + stateJson?: string | Record +} + +export type TaskCreateInput = { + orderId: number + orderItemId: number + unitIndex: number + taskNo: string + provider: string + platform: string + shopId?: string + shopName?: string + platformOrderId: string + profileId: number | string + executorKey: string + taskStatus?: string + inventoryStatus?: string + deliveryStatus?: string + resultCode?: string + resultMessage?: string + claimToken?: string + claimExpiresAt?: string | null + automationMode?: string + requiresClaim?: boolean + userActionStatus?: string + attemptCount?: number + lastError?: string + contextJson?: string | Record + createdAt: string + updatedAt: string + tencentContext?: TaskTencentContextPatch +} + +export type TaskUpdatePatch = { + task_status?: string + inventory_status?: string + delivery_status?: string + result_code?: string + result_message?: string + claim_token?: string + claim_expires_at?: string | null + automation_mode?: string + requires_claim?: boolean + user_action_status?: string + attempt_count?: number + last_error?: string + context_json?: string | Record + claimed_at?: string | null + role_confirmed_at?: string | null + redeemed_at?: string | null + updated_at?: string + browser_session_id?: string + login_type?: string + nickname?: string + role_id?: string + role_name?: string + area?: string + partition_name?: string + screenshot_path?: string + artifacts_json?: string | Record + state_json?: string | Record +} + +export type InventoryListQueryInput = { + page?: number + pageSize?: number + skuCode?: string + credentialType?: string + status?: string + batchNo?: string + inventoryGroupCode?: string + allowedInventoryGroupCodes?: string[] | null +} + +export type InventorySkuSuggestionQueryInput = { + credentialType?: string + keyword?: string + limit?: number + inventoryGroupCode?: string + allowedInventoryGroupCodes?: string[] | null +} + +export type InventoryCreateItemInput = { + batchNo?: string + skuCode: string + credentialType?: string + inventoryGroupCode?: string + displayValue: string + payload?: Record + createdAt: string + updatedAt: string +} + +export type WebhookEventListQueryInput = { + page?: number + pageSize?: number + provider?: string + platform?: string + platformOrderId?: string + processed?: string + visibility?: string + relatedOrderId?: string + dateFrom?: string + dateTo?: string +} + +export type WebhookEventCreateInput = { + provider: string + platform: string + shopId?: string + shopName?: string + eventType: string + eventKey: string + signatureValid?: boolean + headersJson?: string | Record + queryJson?: string | Record + bodyJson?: string | Record + processed?: boolean + processError?: string + relatedOrderId?: number | null + createdAt: string +} + +export type WebhookEventUpdatePatch = { + processed?: boolean + process_error?: string + related_order_id?: number | null +} diff --git a/apps/backend/src/types/repository-rows.js b/apps/backend/src/types/repository-rows.js deleted file mode 100644 index f7502e08..00000000 --- a/apps/backend/src/types/repository-rows.js +++ /dev/null @@ -1,220 +0,0 @@ -// @ts-check - -export {} - -/** - * @typedef {{ - * id: number - * provider: string - * platform: string - * shop_id: string - * shop_name: string - * platform_order_id: string - * order_status: string - * pay_status: string - * buyer_id: string - * buyer_name: string - * receiver_contact: string - * total_amount: number | string - * currency: string - * raw_payload_json: string | Record - * paid_at: string | null - * created_at: string - * updated_at: string - * }} OrderRow - */ - -/** - * @typedef {OrderRow & { - * task_count?: number - * }} OrderListRow - */ - -/** - * @typedef {{ - * id: number - * order_id: number - * sku_code: string - * sku_name: string - * quantity: number - * spec_json: string | Record - * item_snapshot_json?: string | Record - * created_at?: string - * updated_at?: string - * }} OrderItemRow - */ - -/** - * @typedef {{ - * id: number - * order_id: number - * order_item_id: number - * platform_order_id: string - * task_no: string - * executor_key: string - * task_status: string - * delivery_status: string - * result_code: string - * result_message: string - * inventory_status: string - * user_action_status: string - * browser_session_id: string - * login_type: string - * role_name: string - * role_id: string - * claim_token: string - * claim_expires_at?: string | null - * primary_claim_token: string - * primary_claim_token_id: number | null - * primary_claim_expires_at?: string | null - * primary_inventory_item_id: number | null - * inventory_display_value: string - * primary_inventory_display_value: string - * inventory_credential_type?: string - * primary_inventory_credential_type?: string - * artifacts_json: string | Record - * context_json: string | Record - * screenshot_path: string - * last_error: string - * retry_count: number - * created_at: string - * updated_at: string - * claimed_at: string | null - * role_confirmed_at: string | null - * redeemed_at: string | null - * sku_code?: string - * sku_name?: string - * }} TaskRow - */ - -/** - * @typedef {{ - * id: number - * sku_code: string - * batch_no: string - * credential_type: string - * inventory_group_code: string - * display_value: string - * status: string - * invalid_reason: string - * delivered_at: string | null - * created_at: string - * updated_at: string - * reserved_by_task_id: number | null - * reserved_by_task_no: string - * platform_order_id: string - * }} InventoryItemRow - */ - -/** - * @typedef {{ - * sku_code: string - * credential_type: string - * inventory_group_code: string - * total_count: number - * available_count: number - * latest_updated_at: string | null - * }} InventorySkuSuggestionRow - */ - -/** - * @typedef {{ - * id: number - * provider: string - * platform: string - * shop_id: string - * shop_name: string - * event_type: string - * event_key: string - * signature_valid: boolean - * headers_json: string | Record - * query_json: string | Record - * body_json: string | Record - * processed: boolean - * process_error: string - * related_order_id: number | null - * created_at: string - * }} WebhookEventRow - */ - -/** - * @typedef {{ - * id: number - * task_id: number - * inventory_item_id: number - * role_key: string - * quantity: number - * binding_status: string - * metadata_json: string | Record - * invalid_reason: string - * consumed_at: string | null - * released_at: string | null - * created_at: string - * updated_at: string - * sku_code: string - * batch_no: string - * credential_type: string - * inventory_group_code: string - * display_value: string - * inventory_status: string - * }} TaskInventoryBindingRow - */ - -/** - * @typedef {{ - * task_id: number - * total_binding_count: number - * reserved_binding_count: number - * consumed_binding_count: number - * released_binding_count: number - * role_keys: string[] - * }} TaskInventoryBindingSummaryRow - */ - -/** - * @typedef {{ - * id: number - * token: string - * status: string - * expired_at: string - * created_at?: string - * updated_at?: string - * }} ClaimTokenRow - */ - -/** - * @typedef {{ - * id: number - * event_type: string - * payload_json: string | Record - * created_at: string - * }} TaskEventRow - */ - -/** - * @typedef {{ - * items: OrderListRow[] - * total: number - * }} OrderListQueryResult - */ - -/** - * @typedef {{ - * items: TaskRow[] - * total: number - * }} TaskListQueryResult - */ - -/** - * @typedef {{ - * items: InventoryItemRow[] - * total: number - * }} InventoryListQueryResult - */ - -/** - * @typedef {{ - * items: WebhookEventRow[] - * total: number - * }} WebhookEventListQueryResult - */ diff --git a/apps/backend/src/types/repository-rows.ts b/apps/backend/src/types/repository-rows.ts new file mode 100644 index 00000000..2fbc2b6c --- /dev/null +++ b/apps/backend/src/types/repository-rows.ts @@ -0,0 +1,186 @@ +export type OrderRow = { + id: number + provider: string + platform: string + shop_id: string + shop_name: string + platform_order_id: string + order_status: string + pay_status: string + buyer_id: string + buyer_name: string + receiver_contact: string + total_amount: number | string + currency: string + raw_payload_json: string | Record + paid_at: string | null + created_at: string + updated_at: string +} + +export type OrderListRow = OrderRow & { + task_count?: number +} + +export type OrderItemRow = { + id: number + order_id: number + sku_code: string + sku_name: string + quantity: number + spec_json: string | Record + item_snapshot_json?: string | Record + created_at?: string + updated_at?: string +} + +export type TaskRow = { + id: number + order_id: number + order_item_id: number + platform_order_id: string + task_no: string + executor_key: string + task_status: string + delivery_status: string + result_code: string + result_message: string + inventory_status: string + user_action_status: string + browser_session_id: string + login_type: string + role_name: string + role_id: string + claim_token: string + claim_expires_at?: string | null + primary_claim_token: string + primary_claim_token_id: number | null + primary_claim_expires_at?: string | null + primary_inventory_item_id: number | null + inventory_display_value: string + primary_inventory_display_value: string + inventory_credential_type?: string + primary_inventory_credential_type?: string + artifacts_json: string | Record + context_json: string | Record + screenshot_path: string + last_error: string + retry_count: number + created_at: string + updated_at: string + claimed_at: string | null + role_confirmed_at: string | null + redeemed_at: string | null + sku_code?: string + sku_name?: string +} + +export type InventoryItemRow = { + id: number + sku_code: string + batch_no: string + credential_type: string + inventory_group_code: string + display_value: string + status: string + invalid_reason: string + delivered_at: string | null + created_at: string + updated_at: string + reserved_by_task_id: number | null + reserved_by_task_no: string + platform_order_id: string +} + +export type InventorySkuSuggestionRow = { + sku_code: string + credential_type: string + inventory_group_code: string + total_count: number + available_count: number + latest_updated_at: string | null +} + +export type WebhookEventRow = { + id: number + provider: string + platform: string + shop_id: string + shop_name: string + event_type: string + event_key: string + signature_valid: boolean + headers_json: string | Record + query_json: string | Record + body_json: string | Record + processed: boolean + process_error: string + related_order_id: number | null + created_at: string +} + +export type TaskInventoryBindingRow = { + id: number + task_id: number + inventory_item_id: number + role_key: string + quantity: number + binding_status: string + metadata_json: string | Record + invalid_reason: string + consumed_at: string | null + released_at: string | null + created_at: string + updated_at: string + sku_code: string + batch_no: string + credential_type: string + inventory_group_code: string + display_value: string + inventory_status: string +} + +export type TaskInventoryBindingSummaryRow = { + task_id: number + total_binding_count: number + reserved_binding_count: number + consumed_binding_count: number + released_binding_count: number + role_keys: string[] +} + +export type ClaimTokenRow = { + id: number + token: string + status: string + expired_at: string + created_at?: string + updated_at?: string +} + +export type TaskEventRow = { + id: number + event_type: string + payload_json: string | Record + created_at: string +} + +export type OrderListQueryResult = { + items: OrderListRow[] + total: number +} + +export type TaskListQueryResult = { + items: TaskRow[] + total: number +} + +export type InventoryListQueryResult = { + items: InventoryItemRow[] + total: number +} + +export type WebhookEventListQueryResult = { + items: WebhookEventRow[] + total: number +} diff --git a/apps/backend/src/types/runtime-config.js b/apps/backend/src/types/runtime-config.js deleted file mode 100644 index 6a68bbce..00000000 --- a/apps/backend/src/types/runtime-config.js +++ /dev/null @@ -1,143 +0,0 @@ -// @ts-check - -export {}; - -/** - * @typedef {{ - * username: string - * password: string - * role: string - * status?: string - * }} AdminDefaultUser - */ - -/** - * @typedef {{ - * enabled?: boolean - * shopName?: string - * accessToken?: string - * messageTemplate?: string - * autoDeliveryMessageTemplate?: string - * appSecret?: string - * apiVersion?: string - * sendMessageEndpoint?: string - * }} AgisoMessagingShopConfig - */ - -/** - * @typedef {Record} AgisoMessagingShopsConfig - */ - -/** - * @typedef {{ - * server: { - * port: number - * } - * browser: { - * chromePath: string - * headless: boolean | null - * devtools: boolean | null - * keepAlive: boolean | null - * prewarm: boolean | null - * slowMoMs: number | null - * } - * session: { - * debug: boolean - * } - * ocr: { - * baseUrl: string - * } - * data: { - * root: string - * } - * logging: { - * level: string - * } - * database: { - * url: string - * ssl: boolean - * maxConnections: number - * } - * orders: { - * claimBaseUrl: string - * tokenTtlHours: number - * } - * admin: { - * sessionSecret: string - * sessionTtlHours: number - * defaultUsers: AdminDefaultUser[] - * } - * platforms: { - * agiso: { - * appSecret: string - * tradeDetail: { - * endpoint: string - * apiVersion: string - * timeoutMs: number - * } - * autoDelivery: { - * enabled: boolean - * endpoint: string - * apiVersion: string - * } - * messaging: { - * enabled: boolean - * apiVersion: string - * sendMessageEndpoint: string - * messageTemplate: string - * autoDeliveryMessageTemplate: string - * shops: AgisoMessagingShopsConfig - * } - * } - * ninetyone: { - * userId: string - * secret: string - * version: string - * shopId: string - * shopName: string - * timestampToleranceSeconds: number - * cardsEncoding: string - * } - * cloudtentacles: { - * baseUrl: string - * timeoutMs: number - * sendSmsPath: string - * loginPath: string - * userInfoPath: string - * assetPath: string - * permissionPath: string - * categoriesPath: string - * skuListPath: string - * skuBuyPath: string - * skuUsePath: string - * knapsackPath: string - * vnListPath: string - * vnAppointPath: string - * vnGenerateLoginCodePath: string - * vnVerifCodePath: string - * vnVerifyLoginCodePath: string - * vnBindUrlPath: string - * vnBindInfoPath: string - * vnBackPath: string - * bindUrlTtlSeconds: number - * bindUrlProbeIntervalSeconds: number - * bindUrlProbeTimeoutMs: number - * bindUrlProbeUserAgent: string - * bindUrlProbeEndpoint: string - * bindUrlProbeChartId: string - * bindUrlProbeSubChartId: string - * bindUrlProbeIdeToken: string - * bindUrlProbeActivityUrl: string - * bindUrlProbeReferer: string - * bindUrlProbeExtraCookie: string - * publicKeyPem: string - * clientSource: string - * deviceId: string - * deviceType: number - * } - * } - * redeem: { - * proofMode: string - * } - * }} RuntimeConfig - */ diff --git a/apps/backend/src/types/runtime-config.ts b/apps/backend/src/types/runtime-config.ts new file mode 100644 index 00000000..6bd27145 --- /dev/null +++ b/apps/backend/src/types/runtime-config.ts @@ -0,0 +1,131 @@ +export type AdminDefaultUser = { + username: string + password: string + role: string + status?: string +} + +export type AgisoMessagingShopConfig = { + enabled?: boolean + shopName?: string + accessToken?: string + messageTemplate?: string + autoDeliveryMessageTemplate?: string + appSecret?: string + apiVersion?: string + sendMessageEndpoint?: string +} + +export type AgisoMessagingShopsConfig = Record + +export type RuntimeConfig = { + server: { + port: number + } + browser: { + chromePath: string + headless: boolean | null + devtools: boolean | null + keepAlive: boolean | null + prewarm: boolean | null + slowMoMs: number | null + } + session: { + debug: boolean + } + ocr: { + baseUrl: string + } + data: { + root: string + } + logging: { + level: string + } + database: { + url: string + ssl: boolean + maxConnections: number + } + orders: { + claimBaseUrl: string + tokenTtlHours: number + } + admin: { + sessionSecret: string + sessionTtlHours: number + defaultUsers: AdminDefaultUser[] + } + platforms: { + agiso: { + appSecret: string + tradeDetail: { + endpoint: string + apiVersion: string + timeoutMs: number + } + autoDelivery: { + enabled: boolean + endpoint: string + apiVersion: string + } + messaging: { + enabled: boolean + apiVersion: string + sendMessageEndpoint: string + messageTemplate: string + autoDeliveryMessageTemplate: string + shops: AgisoMessagingShopsConfig + } + } + ninetyone: { + userId: string + secret: string + version: string + shopId: string + shopName: string + timestampToleranceSeconds: number + cardsEncoding: string + } + cloudtentacles: { + baseUrl: string + timeoutMs: number + sendSmsPath: string + loginPath: string + userInfoPath: string + assetPath: string + permissionPath: string + categoriesPath: string + skuListPath: string + skuBuyPath: string + skuUsePath: string + knapsackPath: string + vnListPath: string + vnAppointPath: string + vnGenerateLoginCodePath: string + vnVerifCodePath: string + vnVerifyLoginCodePath: string + vnBindUrlPath: string + vnBindInfoPath: string + vnBackPath: string + bindUrlTtlSeconds: number + bindUrlProbeIntervalSeconds: number + bindUrlProbeTimeoutMs: number + bindUrlProbeUserAgent: string + bindUrlProbeEndpoint: string + bindUrlProbeChartId: string + bindUrlProbeSubChartId: string + bindUrlProbeIdeToken: string + bindUrlProbeActivityUrl: string + bindUrlProbeReferer: string + bindUrlProbeExtraCookie: string + publicKeyPem: string + clientSource: string + deviceId: string + deviceType: number + } + } + redeem: { + proofMode: string + } +} diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index 0fbed9ba..698cc87c 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -218,15 +218,15 @@ - `npm run typecheck` - `npm run build` - `npm test` +11. `src/types/*.js` 已改写为真正的 `.ts` 类型导出文件,现有 JS JSDoc `import('...js').TypeName` 引用保持可用 ## 下一步建议 第一批继续推进时,建议按这个顺序: -1. 将 `src/types/*.js` 从 JSDoc typedef 正式改写为 `export type` 的 `.ts` 文件,并逐步更新引用 -2. 继续迁移低风险 repository:`order-item-repo`、`message-delivery-repo`、`webhook-event-repo` -3. 拆分并迁移 `runtime.js`,把 env 解析、默认配置加载、配置合并分开 -4. 为 webhook、库存换码、自动发货补测试 +1. 继续迁移低风险 repository:`order-item-repo`、`message-delivery-repo`、`webhook-event-repo` +2. 拆分并迁移 `runtime.js`,把 env 解析、默认配置加载、配置合并分开 +3. 为 webhook、库存换码、自动发货补测试 ## 执行原则