# Layered Architecture ## ADDED Requirements ### Requirement: 实现三层架构 系统 SHALL 实现 handler → service → repository 三层架构。 #### Scenario: Handler 层职责 - **WHEN** 处理 HTTP 请求 - **THEN** handler 层 SHALL 仅负责 HTTP 请求解析和响应 - **THEN** handler 层 SHALL 调用 service 层处理业务逻辑 - **THEN** handler 层 SHALL NOT 直接访问数据库 #### Scenario: Service 层职责 - **WHEN** 处理业务逻辑 - **THEN** service 层 SHALL 包含业务规则和验证 - **THEN** service 层 SHALL 调用 repository 层访问数据 - **THEN** service 层 SHALL 协调多个 repository 的操作 #### Scenario: Repository 层职责 - **WHEN** 访问数据 - **THEN** repository 层 SHALL 仅负责数据访问 - **THEN** repository 层 SHALL 封装数据库操作 - **THEN** repository 层 SHALL NOT 包含业务逻辑 ### Requirement: 定义核心接口 系统 SHALL 定义清晰的接口边界。 #### Scenario: Service 接口定义 - **WHEN** 定义 service 接口 - **THEN** SHALL 定义 ProviderService、ModelService、RoutingService、StatsService 接口 - **THEN** SHALL 定义清晰的业务方法签名 - **THEN** SHALL 使用 domain 类型作为参数和返回值 #### Scenario: Repository 接口定义 - **WHEN** 定义 repository 接口 - **THEN** SHALL 定义 ProviderRepository、ModelRepository、StatsRepository 接口 - **THEN** SHALL 定义清晰的数据访问方法签名 - **THEN** SHALL 使用 domain 类型作为参数和返回值 #### Scenario: Provider Client 接口定义 - **WHEN** 定义 provider client 接口 - **THEN** SHALL 定义 ProviderClient 接口 - **THEN** SHALL 包含 SendRequest 和 SendStreamRequest 方法 - **THEN** SHALL 支持接口 Mock ### Requirement: 实现依赖注入 系统 SHALL 使用手动依赖注入。 #### Scenario: Repository 注入 - **WHEN** 初始化 service - **THEN** SHALL 通过构造函数注入 repository 依赖 - **THEN** SHALL 使用接口类型而非具体类型 #### Scenario: Service 注入 - **WHEN** 初始化 handler - **THEN** SHALL 通过构造函数注入 service 依赖 - **THEN** SHALL 使用接口类型而非具体类型 #### Scenario: 主函数组装 - **WHEN** 应用启动 - **THEN** main.go SHALL 按顺序构造所有依赖 - **THEN** SHALL 先构造基础设施(logger、database) - **THEN** SHALL 再构造 repository、service、handler ### Requirement: 定义 Domain 模型 系统 SHALL 定义独立的 domain 模型。 #### Scenario: Domain 模型定义 - **WHEN** 定义领域模型 - **THEN** SHALL 在 internal/domain/ 包中定义 - **THEN** SHALL 包含 Provider、Model、UsageStats 等模型 - **THEN** SHALL 与数据库模型分离 #### Scenario: Domain 模型使用 - **WHEN** service 和 repository 处理数据 - **THEN** SHALL 使用 domain 模型 - **THEN** SHALL NOT 使用数据库模型(GORM 模型) ### Requirement: 提高可测试性 架构 SHALL 提高代码可测试性。 #### Scenario: Service 层测试 - **WHEN** 测试 service 层 - **THEN** SHALL 能够 Mock repository 依赖 - **THEN** SHALL 能够独立测试业务逻辑 #### Scenario: Handler 层测试 - **WHEN** 测试 handler 层 - **THEN** SHALL 能够 Mock service 依赖 - **THEN** SHALL 能够独立测试 HTTP 处理逻辑 #### Scenario: Repository 层测试 - **WHEN** 测试 repository 层 - **THEN** SHALL 使用测试数据库 - **THEN** SHALL 能够独立测试数据访问逻辑