# 产品站点SKU查询方法测试文档 ## 新增和更新的API接口 ### 1. 根据产品ID获取站点SKU列表 **接口**: `GET /product/:id/site-skus` **功能**: 获取指定产品的所有站点SKU列表 **返回**: 站点SKU对象数组,按创建时间升序排列 ### 2. 根据站点SKU查询产品 **接口**: `GET /product/site-sku/:siteSku` **功能**: 根据站点SKU代码查询对应的产品信息 **返回**: 完整的产品对象(包含站点SKU、分类、属性等关联数据) ### 3. 根据产品ID获取产品详情 **接口**: `GET /product/:id` **功能**: 获取产品的完整详情信息 **返回**: 完整的产品对象(包含站点SKU、分类、属性、组成等关联数据) ### 4. 现有接口的增强 #### 4.1 根据SKU查询产品 **接口**: `GET /product/sku/:sku` **增强**: 现在返回的产品信息包含关联的站点SKU数据 #### 4.2 搜索产品 **接口**: `GET /product/search?name=:name` **增强**: 搜索结果现在包含每个产品的站点SKU数据 #### 4.3 获取产品列表 **接口**: `GET /product/list` **增强**: 产品列表中的每个产品现在都包含站点SKU数据 ## 服务层新增方法 ### ProductService新增方法 1. **getProductSiteSkus(productId: number)**: Promise - 获取指定产品的所有站点SKU - 包含产品关联信息 - 按创建时间排序 2. **getProductById(id: number)**: Promise - 根据产品ID获取完整产品信息 - 包含站点SKU、分类、属性、组成等所有关联数据 - 自动处理单品和混装商品的组成信息 3. **findProductBySiteSku(siteSku: string)**: Promise - 根据站点SKU查询对应的产品 - 返回完整的产品信息 - 如果站点SKU不存在则抛出错误 ### 现有方法增强 1. **findProductsByName(name: string)**: 现在包含站点SKU数据 2. **findProductBySku(sku: string)**: 现在包含站点SKU数据 3. **getProductList**: 已经包含站点SKU数据(无需更改) ## 使用示例 ### 获取产品的站点SKU列表 ```javascript // GET /product/123/site-skus // 返回: [ { "id": 1, "siteSku": "SITE-SKU-001", "productId": 123, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ] ``` ### 根据站点SKU查询产品 ```javascript // GET /product/site-sku/SITE-SKU-001 // 返回完整的产品对象,包含: // - 基本信息(SKU、名称、价格等) // - 分类信息 // - 属性信息 // - 站点SKU列表 // - 组成信息 ``` ### 获取产品详情 ```javascript // GET /product/123 // 返回完整的产品对象,与站点SKU查询类似 ``` ## 数据库查询优化 所有新增和更新的方法都使用了TypeORM的关联查询,确保: - 一次查询获取所有需要的数据 - 避免N+1查询问题 - 包含必要的关联关系(分类、属性、站点SKU、组成) ## 错误处理 所有方法都包含适当的错误处理: - 产品不存在时抛出明确的错误信息 - 站点SKU不存在时抛出明确的错误信息 - 控制器层统一处理错误并返回适当的HTTP响应