Files
nl_cms-api/internal/dao/user_methods.go
2025-07-29 12:45:07 +08:00

121 lines
3.0 KiB
Go

package dao
import (
"context"
"cms-api/internal/model"
)
// GetByAccount 根据账号获取用户
func (dao *UserDao) GetByAccount(ctx context.Context, account string) (*model.User, error) {
var user *model.User
err := dao.Ctx(ctx).Where(dao.Columns().Account, account).Scan(&user)
if err != nil {
return nil, err
}
return user, nil
}
// GetByEmail 根据邮箱获取用户
func (dao *UserDao) GetByEmail(ctx context.Context, email string) (*model.User, error) {
var user *model.User
err := dao.Ctx(ctx).Where(dao.Columns().Email, email).Scan(&user)
if err != nil {
return nil, err
}
return user, nil
}
// GetById 根据ID获取用户
func (dao *UserDao) GetById(ctx context.Context, id int) (*model.User, error) {
var user *model.User
err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Scan(&user)
if err != nil {
return nil, err
}
return user, nil
}
// List 获取用户列表
func (dao *UserDao) List(ctx context.Context, req *model.UserListRequest) ([]*model.User, int, error) {
var (
users []*model.User
total int
db = dao.Ctx(ctx)
)
// 添加查询条件
if req.RoleId > 0 {
db = db.Where(dao.Columns().RoleId, req.RoleId)
}
if req.Status >= 0 {
db = db.Where(dao.Columns().Status, req.Status)
}
if req.Keyword != "" {
db = db.Where(dao.Columns().Account+" LIKE ? OR "+dao.Columns().NickName+" LIKE ? OR "+dao.Columns().Email+" LIKE ?",
"%"+req.Keyword+"%", "%"+req.Keyword+"%", "%"+req.Keyword+"%")
}
// 获取总数
count, err := db.Count()
if err != nil {
return nil, 0, err
}
total = count
// 分页查询
offset := (req.Page - 1) * req.PageSize
err = db.Order(dao.Columns().CreatedAt + " DESC").
Limit(req.PageSize).
Offset(offset).
Scan(&users)
if err != nil {
return nil, 0, err
}
return users, total, nil
}
// Create 创建用户
func (dao *UserDao) Create(ctx context.Context, user *model.User) (int64, error) {
result, err := dao.Ctx(ctx).Data(user).Insert()
if err != nil {
return 0, err
}
id, err := result.LastInsertId()
if err != nil {
return 0, err
}
return id, nil
}
// Update 更新用户
func (dao *UserDao) Update(ctx context.Context, id int, data interface{}) error {
_, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(data).Update()
return err
}
// Delete 删除用户
func (dao *UserDao) Delete(ctx context.Context, id int) error {
_, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Delete()
return err
}
// UpdateStatus 更新用户状态
func (dao *UserDao) UpdateStatus(ctx context.Context, id int, status int) error {
_, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(map[string]interface{}{
dao.Columns().Status: status,
}).Update()
return err
}
// GetCount 获取用户总数
func (dao *UserDao) GetCount(ctx context.Context) (int, error) {
count, err := dao.Ctx(ctx).Count()
return count, err
}
// GetCountByStatus 根据状态获取用户数
func (dao *UserDao) GetCountByStatus(ctx context.Context, status int) (int, error) {
count, err := dao.Ctx(ctx).Where(dao.Columns().Status, status).Count()
return count, err
}