Skip to content

Cromemadnd/lazyent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lazyent

一个 Ent 插件,用于从 Ent Schema 生成 Domain Entity 与 DTO 定义 Protobuf Message。

主要为 Clean Architecture (Kratos) 设计模式提供支持。

Code mainly by Gemini AI.

特点

  • 自动更新字段定义,修改字段时只需修改 Ent Schema
  • 自动生成 mapper 函数,开箱即用
  • 生成行为可高度自定义化

安装与使用

先安装 protocprotoc-gen-go,并保证 protoc-gen-goPATH 中。

# Windows
choco install -y google-protobuf
choco install -y protoc-gen-go

# MacOS / Linux
brew install protobuf
brew install protoc-gen-go

# 检查是否安装成功
protoc --version
protoc-gen-go --version

然后安装 lazyent

go get github.com/Cromemadnd/lazyent@latest

然后,如果你的 generate.go 还是 ent 默认提供的,你需要更改它以使用 entc.go

/* generate.go */
package ent

//go:generate go run entc.go

然后在你的 entc.go 中集成 lazyent

/* entc.go */

//go:build ignore

package main

import (
	"log"

	"entgo.io/ent/entc"
	"entgo.io/ent/entc/gen"
	"github.com/Cromemadnd/lazyent"
)

func main() {
	// 配置生成选项
	opts := []entc.Option{
		entc.Extensions(lazyent.NewExtension(
			lazyent.Config{
				ProtoOut:     "api/user/v1", // 配置生成的 proto 文件输出目录(以项目的 go.mod 所在目录为基准,下同)
				ServiceOut:   "internal/user/service", // 配置生成的 service 文件输出目录
				BizOut:       "internal/user/biz", // 配置生成的 biz 文件输出目录
				DataOut:      "internal/user/data", // 配置生成的 data 文件输出目录
				ProtoPackage: "user.v1", // 配置生成的 proto 文件的 package
				GoPackage:    "your-app-package/user/v1;v1", // 配置生成的 Proto 文件的 go package
				SingleFile:   true, // 是否将所有 schema 的代码合并到一个文件中
			},
		)),
	}

	// 执行 Ent 代码生成
	// 假设 schema 文件位于 ./schema 目录
	if err := entc.Generate("./schema", &gen.Config{
		Header:  "// Code generated by ent, DO NOT EDIT.",
		Package: "your-app-package/app/user/internal/data/ent", // 填写 ent 目录相对 go.mod 所在目录的路径
	}, opts...); err != nil {
		log.Fatalf("running ent codegen: %v", err)
	}
}

使用时只需 go generate 即可。

注意:由于Lazyent 不会自动编译生成的 proto 文件,生成的 service_mappers_gen.go 默认情况下会报错,你需要手动编译。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages