104 lines
3.6 KiB
Go
104 lines
3.6 KiB
Go
package service
|
|
|
|
import (
|
|
"apskel-pos-be/internal/appcontext"
|
|
"context"
|
|
|
|
"apskel-pos-be/internal/contract"
|
|
"apskel-pos-be/internal/mappers"
|
|
"apskel-pos-be/internal/processor"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type ChartOfAccountService interface {
|
|
contract.ChartOfAccountContract
|
|
}
|
|
|
|
type ChartOfAccountServiceImpl struct {
|
|
processor processor.ChartOfAccountProcessor
|
|
}
|
|
|
|
func NewChartOfAccountService(processor processor.ChartOfAccountProcessor) ChartOfAccountService {
|
|
return &ChartOfAccountServiceImpl{
|
|
processor: processor,
|
|
}
|
|
}
|
|
|
|
func (s *ChartOfAccountServiceImpl) CreateChartOfAccount(ctx context.Context, req *contract.CreateChartOfAccountRequest) (*contract.ChartOfAccountResponse, error) {
|
|
modelReq := mappers.ContractToModelCreateChartOfAccountRequest(req)
|
|
modelResp, err := s.processor.CreateChartOfAccount(ctx, modelReq)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return mappers.ModelToContractChartOfAccountResponse(modelResp), nil
|
|
}
|
|
|
|
func (s *ChartOfAccountServiceImpl) GetChartOfAccountByID(ctx context.Context, id uuid.UUID) (*contract.ChartOfAccountResponse, error) {
|
|
modelResp, err := s.processor.GetChartOfAccountByID(ctx, id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return mappers.ModelToContractChartOfAccountResponse(modelResp), nil
|
|
}
|
|
|
|
func (s *ChartOfAccountServiceImpl) UpdateChartOfAccount(ctx context.Context, id uuid.UUID, req *contract.UpdateChartOfAccountRequest) (*contract.ChartOfAccountResponse, error) {
|
|
modelReq := mappers.ContractToModelUpdateChartOfAccountRequest(req)
|
|
modelResp, err := s.processor.UpdateChartOfAccount(ctx, id, modelReq)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return mappers.ModelToContractChartOfAccountResponse(modelResp), nil
|
|
}
|
|
|
|
func (s *ChartOfAccountServiceImpl) DeleteChartOfAccount(ctx context.Context, id uuid.UUID) error {
|
|
return s.processor.DeleteChartOfAccount(ctx, id)
|
|
}
|
|
|
|
func (s *ChartOfAccountServiceImpl) ListChartOfAccounts(ctx context.Context, req *contract.ListChartOfAccountsRequest) ([]contract.ChartOfAccountResponse, int, error) {
|
|
appCtx := appcontext.FromGinContext(ctx)
|
|
organizationID := appCtx.OrganizationID
|
|
outletID := appCtx.OutletID
|
|
|
|
modelReq := mappers.ContractToModelListChartOfAccountsRequest(req, organizationID, outletID)
|
|
modelResp, total, err := s.processor.ListChartOfAccounts(ctx, modelReq)
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
contractResp := make([]contract.ChartOfAccountResponse, len(modelResp))
|
|
for i, resp := range modelResp {
|
|
contractResp[i] = *mappers.ModelToContractChartOfAccountResponse(&resp)
|
|
}
|
|
|
|
return contractResp, total, nil
|
|
}
|
|
|
|
func (s *ChartOfAccountServiceImpl) GetChartOfAccountsByOrganization(ctx context.Context, organizationID uuid.UUID, outletID *uuid.UUID) ([]contract.ChartOfAccountResponse, error) {
|
|
modelResp, err := s.processor.GetChartOfAccountsByOrganization(ctx, organizationID, outletID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
contractResp := make([]contract.ChartOfAccountResponse, len(modelResp))
|
|
for i, resp := range modelResp {
|
|
contractResp[i] = *mappers.ModelToContractChartOfAccountResponse(&resp)
|
|
}
|
|
|
|
return contractResp, nil
|
|
}
|
|
|
|
func (s *ChartOfAccountServiceImpl) GetChartOfAccountsByType(ctx context.Context, organizationID uuid.UUID, chartOfAccountTypeID uuid.UUID, outletID *uuid.UUID) ([]contract.ChartOfAccountResponse, error) {
|
|
modelResp, err := s.processor.GetChartOfAccountsByType(ctx, organizationID, chartOfAccountTypeID, outletID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
contractResp := make([]contract.ChartOfAccountResponse, len(modelResp))
|
|
for i, resp := range modelResp {
|
|
contractResp[i] = *mappers.ModelToContractChartOfAccountResponse(&resp)
|
|
}
|
|
|
|
return contractResp, nil
|
|
}
|