refactor(interface): 重构站点适配器接口,按功能模块组织方法

重构 ISiteAdapter 接口,将相关方法按功能模块(客户、媒体、订单、产品等)分组
移除废弃的 fulfillOrder 方法
新增多个数据映射方法以支持统一数据格式转换
This commit is contained in:
tikkhun 2026-01-07 18:10:00 +08:00
parent 8f6727ae75
commit e024d8752d
8 changed files with 1907 additions and 1323 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,6 @@ import {
CancelFulfillmentDTO,
CreateReviewDTO,
CreateWebhookDTO,
FulfillmentDTO,
UnifiedCustomerDTO,
UnifiedCustomerPaginationDTO,
UnifiedMediaPaginationDTO,
@ -986,25 +985,6 @@ export class SiteApiController {
}
}
@Post('/:siteId/orders/:id/fulfill')
@ApiOkResponse({ type: Object })
async fulfillOrder(
@Param('siteId') siteId: number,
@Param('id') id: string,
@Body() body: FulfillmentDTO
) {
this.logger.info(`[Site API] 订单履约开始, siteId: ${siteId}, orderId: ${id}`);
try {
const adapter = await this.siteApiService.getAdapter(siteId);
const data = await adapter.fulfillOrder(id, body);
this.logger.info(`[Site API] 订单履约成功, siteId: ${siteId}, orderId: ${id}`);
return successResponse(data);
} catch (error) {
this.logger.error(`[Site API] 订单履约失败, siteId: ${siteId}, orderId: ${id}, 错误信息: ${error.message}`);
return errorResponse(error.message);
}
}
@Post('/:siteId/orders/:id/cancel-fulfill')
@ApiOkResponse({ type: Object })
async cancelFulfillment(

View File

@ -20,50 +20,70 @@ import { UnifiedPaginationDTO, UnifiedSearchParamsDTO } from '../dto/api.dto';
import { BatchOperationDTO, BatchOperationResultDTO } from '../dto/batch.dto';
export interface ISiteAdapter {
// ========== 客户映射方法 ==========
/**
*
*
* @param data
* @returns
*/
getProducts(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedProductDTO>>;
mapPlatformToUnifiedCustomer(data: any): UnifiedCustomerDTO;
/**
*
*
* @param data
* @returns
*/
getAllProducts(params?: UnifiedSearchParamsDTO): Promise<UnifiedProductDTO[]>;
mapUnifiedToPlatformCustomer(data: Partial<UnifiedCustomerDTO>): any;
/**
*
*
*/
getProduct(id: string | number): Promise<UnifiedProductDTO>;
getCustomer(id: string | number): Promise<UnifiedCustomerDTO>;
/**
*
*
*/
getOrders(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedOrderDTO>>;
getCustomers(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedCustomerDTO>>;
/**
*
*
*/
countOrders(params: Record<string,any>): Promise<number>;
getAllCustomers(params?: UnifiedSearchParamsDTO): Promise<UnifiedCustomerDTO[]>;
/**
*
*
*/
getAllOrders(params?: UnifiedSearchParamsDTO): Promise<UnifiedOrderDTO[]>;
createCustomer(data: Partial<UnifiedCustomerDTO>): Promise<UnifiedCustomerDTO>;
/**
*
*
*/
getOrder(id: string | number): Promise<UnifiedOrderDTO>;
updateCustomer(id: string | number, data: Partial<UnifiedCustomerDTO>): Promise<UnifiedCustomerDTO>;
/**
*
*
*/
getSubscriptions(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedSubscriptionDTO>>;
deleteCustomer(id: string | number): Promise<boolean>;
/**
*
*
*/
getAllSubscriptions(params?: UnifiedSearchParamsDTO): Promise<UnifiedSubscriptionDTO[]>;
batchProcessCustomers?(data: BatchOperationDTO): Promise<BatchOperationResultDTO>;
// ========== 媒体映射方法 ==========
/**
*
* @param data
* @returns
*/
mapPlatformToUnifiedMedia(data: any): UnifiedMediaDTO;
/**
*
* @param data
* @returns
*/
mapUnifiedToPlatformMedia(data: Partial<UnifiedMediaDTO>): any;
/**
*
@ -80,75 +100,69 @@ export interface ISiteAdapter {
*/
createMedia(file: any): Promise<UnifiedMediaDTO>;
// ========== 订单映射方法 ==========
/**
*
*
* @param data
* @returns
*/
getReviews(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedReviewDTO>>;
mapPlatformToUnifiedOrder(data: any): UnifiedOrderDTO;
/**
*
*
* @param data
* @returns
*/
getAllReviews(params?: UnifiedSearchParamsDTO): Promise<UnifiedReviewDTO[]>;
mapUnifiedToPlatformOrder(data: Partial<UnifiedOrderDTO>): any;
/**
*
*
* @param data
* @returns
*/
createReview(data: CreateReviewDTO): Promise<UnifiedReviewDTO>;
mapCreateOrderParams(data: Partial<UnifiedOrderDTO>): any;
/**
*
*
* @param data
* @returns
*/
updateReview(id: number, data: UpdateReviewDTO): Promise<UnifiedReviewDTO>;
mapUpdateOrderParams(data: Partial<UnifiedOrderDTO>): any;
/**
*
*
*/
deleteReview(id: number): Promise<boolean>;
getOrder(id: string | number): Promise<UnifiedOrderDTO>;
/**
*
*
*/
createProduct(data: Partial<UnifiedProductDTO>): Promise<UnifiedProductDTO>;
getOrders(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedOrderDTO>>;
/**
*
*
*/
updateProduct(id: string | number, data: Partial<UnifiedProductDTO>): Promise<boolean>;
getAllOrders(params?: UnifiedSearchParamsDTO): Promise<UnifiedOrderDTO[]>;
/**
*
*
*/
deleteProduct(id: string | number): Promise<boolean>;
countOrders(params: Record<string,any>): Promise<number>;
/**
*
*
*/
getVariations(productId: string | number, params: UnifiedSearchParamsDTO): Promise<UnifiedVariationPaginationDTO>;
createOrder(data: Partial<UnifiedOrderDTO>): Promise<UnifiedOrderDTO>;
/**
*
*
*/
getAllVariations(productId: string | number, params?: UnifiedSearchParamsDTO): Promise<UnifiedProductVariationDTO[]>;
updateOrder(id: string | number, data: Partial<UnifiedOrderDTO>): Promise<boolean>;
/**
*
*
*/
getVariation(productId: string | number, variationId: string | number): Promise<UnifiedProductVariationDTO>;
/**
*
*/
createVariation(productId: string | number, data: CreateVariationDTO): Promise<UnifiedProductVariationDTO>;
/**
*
*/
updateVariation(productId: string | number, variationId: string | number, data: UpdateVariationDTO): Promise<UnifiedProductVariationDTO>;
/**
*
*/
deleteVariation(productId: string | number, variationId: string | number): Promise<boolean>;
deleteOrder(id: string | number): Promise<boolean>;
/**
*
@ -160,71 +174,6 @@ export interface ISiteAdapter {
*/
createOrderNote(orderId: string | number, data: any): Promise<any>;
batchProcessProducts?(data: BatchOperationDTO): Promise<BatchOperationResultDTO>;
createOrder(data: Partial<UnifiedOrderDTO>): Promise<UnifiedOrderDTO>;
updateOrder(id: string | number, data: Partial<UnifiedOrderDTO>): Promise<boolean>;
deleteOrder(id: string | number): Promise<boolean>;
batchProcessOrders?(data: BatchOperationDTO): Promise<BatchOperationResultDTO>;
getCustomers(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedCustomerDTO>>;
getAllCustomers(params?: UnifiedSearchParamsDTO): Promise<UnifiedCustomerDTO[]>;
getCustomer(id: string | number): Promise<UnifiedCustomerDTO>;
createCustomer(data: Partial<UnifiedCustomerDTO>): Promise<UnifiedCustomerDTO>;
updateCustomer(id: string | number, data: Partial<UnifiedCustomerDTO>): Promise<UnifiedCustomerDTO>;
deleteCustomer(id: string | number): Promise<boolean>;
batchProcessCustomers?(data: BatchOperationDTO): Promise<BatchOperationResultDTO>;
/**
* webhooks列表
*/
getWebhooks(params: UnifiedSearchParamsDTO): Promise<UnifiedWebhookPaginationDTO>;
/**
* webhooks
*/
getAllWebhooks(params?: UnifiedSearchParamsDTO): Promise<UnifiedWebhookDTO[]>;
/**
* webhook
*/
getWebhook(id: string | number): Promise<UnifiedWebhookDTO>;
/**
* webhook
*/
createWebhook(data: CreateWebhookDTO): Promise<UnifiedWebhookDTO>;
/**
* webhook
*/
updateWebhook(id: string | number, data: UpdateWebhookDTO): Promise<UnifiedWebhookDTO>;
/**
* webhook
*/
deleteWebhook(id: string | number): Promise<boolean>;
/**
*
*/
getLinks(): Promise<Array<{title: string, url: string}>>;
/**
*
*/
fulfillOrder(orderId: string | number, data: {
tracking_number?: string;
shipping_provider?: string;
shipping_method?: string;
items?: Array<{
order_item_id: number;
quantity: number;
}>;
}): Promise<any>;
/**
*
*/
@ -272,4 +221,276 @@ export interface ISiteAdapter {
*
*/
deleteOrderFulfillment(orderId: string | number, fulfillmentId: string): Promise<boolean>;
/**
*
*/
batchProcessOrders?(data: BatchOperationDTO): Promise<BatchOperationResultDTO>;
// ========== 产品映射方法 ==========
/**
*
* @param data
* @returns
*/
mapPlatformToUnifiedProduct(data: any): UnifiedProductDTO;
/**
*
* @param data
* @returns
*/
mapUnifiedToPlatformProduct(data: Partial<UnifiedProductDTO>): any;
/**
*
* @param data
* @returns
*/
mapCreateProductParams(data: Partial<UnifiedProductDTO>): any;
/**
*
* @param data
* @returns
*/
mapUpdateProductParams(data: Partial<UnifiedProductDTO>): any;
/**
*
*/
getProduct(id: string | number): Promise<UnifiedProductDTO>;
/**
*
*/
getProducts(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedProductDTO>>;
/**
*
*/
getAllProducts(params?: UnifiedSearchParamsDTO): Promise<UnifiedProductDTO[]>;
/**
*
*/
createProduct(data: Partial<UnifiedProductDTO>): Promise<UnifiedProductDTO>;
/**
*
*/
updateProduct(id: string | number, data: Partial<UnifiedProductDTO>): Promise<boolean>;
/**
*
*/
deleteProduct(id: string | number): Promise<boolean>;
/**
*
*/
batchProcessProducts?(data: BatchOperationDTO): Promise<BatchOperationResultDTO>;
// ========== 评论映射方法 ==========
/**
*
* @param data
* @returns
*/
mapPlatformToUnifiedReview(data: any): UnifiedReviewDTO;
/**
*
* @param data
* @returns
*/
mapUnifiedToPlatformReview(data: Partial<UnifiedReviewDTO>): any;
/**
*
* @param data
* @returns
*/
mapCreateReviewParams(data: CreateReviewDTO): any;
/**
*
* @param data
* @returns
*/
mapUpdateReviewParams(data: UpdateReviewDTO): any;
/**
*
*/
getReviews(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedReviewDTO>>;
/**
*
*/
getAllReviews(params?: UnifiedSearchParamsDTO): Promise<UnifiedReviewDTO[]>;
/**
*
*/
createReview(data: CreateReviewDTO): Promise<UnifiedReviewDTO>;
/**
*
*/
updateReview(id: number, data: UpdateReviewDTO): Promise<UnifiedReviewDTO>;
/**
*
*/
deleteReview(id: number): Promise<boolean>;
// ========== 订阅映射方法 ==========
/**
*
* @param data
* @returns
*/
mapPlatformToUnifiedSubscription(data: any): UnifiedSubscriptionDTO;
/**
*
* @param data
* @returns
*/
mapUnifiedToPlatformSubscription(data: Partial<UnifiedSubscriptionDTO>): any;
/**
*
*/
getSubscriptions(params: UnifiedSearchParamsDTO): Promise<UnifiedPaginationDTO<UnifiedSubscriptionDTO>>;
/**
*
*/
getAllSubscriptions(params?: UnifiedSearchParamsDTO): Promise<UnifiedSubscriptionDTO[]>;
// ========== 产品变体映射方法 ==========
/**
*
* @param data
* @returns
*/
mapPlatformToUnifiedVariation(data: any): UnifiedProductVariationDTO;
/**
*
* @param data
* @returns
*/
mapUnifiedToPlatformVariation(data: Partial<UnifiedProductVariationDTO>): any;
/**
*
* @param data
* @returns
*/
mapCreateVariationParams(data: CreateVariationDTO): any;
/**
*
* @param data
* @returns
*/
mapUpdateVariationParams(data: UpdateVariationDTO): any;
/**
*
*/
getVariation(productId: string | number, variationId: string | number): Promise<UnifiedProductVariationDTO>;
/**
*
*/
getVariations(productId: string | number, params: UnifiedSearchParamsDTO): Promise<UnifiedVariationPaginationDTO>;
/**
*
*/
getAllVariations(productId: string | number, params?: UnifiedSearchParamsDTO): Promise<UnifiedProductVariationDTO[]>;
/**
*
*/
createVariation(productId: string | number, data: CreateVariationDTO): Promise<UnifiedProductVariationDTO>;
/**
*
*/
updateVariation(productId: string | number, variationId: string | number, data: UpdateVariationDTO): Promise<UnifiedProductVariationDTO>;
/**
*
*/
deleteVariation(productId: string | number, variationId: string | number): Promise<boolean>;
// ========== Webhook映射方法 ==========
/**
* Webhook数据转换为统一Webhook数据格式
* @param data Webhook数据
* @returns Webhook数据格式
*/
mapPlatformToUnifiedWebhook(data: any): UnifiedWebhookDTO;
/**
* Webhook数据格式转换为平台Webhook数据
* @param data Webhook数据格式
* @returns Webhook数据
*/
mapUnifiedToPlatformWebhook(data: Partial<UnifiedWebhookDTO>): any;
/**
* Webhook创建参数转换为平台Webhook创建参数
* @param data Webhook创建参数
* @returns Webhook创建参数
*/
mapCreateWebhookParams(data: CreateWebhookDTO): any;
/**
* Webhook更新参数转换为平台Webhook更新参数
* @param data Webhook更新参数
* @returns Webhook更新参数
*/
mapUpdateWebhookParams(data: UpdateWebhookDTO): any;
/**
* webhook
*/
getWebhook(id: string | number): Promise<UnifiedWebhookDTO>;
/**
* webhooks列表
*/
getWebhooks(params: UnifiedSearchParamsDTO): Promise<UnifiedWebhookPaginationDTO>;
/**
* webhooks
*/
getAllWebhooks(params?: UnifiedSearchParamsDTO): Promise<UnifiedWebhookDTO[]>;
/**
* webhook
*/
createWebhook(data: CreateWebhookDTO): Promise<UnifiedWebhookDTO>;
/**
* webhook
*/
updateWebhook(id: string | number, data: UpdateWebhookDTO): Promise<UnifiedWebhookDTO>;
/**
* webhook
*/
deleteWebhook(id: string | number): Promise<boolean>;
// ========== 站点/其他方法 ==========
/**
*
*/
getLinks(): Promise<Array<{title: string, url: string}>>;
}

View File

@ -0,0 +1 @@
// 从 unified 到 数据库需要有个转换流程

View File

@ -0,0 +1 @@
// 文件转换

View File

View File

@ -0,0 +1,8 @@
import { UnifiedOrderDTO } from "../dto/site-api.dto";
export class ShipmentAdapter {
// 用于导出物流需要的数据
mapFromOrder(order: UnifiedOrderDTO): any {
return order;
}
}