package system import ( "context" ) // SysAutoCodePackage 代码包实体 type SysAutoCodePackage struct { ID uint Desc string Label string Template string PackageName string Module string } // TemplateDirMapping 模板目录映射配置 // 用于定义模板目录到输出目录的映射关系 type TemplateDirMapping struct { // TemplateDir 模板目录名(相对于 resource/{template}/server 或 resource/{template}/web) TemplateDir string // TargetDir 目标目录(相对于项目根目录) TargetDir string // Description 描述 Description string } // KratosDDDServerMappings Kratos DDD 架构服务端目录映射 // 定义模板目录到输出目录的映射关系 // 注意:实际输出路径会在 {TargetDir}/{package}/ 下,文件名根据模板类型确定 var KratosDDDServerMappings = []TemplateDirMapping{ {TemplateDir: "biz", TargetDir: "internal/biz/{package}", Description: "Biz 层: Usecase + Repository 接口"}, {TemplateDir: "data", TargetDir: "internal/data/{package}", Description: "Data 层: Repository 实现"}, {TemplateDir: "handler", TargetDir: "internal/server/handler/{package}", Description: "Handler 层: HTTP Handler"}, {TemplateDir: "api", TargetDir: "internal/server/handler/{package}", Description: "API 层 (兼容旧模板)"}, {TemplateDir: "service", TargetDir: "internal/service/{package}", Description: "Service 层: 服务实现"}, {TemplateDir: "router", TargetDir: "internal/server/router/{package}", Description: "Router 层: 路由配置"}, {TemplateDir: "types", TargetDir: "internal/service/types/{package}/request", Description: "Types 层: 请求/响应类型"}, {TemplateDir: "model", TargetDir: "internal/data/model/{package}", Description: "Model 层: GORM Gen 模型"}, {TemplateDir: "model/request", TargetDir: "internal/service/types/{package}/request", Description: "Model Request 层: 请求类型 (兼容旧模板)"}, } // KratosDDDWebMappings Kratos DDD 架构前端目录映射 // 定义模板目录到输出目录的映射关系 // 注意:pages 输出到 {TargetDir}/{package}/{entity}/,services 输出到 {TargetDir}/ var KratosDDDWebMappings = []TemplateDirMapping{ {TemplateDir: "pages", TargetDir: "web/src/pages/{package}/{entity}", Description: "React 页面组件"}, {TemplateDir: "services", TargetDir: "web/src/services/kratos", Description: "API 服务"}, {TemplateDir: "types", TargetDir: "web/src/types/{package}", Description: "TypeScript 类型定义"}, {TemplateDir: "api", TargetDir: "web/src/services/kratos", Description: "API 服务 (兼容旧模板)"}, {TemplateDir: "view", TargetDir: "web/src/pages/{package}/{entity}", Description: "Vue 页面 (兼容旧模板)"}, } // AutoCodePackageRepo 代码包仓储接口 type AutoCodePackageRepo interface { Create(ctx context.Context, pkg *SysAutoCodePackage) error Delete(ctx context.Context, id uint) error DeleteByNames(ctx context.Context, names []string) error All(ctx context.Context) ([]SysAutoCodePackage, error) First(ctx context.Context, packageName, template string) (*SysAutoCodePackage, error) FindByPackageName(ctx context.Context, packageName string) (*SysAutoCodePackage, error) BatchCreate(ctx context.Context, pkgs []SysAutoCodePackage) error DeleteByIDs(ctx context.Context, ids []uint) error Templates(ctx context.Context, entity *SysAutoCodePackage, info interface{}, isPackage bool) (map[string]string, map[string]Ast, map[string]string, error) } // AutoCodePackageUsecase 代码包用例 type AutoCodePackageUsecase struct { repo AutoCodePackageRepo } // NewAutoCodePackageUsecase 创建代码包用例 func NewAutoCodePackageUsecase(repo AutoCodePackageRepo) *AutoCodePackageUsecase { return &AutoCodePackageUsecase{repo: repo} } // Create 创建包 func (uc *AutoCodePackageUsecase) Create(ctx context.Context, pkg *SysAutoCodePackage) error { return uc.repo.Create(ctx, pkg) } // Delete 删除包 func (uc *AutoCodePackageUsecase) Delete(ctx context.Context, id uint) error { return uc.repo.Delete(ctx, id) } // DeleteByNames 根据名称删除包 func (uc *AutoCodePackageUsecase) DeleteByNames(ctx context.Context, names []string) error { return uc.repo.DeleteByNames(ctx, names) } // All 获取所有包 func (uc *AutoCodePackageUsecase) All(ctx context.Context) ([]SysAutoCodePackage, error) { return uc.repo.All(ctx) } // First 查询包 func (uc *AutoCodePackageUsecase) First(ctx context.Context, packageName, template string) (*SysAutoCodePackage, error) { return uc.repo.First(ctx, packageName, template) } // FindByPackageName 根据包名查询 func (uc *AutoCodePackageUsecase) FindByPackageName(ctx context.Context, packageName string) (*SysAutoCodePackage, error) { return uc.repo.FindByPackageName(ctx, packageName) } // BatchCreate 批量创建 func (uc *AutoCodePackageUsecase) BatchCreate(ctx context.Context, pkgs []SysAutoCodePackage) error { return uc.repo.BatchCreate(ctx, pkgs) } // DeleteByIDs 根据ID批量删除 func (uc *AutoCodePackageUsecase) DeleteByIDs(ctx context.Context, ids []uint) error { return uc.repo.DeleteByIDs(ctx, ids) } // Templates 获取模板 func (uc *AutoCodePackageUsecase) Templates(ctx context.Context, entity *SysAutoCodePackage, info interface{}, isPackage bool) (map[string]string, map[string]Ast, map[string]string, error) { return uc.repo.Templates(ctx, entity, info, isPackage) } // GetTemplateNames 获取所有模版文件夹名称 func (uc *AutoCodePackageUsecase) GetTemplateNames(ctx context.Context) ([]string, error) { // 返回固定的模版列表 return []string{"package", "plugin"}, nil } // GetServerMappings 获取服务端目录映射 func (uc *AutoCodePackageUsecase) GetServerMappings() []TemplateDirMapping { return KratosDDDServerMappings } // GetWebMappings 获取前端目录映射 func (uc *AutoCodePackageUsecase) GetWebMappings() []TemplateDirMapping { return KratosDDDWebMappings }