Some checks failed
CI / Build & Test (push) Failing after 1m31s
- Add user management endpoints (list/create/get/update/delete) with pagination and search - Add dashboard stats endpoint with tenant/user/online counts and growth metrics - Add tenant resolver middleware for multi-tenant request scoping - Add i18n kernel with zh/en message files and AcceptLanguage middleware - Add WebSocket hub/handler for real-time communication - Add job scheduler kernel with cron support - Add plugin sandbox for isolated execution - Add storage kernel (local filesystem) - Add event bus kernel for pub/sub - Add cache kernel abstraction - Add database migration runner and version upgrade checker - Add rate limiting middleware with Redis backend - Add SQL migrations for rbac, audit_logs, settings, notifications, examples - Extend user repository with list/delete/count operations - Register all module routes with tenant resolver
2.0 KiB
2.0 KiB
Plugin 系统规范
模块边界
plugin 包定义插件的契约与注册中心,是所有业务模块(包括内核模块和第三方插件)的统一接入方式。
属于本模块: Plugin 接口定义、注册中心、生命周期管理 不属于本模块: 具体插件的业务逻辑
Plugin 接口
每个插件必须实现:
type Plugin interface {
Metadata() Metadata // 身份标识(name/version/description)
FxOption() fx.Option // 依赖注入(提供 repo/service/handler)
SetupRoutes(engine, authMW, tenantResolver) // HTTP 路由注册
Init() error // 启动钩子(worker/cache/外部连接)
MigrationsFS() fs.FS // 插件自主迁移(独立 schema_migrations_{name} 表)
}
生命周期
1. app.go 启动 → fx 解析所有 Module → 依赖注入
2. OnStart → 核心迁移 → 插件迁移 → plugin.InitAll()
3. HTTP Server 启动 → 请求路由到各插件 Handler
4. OnStop → 优雅关闭
创建新插件步骤
- 在
internal/modules/<name>/创建 4 层目录 - domain/ — 定义实体 + Repository 接口(零外部依赖)
- infrastructure/ — GORM Repo 实现 + migrate.go
- application/ — Service 编排
- interfaces/ — Handler + Routes + Plugin 实现
- 在
app.go的NewApp()注册 fx.Module - 在
newEngine()调用plugin.SetupRoutes()
插件自主迁移
- 每个插件的迁移使用独立表:
schema_migrations_{pluginName} - 插件通过
MigrationsFS()返回嵌入的迁移文件 FS - 返回 nil 表示无迁移
- 迁移在核心迁移之后、Init() 之前执行
路由约定
- 插件路由前缀:
/api/v1/{module}/ - 必须经过 authMW(JWT 认证)+ MultiTenant(租户识别)
- 公开接口(如注册)不走 authMW
禁止
- 插件不得 import 其他插件的内部代码
- 插件不得直接操作其他插件的数据库表
- 插件间通信走事件总线(kernel/eventbus)
- kernel/ 不得 import 任何插件代码