package repository import ( "fmt" "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) IsAdminPermissionExists(identifier interface{}) (bool, error) { var user req.AdminPermission if err := u.db.Where("id = ? OR name = ?", 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) GetAdminPermissionList(query *pb.GetAdminPermissionListRequest) ([]req.AdminPermission, int64, error) { permissions := make([]req.AdminPermission, 0) var totalCount int64 tx := u.db.Model(&req.AdminPermission{}).Order("id desc"). Preload("Roles", "status = ?", pb.StatusEnum_ENABLED) if query.Keyword != "" { tx.Where("name = ?", query.Keyword) } if base.IsStatusEnum(query.Status) { tx.Where("status = ?", query.Status) } tx.Count(&totalCount) return permissions, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&permissions).Error } func (u *Repository) GetAdminPermissionAll() ([]req.AdminPermission, error) { var permissions []req.AdminPermission return permissions, u.db.Model(&req.AdminPermission{}).Where("status = ?", pb.StatusEnum_ENABLED).Find(&permissions).Error } func (u *Repository) GetAdminPermission(query *pb.GetAdminPermissionRequest) (req.AdminPermission, error) { var permission req.AdminPermission return permission, u.db. Model(req.AdminPermission{}).Where("id = ?", query.Id). Preload("Roles", "status = ?", pb.StatusEnum_ENABLED). First(&permission).Error } func (u *Repository) CreateAdminPermission(permission req.AdminPermission, roles []int64) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() if err := tx.Create(&permission).Error; err != nil { tx.Rollback() return err } if len(roles) > 0 { if _, err := u.getAdminPermissionValidIDs(roles); err != nil { tx.Rollback() return err } permissionRoles := make([]req.AdminRole, 0) for _, ID := range roles { permissionRoles = append(permissionRoles, req.AdminRole{ID: ID}) } if err := tx.Model(&permission).Association("Roles").Append(&permissionRoles); err != nil { tx.Rollback() return err } } return tx.Commit().Error } func (u *Repository) UpdateAdminPermission(permissionId int64, reqPermission map[string]interface{}, reqRoles []int64) error { fmt.Println("reqPermission", reqPermission) fmt.Println("reqRoles", reqRoles) // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() var permission req.AdminPermission if err := tx.First(&permission, permissionId).Error; err != nil { tx.Rollback() return err } if err := tx.Model(&permission).Association("Roles").Clear(); err != nil { tx.Rollback() return err } if len(reqRoles) > 0 { if _, err := u.getAdminRoleValidIDs(reqRoles); err != nil { tx.Rollback() return err } roles := make([]req.AdminRole, 0) for _, ID := range reqRoles { roles = append(roles, req.AdminRole{ID: ID}) } if err := tx.Model(&permission).Association("Roles").Append(&roles); err != nil { tx.Rollback() return err } } if err := tx.Model(&permission).Updates(reqPermission).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error } func (u *Repository) DeleteAdminPermission(permissionId int64) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() var permission req.AdminPermission // 1.查询角色 if err := tx.First(&permission, permissionId).Error; err != nil { tx.Rollback() return err } // 2 删除关联用户 if err := tx.Model(&permission).Association("Roles").Clear(); err != nil { tx.Rollback() return err } // 4. 彻底删除 if err := tx.Model(&req.AdminPermission{}).Delete(&req.AdminPermission{ ID: permissionId, }).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error } func (u *Repository) ToggleAdminPermission(query *pb.ToggleAdminPermissionRequest) error { // 1. 开启事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() var permission req.AdminPermission // 1.查询角色 if err := tx.First(&permission, query.PermissionId).Error; err != nil { tx.Rollback() return err } if query.Status == pb.StatusEnum_DELETED { // 1.1删除关联角色 if err := tx.Model(&permission).Association("Roles").Clear(); err != nil { tx.Rollback() return err } } // enum // 2. 更新状态 if err := tx.Model(&req.AdminPermission{}).Where("id = ?", query.PermissionId).Updates(map[string]interface{}{ "status": query.Status, }).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error }