# Data Layer `data` owns database clients, persistence models, migrations, configuration watching, and repository implementations. - `system/`: system repositories and system table persistence - `task/`: timed-task tables and task persistence - `integration/`: `sys_integration_configs` and integration configuration persistence - `payment/`: payment-order persistence - each subpackage owns its Wire `ProviderSet`; the root package only binds the shared `Data` infrastructure and aggregates those sets, mirroring `biz` - root files: shared database lifecycle, runtime clients, configuration orchestration, data-scope auditing, and migration orchestration 新增数据模块时创建 `internal/data/`,提供 `ProviderSet` 和 `Migrations()`,再在 `internal/modules//definition.go` 注册迁移与 管理面,最后在根 `data.ProviderSet` 中注册该模块。根 `data` 不应直接 拥有业务表 PO,也不应让一个模块引用另一个模块的私有 PO。 Root files intentionally stay in one package because they share `Data` state and reload locks. Do not split them into packages only to reduce file count. 当前内置数据模块为 `system`、`integration`、`task` 和 `payment`。其中: - `system` 只拥有 `sys_*` 系统表、系统仓储、种子和系统维护清理; - `integration` 唯一拥有 `sys_integration_configs` 表模型、配置仓储和通信默认值; - `task` 只拥有定时任务与任务日志表; - `payment` 只拥有 `pay_orders` 等支付持久化,通过 `biz/integration.PaymentConfigReader` 读取支付配置,不感知 integration 的 PO 或表结构。 配置文件迁移、数据库切换、Redis/Mongo/对象存储重载仍属于根 data 的生命周期编排, 不等同于某个业务模块的表仓储。