123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- package repository
- import (
- "github.com/pkg/errors"
- "gorm.io/gorm"
- "sghgogs.com/sghblog/authorization-service/domain/model/base"
- req "sghgogs.com/sghblog/authorization-service/domain/model/request"
- pb "sghgogs.com/sghblog/authorization-service/proto"
- )
- func (u *Repository) GetAdminUser(userId int64) (req.AdminUser, error) {
- var user req.AdminUser
- return user, u.db.Where("id = ? ", userId).
- Preload("Roles", "status = ?", pb.StatusEnum_ENABLED).
- Preload("Teams", "status = ?", pb.StatusEnum_ENABLED).
- First(&user).Error
- }
- func (u *Repository) GetAdminUserFind(name string) (req.AdminUser, error) {
- var user req.AdminUser
- return user, u.db.Where("username = ?", name).First(&user).Error
- }
- func (u *Repository) RetrieveEnabledUsers() ([]req.AdminUser, error) {
- users := make([]req.AdminUser, 0)
- return users, u.db.Model(req.AdminUser{}).
- Order("id desc").
- Select("ID", "Username").
- Where("status = ?", pb.StatusEnum_ENABLED).
- Find(&users).Error
- }
- func (u *Repository) ListAdminUsers(query *pb.ListAdminUsersRequest) ([]req.AdminUser, int64, error) {
- var totalCount int64
- tx := u.db.Model(&req.AdminUser{}).Order("id desc").
- Preload("Roles", "status = ?", pb.StatusEnum_ENABLED).
- Preload("Teams", "status = ?", pb.StatusEnum_ENABLED)
- if query.Keyword != "" {
- tx.Where("username = ? OR phone_number = ?", query.Keyword, query.Keyword)
- }
- if base.IsStatusEnum(query.Status) {
- tx.Where("status = ?", query.Status)
- }
- tx.Count(&totalCount)
- users := make([]req.AdminUser, 0)
- return users, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&users).Error
- }
- func (u *Repository) CreateAdminUser(user *req.AdminUser, adminRoles []int64, adminTeams []int64) error {
- // 开始事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- if err := tx.Create(&user).Error; err != nil {
- tx.Rollback()
- return err
- }
- // 角色关联
- if len(adminRoles) > 0 {
- if _, err := u.getAdminRoleValidIDs(adminRoles); err != nil {
- tx.Rollback()
- return err
- }
- roles := make([]req.AdminRole, 0)
- for _, ID := range adminRoles {
- roles = append(roles, req.AdminRole{ID: ID})
- }
- if err := tx.Model(&user).Association("Roles").Append(&roles); err != nil {
- tx.Rollback()
- return err
- }
- }
- if len(adminTeams) > 0 {
- if _, err := u.getAdminTeamValidIDs(adminTeams); err != nil {
- tx.Rollback()
- return err
- }
- teams := make([]req.AdminTeam, 0)
- for _, ID := range adminTeams {
- teams = append(teams, req.AdminTeam{ID: ID})
- }
- if err := tx.Model(&user).Association("Teams").Append(&teams); err != nil {
- tx.Rollback()
- return err
- }
- }
- return tx.Commit().Error
- }
- func (u *Repository) IsAdminUserExists(identifier interface{}) (bool, error) {
- var user req.AdminUser
- if err := u.db.Where("id = ? OR username = ?", identifier, identifier).First(&user).Error; err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return false, nil // 记录不存在,账号不存在
- }
- return false, err // 发生其他错误
- }
- return true, nil
- }
- func (u *Repository) UpdateAdminUser(updateUser *pb.UpdateAdminUserRequest) error {
- // updateUser.
- // 1. 开启事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- var user req.AdminUser
- // 1.查询角色
- if err := tx.First(&user, updateUser.Id).Error; err != nil {
- tx.Rollback()
- return err
- }
- if err := tx.Model(&user).Association("Teams").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- if len(updateUser.Teams) > 0 {
- if _, err := u.getAdminTeamValidIDs(updateUser.Teams); err != nil {
- tx.Rollback()
- return err
- }
- teams := make([]req.AdminTeam, 0)
- for _, ID := range updateUser.Teams {
- teams = append(teams, req.AdminTeam{
- ID: ID,
- })
- }
- if err := tx.Model(&user).Association("Teams").Append(&teams); err != nil {
- tx.Rollback()
- return err
- }
- }
- if err := tx.Model(&user).Association("Roles").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- if len(updateUser.Roles) > 0 {
- if _, err := u.getAdminRoleValidIDs(updateUser.Roles); err != nil {
- tx.Rollback()
- return err
- }
- // 移除关联
- roles := make([]req.AdminRole, 0)
- for _, ID := range updateUser.Roles {
- roles = append(roles, req.AdminRole{
- ID: ID,
- })
- }
- // 重新关联
- if err := tx.Model(&user).Association("Roles").Append(&roles); err != nil {
- tx.Rollback()
- return err
- }
- }
- if err := tx.Model(&user).Updates(map[string]interface{}{
- "phone_number": updateUser.PhoneNumber,
- "email": updateUser.Email,
- "avatar": updateUser.Avatar,
- }).Error; err != nil {
- tx.Rollback()
- return err
- }
- return tx.Commit().Error
- }
- func (u *Repository) DeleteAdminUser(userId int64) error {
- // 1. 开启事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- var user req.AdminUser
- // 1.查询角色
- 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
- }
- // 1.2移除关联团队
- if err := tx.Model(&user).Association("Teams").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- if err := tx.Model(&req.AdminUser{}).Delete(&req.AdminUser{
- ID: userId,
- }).Error; err != nil {
- tx.Rollback()
- return err
- }
- return tx.Commit().Error
- }
- func (u *Repository) ToggleAdminUser(adminUser *pb.ToggleAdminUserRequest) error {
- // 1. 开启事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- var user req.AdminUser
- // 1.查询角色
- if err := tx.First(&user, adminUser.UserId).Error; err != nil {
- tx.Rollback()
- return err
- }
- if adminUser.Status == pb.StatusEnum_DELETED {
- // 1.1删除关联角色
- if err := tx.Model(&user).Association("Roles").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- // 1.2移除关联团队
- if err := tx.Model(&user).Association("Teams").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- }
- // enum
- // 2. 更新状态
- if err := tx.Model(&req.AdminUser{}).Where("id = ?", adminUser.UserId).Updates(map[string]interface{}{
- "status": adminUser.Status,
- }).Error; err != nil {
- tx.Rollback()
- return err
- }
- return tx.Commit().Error
- }
|