137 lines
5.8 KiB
Go
137 lines
5.8 KiB
Go
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
|
||
}
|