import { Controller, Param, Post, Inject, Get, Query, Put, Body, } from '@midwayjs/core'; import { WpProductService } from '../service/wp_product.service'; import { errorResponse, successResponse } from '../utils/response.util'; import { ApiOkResponse } from '@midwayjs/swagger'; import { BooleanRes, WpProductListRes } from '../dto/reponse.dto'; import { QueryWpProductDTO, SetConstitutionDTO, UpdateVariationDTO, UpdateWpProductDTO, } from '../dto/wp_product.dto'; import { WPService } from '../service/wp.service'; @Controller('/wp_product') export class WpProductController { @Inject() private readonly wpProductService: WpProductService; @Inject() private readonly wpApiService: WPService; @ApiOkResponse({ type: BooleanRes, }) @Post('/sync/:siteId') async syncProducts(@Param('siteId') siteId: string) { try { await this.wpProductService.syncSite(siteId); return successResponse(true); } catch (error) { console.log(error); return errorResponse('同步失败'); } } @ApiOkResponse({ type: WpProductListRes, }) @Get('/list') async getWpProducts(@Query() query: QueryWpProductDTO) { try { const data = await this.wpProductService.getProductList(query); return successResponse(data); } catch (error) { return errorResponse(error.message); } } @ApiOkResponse({ type: BooleanRes, }) @Put('/:id/constitution') async setConstitution( @Param('id') id: number, @Body() body: SetConstitutionDTO ) { const { isProduct, constitution } = body; try { await this.wpProductService.setConstitution(id, isProduct, constitution); return successResponse(true); } catch (error) { return errorResponse(error.message); } } /** * 更新产品接口 * @param productId 产品 ID * @param body 更新数据 */ @ApiOkResponse({ type: BooleanRes, }) @Put('/siteId/:siteId/products/:productId') async updateProduct( @Param('siteId') siteId: string, @Param('productId') productId: string, @Body() body: UpdateWpProductDTO ) { try { const isDuplicate = await this.wpProductService.isSkuDuplicate( body.sku, siteId, productId ); if (isDuplicate) { return errorResponse('SKU已存在'); } const site = await this.wpProductService.geSite(siteId); const result = await this.wpApiService.updateProduct( site, productId, body ); if (result) { this.wpProductService.updateWpProduct(siteId, productId, body); return successResponse(result, '产品更新成功'); } return errorResponse('产品更新失败'); } catch (error) { console.error('更新产品失败:', error); return errorResponse(error.message || '产品更新失败'); } } /** * 更新变体接口 * @param productId 产品 ID * @param variationId 变体 ID * @param body 更新数据 */ @Put('/siteId/:siteId/products/:productId/variations/:variationId') async updateVariation( @Param('siteId') siteId: string, @Param('productId') productId: string, @Param('variationId') variationId: string, @Body() body: UpdateVariationDTO ) { try { const isDuplicate = await this.wpProductService.isSkuDuplicate( body.sku, siteId, productId, variationId ); if (isDuplicate) { return errorResponse('SKU已存在'); } const site = await this.wpProductService.geSite(siteId); const result = await this.wpApiService.updateVariation( site, productId, variationId, body ); if (result) { this.wpProductService.updateWpProductVaritation( siteId, productId, variationId, body ); return successResponse(result, '产品变体更新成功'); } return errorResponse('变体更新失败'); } catch (error) { console.error('更新变体失败:', error); return errorResponse(error.message || '产品变体更新失败'); } } }