kra/internal/biz/system/auto_code_package.go

137 lines
5.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}