2025-11-23 22:49:46 +07:00

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
}