feat(user): 生成用户查询接口并优化模型

- 在 model/user.go 中添加 Querier 接口,定义了 GetByEmail 方法- 在 query/users.gen.go 中实现 Querier 接口的 GetByEmail 方法
- 修改 gen.go以使用新的 Querier 接口和 User 模型生成代码
- 将 users.gen.go 中的 ID 类型从 Int64 改为 Uint
This commit is contained in:
suyiiyii 2025-01-22 13:44:26 +08:00
parent 500f5b3339
commit 83d9bbb530
Signed by: suyiiyii
GPG Key ID: 044704CB29B8AD85
3 changed files with 41 additions and 10 deletions

View File

@ -6,6 +6,7 @@ package query
import ( import (
"context" "context"
"strings"
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause" "gorm.io/gorm/clause"
@ -16,7 +17,7 @@ import (
"gorm.io/plugin/dbresolver" "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 { 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() tableName := _user.userDo.TableName()
_user.ALL = field.NewAsterisk(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.CreatedAt = field.NewTime(tableName, "created_at")
_user.UpdatedAt = field.NewTime(tableName, "updated_at") _user.UpdatedAt = field.NewTime(tableName, "updated_at")
_user.DeletedAt = field.NewField(tableName, "deleted_at") _user.DeletedAt = field.NewField(tableName, "deleted_at")
@ -43,7 +44,7 @@ type user struct {
userDo userDo
ALL field.Asterisk ALL field.Asterisk
ID field.Int64 ID field.Uint
CreatedAt field.Time CreatedAt field.Time
UpdatedAt field.Time UpdatedAt field.Time
DeletedAt field.Field DeletedAt field.Field
@ -65,7 +66,7 @@ func (u user) As(alias string) *user {
func (u *user) updateTableName(table string) *user { func (u *user) updateTableName(table string) *user {
u.ALL = field.NewAsterisk(table) 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.CreatedAt = field.NewTime(table, "created_at")
u.UpdatedAt = field.NewTime(table, "updated_at") u.UpdatedAt = field.NewTime(table, "updated_at")
u.DeletedAt = field.NewField(table, "deleted_at") u.DeletedAt = field.NewField(table, "deleted_at")
@ -167,6 +168,25 @@ type IUserDo interface {
Returning(value interface{}, columns ...string) IUserDo Returning(value interface{}, columns ...string) IUserDo
UnderlyingDB() *gorm.DB UnderlyingDB() *gorm.DB
schema.Tabler 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 { func (u userDo) Debug() IUserDo {

View File

@ -1,9 +1,19 @@
package model package model
import "gorm.io/gorm" import (
"gorm.io/gen"
"gorm.io/gorm"
)
type User struct { type User struct {
gorm.Model gorm.Model
Email string `gorm:"uniqueIndex;type:varchar(255) not null"` Email string `gorm:"uniqueIndex;type:varchar(255) not null"`
PasswordHashed string `gorm:"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)
}

View File

@ -1,23 +1,24 @@
package main package main
import ( import (
"github.com/suyiiyii/hertz101/app/user/biz/dal/mysql" "github.com/suyiiyii/hertz101/app/user/biz/model"
"gorm.io/gen" "gorm.io/gen"
) )
func main() { func main() {
mysql.Init() //mysql.Init()
db := mysql.DB //db := mysql.DB
g := gen.NewGenerator(gen.Config{ g := gen.NewGenerator(gen.Config{
OutPath: "biz/dal/query", OutPath: "biz/dal/query",
Mode: gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface, 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() g.Execute()
} }