Files
gobeyhan/app/account/services/role_service.go
Beyhan Oğur f34e54c5a5 first commit
2026-04-26 21:43:40 +03:00

97 lines
2.3 KiB
Go

package services
import (
"errors"
"gobeyhan/database"
"gobeyhan/database/models"
"gorm.io/gorm"
)
type RoleService struct{}
func NewRoleService() *RoleService {
return &RoleService{}
}
// GetAllRoles retrieves all roles
func (s *RoleService) GetAllRoles() ([]models.Role, error) {
var roles []models.Role
err := database.DB.Preload("Permissions").Find(&roles).Error
return roles, err
}
// GetRoleByID retrieves a role by ID
func (s *RoleService) GetRoleByID(id uint64) (*models.Role, error) {
var role models.Role
err := database.DB.Preload("Permissions").First(&role, id).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &role, nil
}
// CreateRole creates a new role
func (s *RoleService) CreateRole(role *models.Role) error {
return database.DB.Create(role).Error
}
// UpdateRole updates an existing role
func (s *RoleService) UpdateRole(id uint64, updates map[string]interface{}) error {
result := database.DB.Model(&models.Role{}).Where("id = ?", id).Updates(updates)
if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return gorm.ErrRecordNotFound
}
return nil
}
// DeleteRole deletes a role by ID
func (s *RoleService) DeleteRole(id uint64) error {
result := database.DB.Delete(&models.Role{}, id)
if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return gorm.ErrRecordNotFound
}
return nil
}
// AssignPermission assigns a permission to a role
func (s *RoleService) AssignPermission(roleID, permissionID uint64) error {
var role models.Role
if err := database.DB.First(&role, roleID).Error; err != nil {
return err
}
var permission models.Permission
if err := database.DB.First(&permission, permissionID).Error; err != nil {
return err
}
return database.DB.Model(&role).Association("Permissions").Append(&permission)
}
// RemovePermission removes a permission from a role
func (s *RoleService) RemovePermission(roleID, permissionID uint64) error {
var role models.Role
if err := database.DB.Preload("Permissions").First(&role, roleID).Error; err != nil {
return err
}
var permission models.Permission
if err := database.DB.First(&permission, permissionID).Error; err != nil {
return err
}
return database.DB.Model(&role).Association("Permissions").Delete(&permission)
}