Files
tyapi-server/docs/产品列表功能修复总结.md
2025-07-30 00:51:22 +08:00

4.7 KiB
Raw Blame History

产品列表功能修复总结

问题描述

管理员专用的产品列表功能存在以下问题:

  1. 不返回产品的展示状态(is_visible 字段)
  2. 与用户端的产品列表功能没有明确区分
  3. 用户端可能看到隐藏的产品
  4. 缺乏清晰的链路分离,不利于后续维护

解决方案

1. 创建专门的响应结构

新增响应结构:

  • ProductAdminInfoResponse:管理员专用,包含 is_visible 字段
  • ProductAdminListResponse:管理员专用列表响应

保持原有结构:

  • ProductInfoResponse:用户端使用,不包含 is_visible 字段
  • ProductListResponse:用户端列表响应

2. 应用服务层方法分离

新增管理员专用方法:

ListProductsForAdmin(ctx context.Context, filters map[string]interface{}, options interfaces.ListOptions) (*responses.ProductAdminListResponse, error)
GetProductByIDForAdmin(ctx context.Context, query *queries.GetProductQuery) (*responses.ProductAdminInfoResponse, error)

新增用户端专用方法:

GetProductByIDForAdmin(ctx context.Context, query *queries.GetProductQuery) (*responses.ProductInfoResponse, error)

3. 筛选逻辑优化

用户端筛选逻辑:

  • 默认只显示可见产品(is_visible = true
  • 包含用户订阅状态信息
  • 无法查看隐藏产品

管理员端筛选逻辑:

  • 可以看到所有产品(包括隐藏的)
  • 支持按可见状态筛选
  • 不包含用户订阅状态

4. 产品详情获取分离

用户端产品详情:

  • 验证产品可见性
  • 隐藏产品返回 404 错误
  • 不包含可见状态信息

管理员端产品详情:

  • 可以获取任何产品的详情
  • 包含可见状态信息
  • 无可见性限制

修改的文件

1. 响应结构文件

  • internal/application/product/dto/responses/product_responses.go
    • 新增 ProductAdminInfoResponse 结构
    • 新增 ProductAdminListResponse 结构

2. 应用服务接口

  • internal/application/product/product_application_service.go
    • 新增管理员专用方法接口
    • 新增用户端专用方法接口

3. 应用服务实现

  • internal/application/product/product_application_service_impl.go
    • 实现 ListProductsForAdmin 方法
    • 实现 GetProductByIDForAdmin 方法
    • 实现 GetProductByIDForUser 方法
    • 新增 convertToProductAdminInfoResponse 转换方法

4. HTTP 处理器

  • internal/infrastructure/http/handlers/product_admin_handler.go

    • 修改 ListProducts 方法使用管理员专用服务
    • 修改 GetProductDetail 方法使用管理员专用服务
    • 更新 Swagger 文档注释
  • internal/infrastructure/http/handlers/product_handler.go

    • 修改 ListProducts 方法默认只显示可见产品
    • 修改 GetProductDetail 方法使用用户端专用服务
    • 更新 Swagger 文档注释

5. 测试文件

  • test/admin_product_list_test.go
    • 新增管理员筛选功能测试
    • 新增用户筛选功能测试
    • 新增响应结构差异测试
    • 新增功能区分逻辑测试

6. 文档文件

  • docs/产品列表功能区分说明.md
    • 详细说明功能区分
    • 响应结构对比
    • 实现细节说明
    • 维护建议

功能验证

1. 编译测试

  • 代码编译成功,无语法错误

2. 单元测试

  • 管理员筛选功能测试通过
  • 用户筛选功能测试通过
  • 响应结构差异测试通过
  • 功能区分逻辑测试通过

3. 功能验证

管理员端功能:

  • 可以看到所有产品(包括隐藏的)
  • 返回产品可见状态信息
  • 支持按可见状态筛选
  • 不包含用户订阅状态

用户端功能:

  • 默认只显示可见产品
  • 包含用户订阅状态信息
  • 无法查看隐藏产品详情
  • 响应结构不包含可见状态

维护链路

1. 清晰的职责分离

  • 管理员端和用户端使用不同的响应结构
  • 应用服务层方法明确分离
  • HTTP 处理器职责清晰

2. 易于扩展

  • 新增功能时可以选择合适的响应结构
  • 筛选逻辑可以独立修改
  • 测试覆盖完整

3. 文档完善

  • 详细的实现说明文档
  • 清晰的 API 文档注释
  • 完整的测试用例

注意事项

  1. 向后兼容:保持了原有的用户端 API 接口不变
  2. 权限控制:确保路由级别的权限控制正确实现
  3. 数据安全:用户无法看到产品的可见状态信息
  4. 性能考虑:筛选逻辑在应用层实现,避免数据库层面的复杂查询

后续建议

  1. 监控:添加产品列表访问的监控指标
  2. 缓存:考虑对产品列表进行缓存优化
  3. 分页优化:优化大数据量时的分页性能
  4. 搜索优化:考虑添加全文搜索功能