后端重构

This commit is contained in:
Yvan
2026-01-14 14:34:49 +08:00
parent f5f77b32fe
commit 30842b42e5
274 changed files with 39754 additions and 1005 deletions
+217
View File
@@ -0,0 +1,217 @@
{{- if .IsAdd}}
// 在 {{.StructName}}Repo 接口中新增如下方法
// 请根据实际需求添加
{{- else}}
package {{.Package}}
import (
{{- if not .OnlyTemplate }}
"context"
{{- if .IsTree }}
"errors"
{{- end }}
"{{.Module}}/internal/data/model/{{.Package}}"
{{- if not .IsTree}}
{{.Package}}Req "{{.Module}}/internal/service/types/{{.Package}}/request"
{{- end }}
"github.com/go-kratos/kratos/v2/log"
"gorm.io/gorm"
{{- end }}
)
// {{.StructName}}Repo {{.Description}}仓储接口
type {{.StructName}}Repo interface {
{{- if not .OnlyTemplate }}
Create(ctx context.Context, {{.Abbreviation}} *{{.Package}}.{{.StructName}}) error
Delete(ctx context.Context, {{.PrimaryField.FieldJson}} {{.PrimaryField.FieldType}}{{- if .AutoCreateResource -}}, userID uint{{- end -}}) error
DeleteByIds(ctx context.Context, {{.PrimaryField.FieldJson}}s []{{.PrimaryField.FieldType}}{{- if .AutoCreateResource -}}, deletedBy uint{{- end -}}) error
{{- if .AutoCreateResource }}
// DeleteWithTx 在事务中删除记录(用于 AutoCreateResource 场景)
DeleteWithTx(ctx context.Context, tx *gorm.DB, {{.PrimaryField.FieldJson}} {{.PrimaryField.FieldType}}) error
// DeleteByIdsWithTx 在事务中批量删除记录(用于 AutoCreateResource 场景)
DeleteByIdsWithTx(ctx context.Context, tx *gorm.DB, {{.PrimaryField.FieldJson}}s []{{.PrimaryField.FieldType}}) error
{{- end }}
Update(ctx context.Context, {{.Abbreviation}} *{{.Package}}.{{.StructName}}) error
FindByID(ctx context.Context, {{.PrimaryField.FieldJson}} {{.PrimaryField.FieldType}}) (*{{.Package}}.{{.StructName}}, error)
{{- if .IsTree }}
List(ctx context.Context) ([]*{{.Package}}.{{.StructName}}, error)
HasChildren(ctx context.Context, {{.PrimaryField.FieldJson}} {{.PrimaryField.FieldType}}) (bool, error)
{{- else }}
List(ctx context.Context, req *{{.Package}}Req.{{.StructName}}Search) ([]*{{.Package}}.{{.StructName}}, int64, error)
{{- end }}
{{- if .HasDataSource }}
GetDataSource(ctx context.Context) (map[string][]map[string]any, error)
{{- end }}
{{- end }}
{{- if .HasCustomMethods }}
{{ GenerateCustomMethodInterface .CustomMethods .StructName .Package }}
{{- end }}
}
// {{.StructName}}Usecase {{.Description}}用例
type {{.StructName}}Usecase struct {
repo {{.StructName}}Repo
log *log.Helper
}
// New{{.StructName}}Usecase 创建{{.Description}}用例
func New{{.StructName}}Usecase(repo {{.StructName}}Repo, logger log.Logger) *{{.StructName}}Usecase {
return &{{.StructName}}Usecase{
repo: repo,
log: log.NewHelper(logger),
}
}
{{- if not .OnlyTemplate }}
// Create 创建{{.Description}}
func (uc *{{.StructName}}Usecase) Create(ctx context.Context, {{.Abbreviation}} *{{.Package}}.{{.StructName}}) error {
uc.log.WithContext(ctx).Infof("创建{{.Description}}")
if err := uc.repo.Create(ctx, {{.Abbreviation}}); err != nil {
uc.log.WithContext(ctx).Errorf("创建{{.Description}}失败: %v", err)
return err
}
return nil
}
// Delete 删除{{.Description}}
func (uc *{{.StructName}}Usecase) Delete(ctx context.Context, {{.PrimaryField.FieldJson}} {{.PrimaryField.FieldType}}{{- if .AutoCreateResource -}}, userID uint{{- end -}}) error {
uc.log.WithContext(ctx).Infof("删除{{.Description}}, {{.PrimaryField.FieldJson}}: %v", {{.PrimaryField.FieldJson}})
{{- if .IsTree }}
// 检查是否有子节点
hasChildren, err := uc.repo.HasChildren(ctx, {{.PrimaryField.FieldJson}})
if err != nil {
uc.log.WithContext(ctx).Errorf("检查子节点失败: %v", err)
return err
}
if hasChildren {
uc.log.WithContext(ctx).Warn("此节点存在子节点不允许删除")
return errors.New("此节点存在子节点不允许删除")
}
{{- end }}
if err := uc.repo.Delete(ctx, {{.PrimaryField.FieldJson}}{{- if .AutoCreateResource -}}, userID{{- end -}}); err != nil {
uc.log.WithContext(ctx).Errorf("删除{{.Description}}失败: %v", err)
return err
}
return nil
}
// DeleteByIds 批量删除{{.Description}}
func (uc *{{.StructName}}Usecase) DeleteByIds(ctx context.Context, {{.PrimaryField.FieldJson}}s []{{.PrimaryField.FieldType}}{{- if .AutoCreateResource -}}, deletedBy uint{{- end -}}) error {
uc.log.WithContext(ctx).Infof("批量删除{{.Description}}, 数量: %d", len({{.PrimaryField.FieldJson}}s))
if err := uc.repo.DeleteByIds(ctx, {{.PrimaryField.FieldJson}}s{{- if .AutoCreateResource -}}, deletedBy{{- end -}}); err != nil {
uc.log.WithContext(ctx).Errorf("批量删除{{.Description}}失败: %v", err)
return err
}
return nil
}
{{- if .AutoCreateResource }}
// DeleteWithTx 在事务中删除{{.Description}}(用于 AutoCreateResource 场景)
// @param ctx 上下文
// @param tx 事务对象
// @param {{.PrimaryField.FieldJson}} 主键ID
// @return error 删除失败时返回错误
func (uc *{{.StructName}}Usecase) DeleteWithTx(ctx context.Context, tx *gorm.DB, {{.PrimaryField.FieldJson}} {{.PrimaryField.FieldType}}) error {
uc.log.WithContext(ctx).Infof("事务删除{{.Description}}, {{.PrimaryField.FieldJson}}: %v", {{.PrimaryField.FieldJson}})
{{- if .IsTree }}
// 检查是否有子节点
hasChildren, err := uc.repo.HasChildren(ctx, {{.PrimaryField.FieldJson}})
if err != nil {
uc.log.WithContext(ctx).Errorf("检查子节点失败: %v", err)
return err
}
if hasChildren {
uc.log.WithContext(ctx).Warn("此节点存在子节点不允许删除")
return errors.New("此节点存在子节点不允许删除")
}
{{- end }}
if err := uc.repo.DeleteWithTx(ctx, tx, {{.PrimaryField.FieldJson}}); err != nil {
uc.log.WithContext(ctx).Errorf("事务删除{{.Description}}失败: %v", err)
return err
}
return nil
}
// DeleteByIdsWithTx 在事务中批量删除{{.Description}}(用于 AutoCreateResource 场景)
// @param ctx 上下文
// @param tx 事务对象
// @param {{.PrimaryField.FieldJson}}s 主键ID列表
// @return error 删除失败时返回错误
func (uc *{{.StructName}}Usecase) DeleteByIdsWithTx(ctx context.Context, tx *gorm.DB, {{.PrimaryField.FieldJson}}s []{{.PrimaryField.FieldType}}) error {
uc.log.WithContext(ctx).Infof("事务批量删除{{.Description}}, 数量: %d", len({{.PrimaryField.FieldJson}}s))
if err := uc.repo.DeleteByIdsWithTx(ctx, tx, {{.PrimaryField.FieldJson}}s); err != nil {
uc.log.WithContext(ctx).Errorf("事务批量删除{{.Description}}失败: %v", err)
return err
}
return nil
}
{{- end }}
// Update 更新{{.Description}}
func (uc *{{.StructName}}Usecase) Update(ctx context.Context, {{.Abbreviation}} *{{.Package}}.{{.StructName}}) error {
uc.log.WithContext(ctx).Infof("更新{{.Description}}")
if err := uc.repo.Update(ctx, {{.Abbreviation}}); err != nil {
uc.log.WithContext(ctx).Errorf("更新{{.Description}}失败: %v", err)
return err
}
return nil
}
// FindByID 根据ID获取{{.Description}}
func (uc *{{.StructName}}Usecase) FindByID(ctx context.Context, {{.PrimaryField.FieldJson}} {{.PrimaryField.FieldType}}) (*{{.Package}}.{{.StructName}}, error) {
uc.log.WithContext(ctx).Debugf("查询{{.Description}}, {{.PrimaryField.FieldJson}}: %v", {{.PrimaryField.FieldJson}})
result, err := uc.repo.FindByID(ctx, {{.PrimaryField.FieldJson}})
if err != nil {
uc.log.WithContext(ctx).Errorf("查询{{.Description}}失败: %v", err)
return nil, err
}
return result, nil
}
{{- if .IsTree }}
// List 获取{{.Description}}列表(树形)
func (uc *{{.StructName}}Usecase) List(ctx context.Context) ([]*{{.Package}}.{{.StructName}}, error) {
uc.log.WithContext(ctx).Debug("获取{{.Description}}树形列表")
result, err := uc.repo.List(ctx)
if err != nil {
uc.log.WithContext(ctx).Errorf("获取{{.Description}}列表失败: %v", err)
return nil, err
}
return result, nil
}
{{- else }}
// List 分页获取{{.Description}}列表
func (uc *{{.StructName}}Usecase) List(ctx context.Context, req *{{.Package}}Req.{{.StructName}}Search) ([]*{{.Package}}.{{.StructName}}, int64, error) {
uc.log.WithContext(ctx).Debugf("获取{{.Description}}列表, 页码: %d, 每页: %d", req.Page, req.PageSize)
list, total, err := uc.repo.List(ctx, req)
if err != nil {
uc.log.WithContext(ctx).Errorf("获取{{.Description}}列表失败: %v", err)
return nil, 0, err
}
return list, total, nil
}
{{- end }}
{{- if .HasDataSource }}
// GetDataSource 获取{{.Description}}数据源
func (uc *{{.StructName}}Usecase) GetDataSource(ctx context.Context) (map[string][]map[string]any, error) {
uc.log.WithContext(ctx).Debug("获取{{.Description}}数据源")
result, err := uc.repo.GetDataSource(ctx)
if err != nil {
uc.log.WithContext(ctx).Errorf("获取{{.Description}}数据源失败: %v", err)
return nil, err
}
return result, nil
}
{{- end }}
{{- end }}
// GetPublic 获取{{.Description}}公开数据
func (uc *{{.StructName}}Usecase) GetPublic(ctx context.Context) {
// 此方法为获取公开数据
// 请自行实现
}
{{- end }}
+14
View File
@@ -0,0 +1,14 @@
{{- if .IsAdd }}
// 请在 {{.Package}} 包的 enter.go 文件中的 ProviderSet 添加以下内容:
// New{{.StructName}}Usecase,
{{- else }}
package {{.Package}}
import "github.com/google/wire"
// ProviderSet is {{.Package}} biz providers.
// 包含 {{.Description}} 相关的业务逻辑用例
var ProviderSet = wire.NewSet(
New{{.StructName}}Usecase,
)
{{- end }}