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 (
"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 {

View File

@ -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)
}

View File

@ -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()
}