# DESIGN: 开发规范文档设计

本文档定义了最终 `docs/开发规范.md` 的结构和核心内容，旨在为后续的文档撰写提供清晰的蓝图。

## 1. 整体结构

最终的开发规范文档将分为以下几个核心章节，每个章节都将包含详细的规则描述和代码示例。

```mermaid
graph TD
    A[开发规范] --\u003e B[1. 概述];
    A --\u003e C[2. 目录与文件结构];
    A --\u003e D[3. 命名规范];
    A --\u003e E[4. API Handler 规范];
    A --\u003e F[5. 数据传输对象 (DTO) 规范];
    A --\u003e G[6. 错误处理规范];
    A --\u003e H[7. 日志记录规范];
    A --\u003e I[8. 注释与文档(Swagger)];

    subgraph E [4. API Handler 规范]
        E1[4.1 Handler 定义]
        E2[4.2 路由与函数签名]
        E3[4.3 参数绑定与校验]
        E4[4.4 业务逻辑调用]
        E5[4.5 响应处理]
    end

    subgraph F [5. 数据传输对象 (DTO) 规范]
        F1[5.1 Request/Response 结构体]
        F2[5.2 JSON Tags]
        F3[5.3 Validation Tags]
    end
```

## 2. 核心章节设计

### 2.1 概述
*   **目的**：阐明制定此规范的背景和目标。
*   **范围**：明确规范的适用范围（API 层）。
*   **原则**：强调代码清晰、一致、可维护的核心原则。

### 2.2 目录与文件结构
*   **规则**：
    *   API 功能模块应在 `internal/api/{模块名}` 下创建独立目录。
    *   每个目录包含 `*.go` 文件，每个文件实现一个独立的 API 端点。
    *   `{模块名}.go` 文件用于定义 `handler` 结构体和 `New` 初始化函数。
*   **示例**：以 `admin` 模块为例，展示其目录结构。

### 2.3 命名规范
*   **规则**：
    *   Handler 文件名：使用小写蛇形命名法，如 `login.go`, `admin_create.go`。
    *   请求/响应结构体：使用驼峰式命名，并以 `Request`/`Response` 结尾，如 `loginRequest`, `loginResponse`。
    *   Handler 函数：使用驼峰式命名，如 `Login()`, `CreateAdmin()`。

### 2.4 API Handler 规范
*   **Handler 定义**：`handler` 结构体应包含 `logger` 和数据库连接（`readDB`, `writeDB`）。
*   **路由与函数签名**：Handler 函数必须返回 `core.HandlerFunc` 类型。
*   **参数绑定与校验**：必须使用 `ctx.ShouldBindJSON()` 进行参数绑定，并结合 `validation` 包进行错误信息格式化。
*   **业务逻辑调用**：通过 `h.readDB` 或 `h.writeDB` 与数据库交互，或调用 `service` 层方法。
*   **响应处理**：成功时使用 `ctx.Payload(res)` 返回数据。

### 2.5 数据传输对象 (DTO) 规范
*   **Request/Response 结构体**：每个 API 都应定义独立的请求和响应结构体。
*   **JSON Tags**：所有结构体字段必须包含 `json:"..."` tag。
*   **Validation Tags**：对需要校验的请求字段，必须添加 `binding:"..."` tag。

### 2.6 错误处理规范
*   **规则**：必须使用 `ctx.AbortWithError(core.Error(...))` 来中断请求并返回标准格式的错误。
*   **`core.Error` 参数**：需提供 HTTP 状态码、业务错误码 (`code.Code`) 和详细错误信息。

### 2.7 日志记录规范
*   **规则**：通过注入的 `h.logger` 实例进行日志记录（虽然在 `admin` 示例中不明显，但这是标准实践）。

### 2.8 注释与文档 (Swagger)
*   **规则**：
    *   每个 Handler 函数上方必须有完整的 Swagger 注解，包括 `@Summary`, `@Description`, `@Tags`, `@Param`, `@Success`, `@Failure`, `@Router` 等。
    *   所有 DTO 字段和函数都应有清晰的中文注释。

## 3. 数据流与接口契约

本文档本身不定义新的数据流或接口，而是规范如何定义它们。其核心思想是：**通过严格的结构体和规范化的错误处理，确保所有 API 的接口契约都是明确和一致的。**
