123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- 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
- }
|