Files
goalfylearning-admin/internal/storage/role_storage.go

94 lines
2.1 KiB
Go

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
}