package storage import ( "goalfymax-admin/internal/models" "gorm.io/gorm" ) // RoleStorage 角色存储接口 type RoleStorage interface { Create(role *models.Role) error GetByID(id uint) (*models.Role, error) GetByName(name string) (*models.Role, error) Update(role *models.Role) error Delete(id uint) error List(req *models.RoleListRequest) ([]models.Role, int64, error) UpdateStatus(id uint, status int) error } type roleStorage struct { db *gorm.DB } // NewRoleStorage 创建角色存储实例 func NewRoleStorage() RoleStorage { return &roleStorage{db: DB} } // Create 创建角色 func (s *roleStorage) Create(role *models.Role) error { return s.db.Create(role).Error } // GetByID 根据ID获取角色 func (s *roleStorage) GetByID(id uint) (*models.Role, error) { var role models.Role err := s.db.First(&role, id).Error if err != nil { return nil, err } return &role, nil } // GetByName 根据名称获取角色 func (s *roleStorage) GetByName(name string) (*models.Role, error) { var role models.Role err := s.db.Where("name = ?", name).First(&role).Error if err != nil { return nil, err } return &role, nil } // Update 更新角色 func (s *roleStorage) Update(role *models.Role) error { return s.db.Save(role).Error } // Delete 删除角色 func (s *roleStorage) Delete(id uint) error { return s.db.Delete(&models.Role{}, id).Error } // List 获取角色列表 func (s *roleStorage) List(req *models.RoleListRequest) ([]models.Role, int64, error) { var roles []models.Role var total int64 query := s.db.Model(&models.Role{}) // 构建查询条件 if req.Name != "" { query = query.Where("name LIKE ?", "%"+req.Name+"%") } if req.Status != nil { query = query.Where("status = ?", *req.Status) } // 获取总数 if err := query.Count(&total).Error; err != nil { return nil, 0, err } // 分页查询 offset := (req.Page - 1) * req.Size err := query.Offset(offset).Limit(req.Size).Find(&roles).Error return roles, total, err } // UpdateStatus 更新角色状态 func (s *roleStorage) UpdateStatus(id uint, status int) error { return s.db.Model(&models.Role{}).Where("id = ?", id).Update("status", status).Error }