// 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 }