From 83d9bbb5305f8ddbcdbdb6581eb597afe4b66fec Mon Sep 17 00:00:00 2001 From: suyiiyii Date: Wed, 22 Jan 2025 13:44:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E7=94=9F=E6=88=90=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 model/user.go 中添加 Querier 接口,定义了 GetByEmail 方法- 在 query/users.gen.go 中实现 Querier 接口的 GetByEmail 方法 - 修改 gen.go以使用新的 Querier 接口和 User 模型生成代码 - 将 users.gen.go 中的 ID 类型从 Int64 改为 Uint --- app/user/biz/dal/query/users.gen.go | 28 ++++++++++++++++++++++++---- app/user/biz/model/user.go | 12 +++++++++++- app/user/cmd/gorm_gen/gen.go | 11 ++++++----- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/app/user/biz/dal/query/users.gen.go b/app/user/biz/dal/query/users.gen.go index 46b9cb5..9479f89 100644 --- a/app/user/biz/dal/query/users.gen.go +++ b/app/user/biz/dal/query/users.gen.go @@ -6,6 +6,7 @@ package query import ( "context" + "strings" "gorm.io/gorm" "gorm.io/gorm/clause" @@ -16,7 +17,7 @@ import ( "gorm.io/plugin/dbresolver" - "github.com/suyiiyii/hertz101/app/user/biz/dal/model" + "github.com/suyiiyii/hertz101/app/user/biz/model" ) func newUser(db *gorm.DB, opts ...gen.DOOption) user { @@ -27,7 +28,7 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user { tableName := _user.userDo.TableName() _user.ALL = field.NewAsterisk(tableName) - _user.ID = field.NewInt64(tableName, "id") + _user.ID = field.NewUint(tableName, "id") _user.CreatedAt = field.NewTime(tableName, "created_at") _user.UpdatedAt = field.NewTime(tableName, "updated_at") _user.DeletedAt = field.NewField(tableName, "deleted_at") @@ -43,7 +44,7 @@ type user struct { userDo ALL field.Asterisk - ID field.Int64 + ID field.Uint CreatedAt field.Time UpdatedAt field.Time DeletedAt field.Field @@ -65,7 +66,7 @@ func (u user) As(alias string) *user { func (u *user) updateTableName(table string) *user { u.ALL = field.NewAsterisk(table) - u.ID = field.NewInt64(table, "id") + u.ID = field.NewUint(table, "id") u.CreatedAt = field.NewTime(table, "created_at") u.UpdatedAt = field.NewTime(table, "updated_at") u.DeletedAt = field.NewField(table, "deleted_at") @@ -167,6 +168,25 @@ type IUserDo interface { Returning(value interface{}, columns ...string) IUserDo UnderlyingDB() *gorm.DB schema.Tabler + + GetByEmail(email string) (result *model.User, err error) +} + +// GetByEmail get user by email +// +// SELECT * FROM @@table WHERE email = @email +func (u userDo) GetByEmail(email string) (result *model.User, err error) { + var params []interface{} + + var generateSQL strings.Builder + params = append(params, email) + generateSQL.WriteString("SELECT * FROM users WHERE email = ? ") + + var executeSQL *gorm.DB + executeSQL = u.UnderlyingDB().Raw(generateSQL.String(), params...).Take(&result) // ignore_security_alert + err = executeSQL.Error + + return } func (u userDo) Debug() IUserDo { diff --git a/app/user/biz/model/user.go b/app/user/biz/model/user.go index cea9dd9..73d0f79 100644 --- a/app/user/biz/model/user.go +++ b/app/user/biz/model/user.go @@ -1,9 +1,19 @@ package model -import "gorm.io/gorm" +import ( + "gorm.io/gen" + "gorm.io/gorm" +) type User struct { gorm.Model Email string `gorm:"uniqueIndex;type:varchar(255) not null"` PasswordHashed string `gorm:"type:varchar(255) not null"` } + +type Querier interface { + // GetByEmail get user by email + // + // SELECT * FROM @@table WHERE email = @email + GetByEmail(email string) (*gen.T, error) +} diff --git a/app/user/cmd/gorm_gen/gen.go b/app/user/cmd/gorm_gen/gen.go index 1835662..e0c5f51 100644 --- a/app/user/cmd/gorm_gen/gen.go +++ b/app/user/cmd/gorm_gen/gen.go @@ -1,23 +1,24 @@ package main import ( - "github.com/suyiiyii/hertz101/app/user/biz/dal/mysql" + "github.com/suyiiyii/hertz101/app/user/biz/model" "gorm.io/gen" ) func main() { - mysql.Init() + //mysql.Init() - db := mysql.DB + //db := mysql.DB g := gen.NewGenerator(gen.Config{ OutPath: "biz/dal/query", Mode: gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface, }) - g.UseDB(db) + //g.UseDB(db) - g.ApplyBasic(g.GenerateModel("users")) + //g.ApplyBasic(g.GenerateModel("users")) + g.ApplyInterface(func(model.Querier) {}, model.User{}) g.Execute() }