215 lines
7.1 KiB
Go
215 lines
7.1 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"eslogad-be/internal/contract"
|
|
"eslogad-be/internal/entities"
|
|
"eslogad-be/internal/repository"
|
|
"eslogad-be/internal/transformer"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type MasterServiceImpl struct {
|
|
labelRepo *repository.LabelRepository
|
|
priorityRepo *repository.PriorityRepository
|
|
institutionRepo *repository.InstitutionRepository
|
|
dispRepo *repository.DispositionActionRepository
|
|
}
|
|
|
|
func NewMasterService(label *repository.LabelRepository, priority *repository.PriorityRepository, institution *repository.InstitutionRepository, disp *repository.DispositionActionRepository) *MasterServiceImpl {
|
|
return &MasterServiceImpl{labelRepo: label, priorityRepo: priority, institutionRepo: institution, dispRepo: disp}
|
|
}
|
|
|
|
// Labels
|
|
func (s *MasterServiceImpl) CreateLabel(ctx context.Context, req *contract.CreateLabelRequest) (*contract.LabelResponse, error) {
|
|
entity := &entities.Label{Name: req.Name, Color: req.Color}
|
|
if err := s.labelRepo.Create(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.LabelsToContract([]entities.Label{*entity})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) UpdateLabel(ctx context.Context, id uuid.UUID, req *contract.UpdateLabelRequest) (*contract.LabelResponse, error) {
|
|
entity := &entities.Label{ID: id}
|
|
if req.Name != nil {
|
|
entity.Name = *req.Name
|
|
}
|
|
if req.Color != nil {
|
|
entity.Color = req.Color
|
|
}
|
|
if err := s.labelRepo.Update(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
e, err := s.labelRepo.Get(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.LabelsToContract([]entities.Label{*e})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) DeleteLabel(ctx context.Context, id uuid.UUID) error {
|
|
return s.labelRepo.Delete(ctx, id)
|
|
}
|
|
func (s *MasterServiceImpl) ListLabels(ctx context.Context) (*contract.ListLabelsResponse, error) {
|
|
list, err := s.labelRepo.List(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &contract.ListLabelsResponse{Labels: transformer.LabelsToContract(list)}, nil
|
|
}
|
|
|
|
// Priorities
|
|
func (s *MasterServiceImpl) CreatePriority(ctx context.Context, req *contract.CreatePriorityRequest) (*contract.PriorityResponse, error) {
|
|
entity := &entities.Priority{Name: req.Name, Level: req.Level}
|
|
if err := s.priorityRepo.Create(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.PrioritiesToContract([]entities.Priority{*entity})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) UpdatePriority(ctx context.Context, id uuid.UUID, req *contract.UpdatePriorityRequest) (*contract.PriorityResponse, error) {
|
|
entity := &entities.Priority{ID: id}
|
|
if req.Name != nil {
|
|
entity.Name = *req.Name
|
|
}
|
|
if req.Level != nil {
|
|
entity.Level = *req.Level
|
|
}
|
|
if err := s.priorityRepo.Update(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
e, err := s.priorityRepo.Get(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.PrioritiesToContract([]entities.Priority{*e})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) DeletePriority(ctx context.Context, id uuid.UUID) error {
|
|
return s.priorityRepo.Delete(ctx, id)
|
|
}
|
|
func (s *MasterServiceImpl) ListPriorities(ctx context.Context) (*contract.ListPrioritiesResponse, error) {
|
|
list, err := s.priorityRepo.List(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &contract.ListPrioritiesResponse{Priorities: transformer.PrioritiesToContract(list)}, nil
|
|
}
|
|
|
|
// Institutions
|
|
func (s *MasterServiceImpl) CreateInstitution(ctx context.Context, req *contract.CreateInstitutionRequest) (*contract.InstitutionResponse, error) {
|
|
entity := &entities.Institution{Name: req.Name, Type: entities.InstitutionType(req.Type), Address: req.Address, ContactPerson: req.ContactPerson, Phone: req.Phone, Email: req.Email}
|
|
if err := s.institutionRepo.Create(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.InstitutionsToContract([]entities.Institution{*entity})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) UpdateInstitution(ctx context.Context, id uuid.UUID, req *contract.UpdateInstitutionRequest) (*contract.InstitutionResponse, error) {
|
|
entity := &entities.Institution{ID: id}
|
|
if req.Name != nil {
|
|
entity.Name = *req.Name
|
|
}
|
|
if req.Type != nil {
|
|
entity.Type = entities.InstitutionType(*req.Type)
|
|
}
|
|
if req.Address != nil {
|
|
entity.Address = req.Address
|
|
}
|
|
if req.ContactPerson != nil {
|
|
entity.ContactPerson = req.ContactPerson
|
|
}
|
|
if req.Phone != nil {
|
|
entity.Phone = req.Phone
|
|
}
|
|
if req.Email != nil {
|
|
entity.Email = req.Email
|
|
}
|
|
if err := s.institutionRepo.Update(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
e, err := s.institutionRepo.Get(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.InstitutionsToContract([]entities.Institution{*e})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) DeleteInstitution(ctx context.Context, id uuid.UUID) error {
|
|
return s.institutionRepo.Delete(ctx, id)
|
|
}
|
|
func (s *MasterServiceImpl) ListInstitutions(ctx context.Context) (*contract.ListInstitutionsResponse, error) {
|
|
list, err := s.institutionRepo.List(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &contract.ListInstitutionsResponse{Institutions: transformer.InstitutionsToContract(list)}, nil
|
|
}
|
|
|
|
// Disposition Actions
|
|
func (s *MasterServiceImpl) CreateDispositionAction(ctx context.Context, req *contract.CreateDispositionActionRequest) (*contract.DispositionActionResponse, error) {
|
|
entity := &entities.DispositionAction{Code: req.Code, Label: req.Label, Description: req.Description}
|
|
if req.RequiresNote != nil {
|
|
entity.RequiresNote = *req.RequiresNote
|
|
}
|
|
if req.GroupName != nil {
|
|
entity.GroupName = req.GroupName
|
|
}
|
|
if req.SortOrder != nil {
|
|
entity.SortOrder = req.SortOrder
|
|
}
|
|
if req.IsActive != nil {
|
|
entity.IsActive = *req.IsActive
|
|
}
|
|
if err := s.dispRepo.Create(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.DispositionActionsToContract([]entities.DispositionAction{*entity})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) UpdateDispositionAction(ctx context.Context, id uuid.UUID, req *contract.UpdateDispositionActionRequest) (*contract.DispositionActionResponse, error) {
|
|
entity := &entities.DispositionAction{ID: id}
|
|
if req.Code != nil {
|
|
entity.Code = *req.Code
|
|
}
|
|
if req.Label != nil {
|
|
entity.Label = *req.Label
|
|
}
|
|
if req.Description != nil {
|
|
entity.Description = req.Description
|
|
}
|
|
if req.RequiresNote != nil {
|
|
entity.RequiresNote = *req.RequiresNote
|
|
}
|
|
if req.GroupName != nil {
|
|
entity.GroupName = req.GroupName
|
|
}
|
|
if req.SortOrder != nil {
|
|
entity.SortOrder = req.SortOrder
|
|
}
|
|
if req.IsActive != nil {
|
|
entity.IsActive = *req.IsActive
|
|
}
|
|
if err := s.dispRepo.Update(ctx, entity); err != nil {
|
|
return nil, err
|
|
}
|
|
e, err := s.dispRepo.Get(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp := transformer.DispositionActionsToContract([]entities.DispositionAction{*e})[0]
|
|
return &resp, nil
|
|
}
|
|
func (s *MasterServiceImpl) DeleteDispositionAction(ctx context.Context, id uuid.UUID) error {
|
|
return s.dispRepo.Delete(ctx, id)
|
|
}
|
|
func (s *MasterServiceImpl) ListDispositionActions(ctx context.Context) (*contract.ListDispositionActionsResponse, error) {
|
|
list, err := s.dispRepo.List(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &contract.ListDispositionActionsResponse{Actions: transformer.DispositionActionsToContract(list)}, nil
|
|
}
|