user/biz/dal/db/user.go
timerzz 5c386c8c0c chore: 将模块路径从gitlab.com迁移到gitee.com
更新了所有文件中的模块导入路径,将`gitlab.com/kedaya_mp/user`替换为`gitee.com/kedaya_mp/user`,以将项目从GitLab迁移到Gitee平台。
2025-04-23 16:03:09 +08:00

95 lines
1.9 KiB
Go

package db
import (
"errors"
"gitee.com/kedaya_mp/user/biz/model/common"
"gorm.io/gorm"
)
type Scoper interface {
Scope(db *gorm.DB) *gorm.DB
}
type UserStore interface {
Create(*common.User) (*common.User, error)
Find(Scoper, ...string) (*common.User, error)
Exist(Scoper) (bool, error)
Update(*common.User, ...string) error
AutoMigrate() error
}
type userStore struct {
db *gorm.DB
}
func NewUserStore(db *gorm.DB) UserStore {
return &userStore{db: db}
}
func (s *userStore) AutoMigrate() error {
return s.db.AutoMigrate(&common.User{})
}
type FindUserQuery struct {
ID int64
Phone string
WxUnionID string
}
func (f *FindUserQuery) Scope(db *gorm.DB) *gorm.DB {
if f.ID != 0 {
db = db.Where("id = ?", f.ID)
}
if f.Phone != "" {
db = db.Where("phone = ?", f.Phone)
}
if f.WxUnionID != "" {
db = db.Where("wx_union_id = ?", f.WxUnionID)
}
return db
}
// Create 创建用户
func (s *userStore) Create(u *common.User) (*common.User, error) {
if err := s.db.Create(u).Error; err != nil {
return nil, err
}
return u, nil
}
// Find 查找用户
func (s *userStore) Find(scoper Scoper, selects ...string) (*common.User, error) {
var dbUser common.User
db := s.db
if len(selects) > 0 {
db = db.Select(selects)
}
if err := scoper.Scope(db).First(&dbUser).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &dbUser, nil
}
// Exist 检查用户是否存在
func (s *userStore) Exist(scoper Scoper) (bool, error) {
var count int64
if err := scoper.Scope(s.db).Model(&common.User{}).Count(&count).Error; err != nil {
return false, err
}
return count > 0, nil
}
// Update 更新用户信息
func (s *userStore) Update(u *common.User, selects ...string) error {
return s.db.Transaction(func(tx *gorm.DB) error {
if len(selects) > 0 {
tx = tx.Select(selects)
}
return tx.Where("id =?", u.ID).Updates(u).Error
})
}