first commit
This commit is contained in:
99
internal/services/skill_service.go
Normal file
99
internal/services/skill_service.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"gauth-central/internal/database"
|
||||
"gauth-central/internal/models"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type SkillService struct{}
|
||||
|
||||
func NewSkillService() *SkillService {
|
||||
return &SkillService{}
|
||||
}
|
||||
|
||||
func (s *SkillService) GetAllSkills(resumeID *string, onlyActive bool) ([]models.Skill, error) {
|
||||
var items []models.Skill
|
||||
query := database.DB.Order("degree desc")
|
||||
|
||||
if resumeID != nil {
|
||||
query = query.Where("resume_id = ?", *resumeID)
|
||||
}
|
||||
|
||||
if onlyActive {
|
||||
query = query.Where("is_active = ?", true)
|
||||
}
|
||||
|
||||
if err := query.Find(&items).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
func (s *SkillService) GetSkillByID(id string) (*models.Skill, error) {
|
||||
var item models.Skill
|
||||
if err := database.DB.Where("id = ?", id).First(&item).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, errors.New("skill not found")
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return &item, nil
|
||||
}
|
||||
|
||||
func (s *SkillService) CreateSkill(title string, degree int, resumeID *uuid.UUID, isActive bool) (*models.Skill, error) {
|
||||
item := models.Skill{
|
||||
Title: title,
|
||||
Degree: degree,
|
||||
ResumeID: resumeID,
|
||||
IsActive: isActive,
|
||||
}
|
||||
|
||||
if err := database.DB.Create(&item).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &item, nil
|
||||
}
|
||||
|
||||
func (s *SkillService) UpdateSkill(id string, title *string, degree *int, resumeID *uuid.UUID, isActive *bool) (*models.Skill, error) {
|
||||
item, err := s.GetSkillByID(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
updates := map[string]interface{}{}
|
||||
if title != nil {
|
||||
updates["title"] = *title
|
||||
}
|
||||
if degree != nil {
|
||||
updates["degree"] = *degree
|
||||
}
|
||||
if resumeID != nil {
|
||||
updates["resume_id"] = *resumeID
|
||||
}
|
||||
if isActive != nil {
|
||||
updates["is_active"] = *isActive
|
||||
}
|
||||
|
||||
if len(updates) > 0 {
|
||||
if err := database.DB.Model(item).Updates(updates).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return s.GetSkillByID(id)
|
||||
}
|
||||
|
||||
func (s *SkillService) DeleteSkill(id string) error {
|
||||
result := database.DB.Delete(&models.Skill{}, "id = ?", id)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return errors.New("skill not found")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user