113 lines
2.2 KiB
Go
113 lines
2.2 KiB
Go
package mysql
|
||
|
||
import (
|
||
"errors"
|
||
|
||
"gorm.io/gorm"
|
||
"myschools.me/heritage/heritage-api/model"
|
||
)
|
||
|
||
func UserByUserName(userName *string) (*model.User, error) {
|
||
db, err := newDB()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
var u model.User
|
||
if err := db.Where("user_name = ?", *userName).First(&u).Error; err != nil {
|
||
if err != gorm.ErrRecordNotFound {
|
||
return nil, nil
|
||
}
|
||
}
|
||
return &u, nil
|
||
}
|
||
|
||
// 获取单个用户信息,用户存在与否根据返回结果判断
|
||
func UserFirst(userID *string) (*model.User, error) {
|
||
db, err := newDB()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
var u model.User
|
||
if err := db.Where("id = ?", *userID).First(&u).Error; err != nil {
|
||
if err != gorm.ErrRecordNotFound {
|
||
return nil, err
|
||
}
|
||
}
|
||
return &u, nil
|
||
}
|
||
|
||
func UserRoleIDByUserID(userID *string) (*string, bool, error) {
|
||
db, err := newDB()
|
||
if err != nil {
|
||
return nil, false, err
|
||
}
|
||
|
||
var u model.User
|
||
if err := db.Select("id", "role_id").Where("id = ?", *userID).First(&u).Error; err != nil {
|
||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||
return nil, false, nil
|
||
}
|
||
return nil, false, err
|
||
}
|
||
return &u.RoleID, true, nil
|
||
}
|
||
|
||
func UserCount() (*int64, error) {
|
||
db, err := newDB()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
var count int64
|
||
if err := db.Model(&model.User{}).Count(&count).Error; err != nil {
|
||
return nil, err
|
||
}
|
||
return &count, nil
|
||
}
|
||
|
||
func UserCreate(obj *model.User) (*model.User, error) {
|
||
db, err := newDB()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
if err := db.Create(obj).Error; err != nil {
|
||
return nil, err
|
||
}
|
||
return obj, nil
|
||
}
|
||
|
||
func UserList(page, pageSize int) ([]model.User, int64, error) {
|
||
db, err := newDB()
|
||
if err != nil {
|
||
return nil, 0, err
|
||
}
|
||
|
||
var users []model.User
|
||
var total int64
|
||
|
||
// 统计总数
|
||
if err := db.Model(&model.User{}).Count(&total).Error; err != nil {
|
||
return nil, 0, err
|
||
}
|
||
|
||
// 分页查询
|
||
offset := (page - 1) * pageSize
|
||
if err := db.Offset(offset).Limit(pageSize).Find(&users).Error; err != nil {
|
||
return nil, 0, err
|
||
}
|
||
|
||
return users, total, nil
|
||
}
|
||
|
||
// 用户更新,可以更新所有项,不作限制,由service层判断
|
||
func UserUpdate(userID *string, obj map[string]any) error {
|
||
db, err := newDB()
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
return db.Model(&model.User{}).Where("id = ?", *userID).Updates(obj).Error
|
||
}
|