# System Module

系统模块承载当前管理后台的完整业务边界。`internal` 顶层只保留有明确
生命周期或分层职责的包：

- `app`：组合根、system 模块定义和任务/路由运行时组合
- `biz`：系统领域对象、用例和仓储接口
- `conf`：基础配置 proto 与运行时配置解析
- `data`：数据库生命周期、系统仓储、系统表和支付持久化
- `initialize`：数据库首次初始化和系统种子数据编排
- `integration`：Redis、邮件、对象存储、支付、WebSocket、EMQX 和 RabbitMQ 适配器
- `security`：后台 JWT 等安全实现
- `server`：Gin server 组合与生命周期；横切 HTTP 代码按子包维护：
  `server/handler`、`server/middleware`、`server/router`、`server/httpx`
- `service`：应用服务、DTO 与领域对象转换和路由元数据；DTO 集中在
  `service/dto`，根包中的 `dto_aliases.go` 只负责兼容旧调用方
- `worker`：定时任务执行与调度

目录代表边界，模块文件按资源命名。DTO、handler、中间件、路由和 HTTP
响应工具分别放在独立子包中，避免 `service`/`server` 根目录堆积几十个
文件，同时不把只有一两个文件的业务逻辑再拆成新包。单文件的 module
定义并入 `app`，JWT 实现集中在 `security`，protobuf JSON 统一使用
`pkg/protoutil`。

`internal/app` 只有 `catalog.go` 和 `definition.go` 是有意保留的组合根：
前者组装模块 catalog、任务注册和运行时，后者声明 system 的迁移、管理面
和定时任务。它们不是可以下沉到 `service` 或 `data` 的业务文件。

系统表统一使用 `sys_` 前缀；业务表应由新业务模块自行命名和迁移，不要混入
本目录。

system 通过 `Definition()` 提供迁移、支付菜单/API 和默认任务，通过
`worker.TaskMethods` 提供依赖系统用例的任务实现，通过 `server/router.Routes` 提供
路由。应用组合根消费这些公共协议；新增业务不需要修改 system 的初始化、
worker、路由或数据层。
