71 lines
2.4 KiB
Go
71 lines
2.4 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 DispositionRouteServiceImpl struct {
|
||
|
|
repo *repository.DispositionRouteRepository
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewDispositionRouteService(repo *repository.DispositionRouteRepository) *DispositionRouteServiceImpl {
|
||
|
|
return &DispositionRouteServiceImpl{repo: repo}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *DispositionRouteServiceImpl) Create(ctx context.Context, req *contract.CreateDispositionRouteRequest) (*contract.DispositionRouteResponse, error) {
|
||
|
|
entity := &entities.DispositionRoute{FromDepartmentID: req.FromDepartmentID, ToDepartmentID: req.ToDepartmentID}
|
||
|
|
if req.IsActive != nil {
|
||
|
|
entity.IsActive = *req.IsActive
|
||
|
|
}
|
||
|
|
if req.AllowedActions != nil {
|
||
|
|
entity.AllowedActions = entities.JSONB(*req.AllowedActions)
|
||
|
|
}
|
||
|
|
if err := s.repo.Create(ctx, entity); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
resp := transformer.DispositionRoutesToContract([]entities.DispositionRoute{*entity})[0]
|
||
|
|
return &resp, nil
|
||
|
|
}
|
||
|
|
func (s *DispositionRouteServiceImpl) Update(ctx context.Context, id uuid.UUID, req *contract.UpdateDispositionRouteRequest) (*contract.DispositionRouteResponse, error) {
|
||
|
|
entity, err := s.repo.Get(ctx, id)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
if req.IsActive != nil {
|
||
|
|
entity.IsActive = *req.IsActive
|
||
|
|
}
|
||
|
|
if req.AllowedActions != nil {
|
||
|
|
entity.AllowedActions = entities.JSONB(*req.AllowedActions)
|
||
|
|
}
|
||
|
|
if err := s.repo.Update(ctx, entity); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
resp := transformer.DispositionRoutesToContract([]entities.DispositionRoute{*entity})[0]
|
||
|
|
return &resp, nil
|
||
|
|
}
|
||
|
|
func (s *DispositionRouteServiceImpl) Get(ctx context.Context, id uuid.UUID) (*contract.DispositionRouteResponse, error) {
|
||
|
|
entity, err := s.repo.Get(ctx, id)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
resp := transformer.DispositionRoutesToContract([]entities.DispositionRoute{*entity})[0]
|
||
|
|
return &resp, nil
|
||
|
|
}
|
||
|
|
func (s *DispositionRouteServiceImpl) ListByFromDept(ctx context.Context, from uuid.UUID) (*contract.ListDispositionRoutesResponse, error) {
|
||
|
|
list, err := s.repo.ListByFromDept(ctx, from)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &contract.ListDispositionRoutesResponse{Routes: transformer.DispositionRoutesToContract(list)}, nil
|
||
|
|
}
|
||
|
|
func (s *DispositionRouteServiceImpl) SetActive(ctx context.Context, id uuid.UUID, active bool) error {
|
||
|
|
return s.repo.SetActive(ctx, id, active)
|
||
|
|
}
|