65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
// internal/repositories/role_repo.go
|
|
package repositories
|
|
|
|
import (
|
|
"errors"
|
|
"lost-and-found/internal/models"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type RoleRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewRoleRepository(db *gorm.DB) *RoleRepository {
|
|
return &RoleRepository{db: db}
|
|
}
|
|
|
|
// FindAll returns all roles
|
|
func (r *RoleRepository) FindAll() ([]models.Role, error) {
|
|
var roles []models.Role
|
|
err := r.db.Find(&roles).Error
|
|
return roles, err
|
|
}
|
|
|
|
// FindByID finds role by ID
|
|
func (r *RoleRepository) FindByID(id uint) (*models.Role, error) {
|
|
var role models.Role
|
|
err := r.db.First(&role, id).Error
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, errors.New("role not found")
|
|
}
|
|
return nil, err
|
|
}
|
|
return &role, nil
|
|
}
|
|
|
|
// FindByName finds role by name
|
|
func (r *RoleRepository) FindByName(name string) (*models.Role, error) {
|
|
var role models.Role
|
|
err := r.db.Where("name = ?", name).First(&role).Error
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, errors.New("role not found")
|
|
}
|
|
return nil, err
|
|
}
|
|
return &role, nil
|
|
}
|
|
|
|
// Create creates a new role
|
|
func (r *RoleRepository) Create(role *models.Role) error {
|
|
return r.db.Create(role).Error
|
|
}
|
|
|
|
// Update updates role data
|
|
func (r *RoleRepository) Update(role *models.Role) error {
|
|
return r.db.Save(role).Error
|
|
}
|
|
|
|
// Delete deletes a role
|
|
func (r *RoleRepository) Delete(id uint) error {
|
|
return r.db.Delete(&models.Role{}, id).Error
|
|
} |