package repository import ( "fmt" "github.com/pkg/errors" "gorm.io/gorm" "sghgogs.com/micro/shopping-service/domain/model/base" req "sghgogs.com/micro/shopping-service/domain/model/request" pb "sghgogs.com/micro/shopping-service/proto" "sghgogs.com/micro/shopping-service/utils" ) func (u *Repository) IsAdminUserExists(identifier interface{}) (bool, error) { var user req.User if err := u.db. Where("id = ? OR username = ?", identifier, identifier). Where("group_id", utils.AdminUserGroupID). Select("id, username"). First(&user).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return false, nil // 记录不存在,账号不存在 } return false, err // 发生其他错误 } return true, nil } func (u *Repository) GetAdminUserList(query *pb.GetAdminUserListRequest) ([]*req.User, int64, error) { tx := u.db.Model(&req.User{}). Where("group_id", 1). Order("id desc") if query.Keyword != "" { tx.Where("username = ? OR phone_number = ?", query.Keyword, query.Keyword) } if base.IsStatusEnum(query.Status) { tx.Where("status = ?", query.Status) } var totalCount int64 tx.Count(&totalCount) users := make([]*req.User, 0) return users, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&users).Error } func (u *Repository) GetAllAdminUser() ([]*req.User, error) { users := make([]*req.User, 0) return users, u.db.Model(&req.User{}). Select("id, username"). Where("group_id = ? AND status = ?", 1, pb.StatusEnum_ENABLED). Order("id desc"). Find(&users).Error } func (u *Repository) GetAdminUser(userID int64) (*req.User, error) { var user *req.User return user, u.db. Where("id = ? AND status = ? AND group_id = ?", userID, pb.StatusEnum_ENABLED, utils.AdminUserGroupID). Select("id, username, phone_number, email, avatar, created_at, updated_at, status"). Preload("Roles"). Find(&user).Error } func (u *Repository) CreateAdminUser(roleIDs []int64, user *req.User) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() result := tx.Model(&req.User{}).Create(&user) if err := result.Error; err != nil { tx.Rollback() return err } if len(roleIDs) > 0 { if _, err := u.getRoleValidIDs(roleIDs); err != nil { tx.Rollback() return err } roles := make([]req.Role, 0) for _, ID := range roleIDs { roles = append(roles, req.Role{ID: ID}) } if err := tx.Model(&user).Association("Roles").Append(&roles); err != nil { tx.Rollback() return err } } return tx.Commit().Error } func (u *Repository) UpdateAdminUser(userID int64, roleIDs []int64, data map[string]interface{}) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() var user req.User if err := tx.First(&user, userID).Error; err != nil { tx.Rollback() return err } if err := tx.Model(&user).Association("Roles").Clear(); err != nil { tx.Rollback() return err } // 角色关联 if len(roleIDs) > 0 { if _, err := u.getRoleValidIDs(roleIDs); err != nil { tx.Rollback() return err } roles := make([]req.Role, 0) for _, ID := range roleIDs { roles = append(roles, req.Role{ID: ID}) } if err := tx.Model(&user).Association("Roles").Append(&roles); err != nil { tx.Rollback() return err } } if err := tx.Model(&req.User{}).Where("id = ?", userID).Updates(data).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error } func (u *Repository) ToggleAdminUser(userID int64, enum pb.StatusEnum, data map[string]interface{}) error { // pb.StatusEnum_DELETED {} fmt.Println("data", data) // 1. 开启事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() var user req.User // 1.查询角色 if err := tx.First(&user, userID).Error; err != nil { tx.Rollback() return err } if enum == pb.StatusEnum_DELETED { // 1.1删除关联角色 if err := tx.Model(&user).Association("Roles").Clear(); err != nil { tx.Rollback() return err } } // 2. 更新状态 if err := tx.Model(&req.User{}).Where("id = ?", userID).Updates(data).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error } func (u *Repository) DeleteAdminUser(userID int64) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() var user req.User if err := tx.First(&user, userID).Error; err != nil { tx.Rollback() return err } if err := tx.Model(&user).Association("Roles").Clear(); err != nil { tx.Rollback() return err } if err := tx.Model(&req.User{}).Unscoped().Delete(&req.User{ ID: userID, }).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error }