Add coa purchase and vendors
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/mappers"
|
||||
"apskel-pos-be/internal/processor"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type AccountService interface {
|
||||
contract.AccountContract
|
||||
}
|
||||
|
||||
type AccountServiceImpl struct {
|
||||
processor processor.AccountProcessor
|
||||
}
|
||||
|
||||
func NewAccountService(processor processor.AccountProcessor) AccountService {
|
||||
return &AccountServiceImpl{
|
||||
processor: processor,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) CreateAccount(ctx context.Context, req *contract.CreateAccountRequest) (*contract.AccountResponse, error) {
|
||||
modelReq := mappers.ContractToModelCreateAccountRequest(req)
|
||||
modelResp, err := s.processor.CreateAccount(ctx, modelReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return mappers.ModelToContractAccountResponse(modelResp), nil
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) GetAccountByID(ctx context.Context, id uuid.UUID) (*contract.AccountResponse, error) {
|
||||
modelResp, err := s.processor.GetAccountByID(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return mappers.ModelToContractAccountResponse(modelResp), nil
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) UpdateAccount(ctx context.Context, id uuid.UUID, req *contract.UpdateAccountRequest) (*contract.AccountResponse, error) {
|
||||
modelReq := mappers.ContractToModelUpdateAccountRequest(req)
|
||||
modelResp, err := s.processor.UpdateAccount(ctx, id, modelReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return mappers.ModelToContractAccountResponse(modelResp), nil
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) DeleteAccount(ctx context.Context, id uuid.UUID) error {
|
||||
return s.processor.DeleteAccount(ctx, id)
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) ListAccounts(ctx context.Context, req *contract.ListAccountsRequest) ([]contract.AccountResponse, int, error) {
|
||||
modelReq := mappers.ContractToModelListAccountsRequest(req)
|
||||
modelResp, total, err := s.processor.ListAccounts(ctx, modelReq)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
contractResp := make([]contract.AccountResponse, len(modelResp))
|
||||
for i, resp := range modelResp {
|
||||
contractResp[i] = *mappers.ModelToContractAccountResponse(&resp)
|
||||
}
|
||||
|
||||
return contractResp, total, nil
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) GetAccountsByOrganization(ctx context.Context, organizationID uuid.UUID, outletID *uuid.UUID) ([]contract.AccountResponse, error) {
|
||||
modelResp, err := s.processor.GetAccountsByOrganization(ctx, organizationID, outletID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
contractResp := make([]contract.AccountResponse, len(modelResp))
|
||||
for i, resp := range modelResp {
|
||||
contractResp[i] = *mappers.ModelToContractAccountResponse(&resp)
|
||||
}
|
||||
|
||||
return contractResp, nil
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) GetAccountsByChartOfAccount(ctx context.Context, chartOfAccountID uuid.UUID) ([]contract.AccountResponse, error) {
|
||||
modelResp, err := s.processor.GetAccountsByChartOfAccount(ctx, chartOfAccountID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
contractResp := make([]contract.AccountResponse, len(modelResp))
|
||||
for i, resp := range modelResp {
|
||||
contractResp[i] = *mappers.ModelToContractAccountResponse(&resp)
|
||||
}
|
||||
|
||||
return contractResp, nil
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) UpdateAccountBalance(ctx context.Context, id uuid.UUID, req *contract.UpdateAccountBalanceRequest) error {
|
||||
return s.processor.UpdateAccountBalance(ctx, id, req.Amount)
|
||||
}
|
||||
|
||||
func (s *AccountServiceImpl) GetAccountBalance(ctx context.Context, id uuid.UUID) (float64, error) {
|
||||
return s.processor.GetAccountBalance(ctx, id)
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"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) {
|
||||
modelReq := mappers.ContractToModelListChartOfAccountsRequest(req)
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/mappers"
|
||||
"apskel-pos-be/internal/processor"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type ChartOfAccountTypeService interface {
|
||||
contract.ChartOfAccountTypeContract
|
||||
}
|
||||
|
||||
type ChartOfAccountTypeServiceImpl struct {
|
||||
processor processor.ChartOfAccountTypeProcessor
|
||||
}
|
||||
|
||||
func NewChartOfAccountTypeService(processor processor.ChartOfAccountTypeProcessor) ChartOfAccountTypeService {
|
||||
return &ChartOfAccountTypeServiceImpl{
|
||||
processor: processor,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ChartOfAccountTypeServiceImpl) CreateChartOfAccountType(ctx context.Context, req *contract.CreateChartOfAccountTypeRequest) (*contract.ChartOfAccountTypeResponse, error) {
|
||||
modelReq := mappers.ContractToModelCreateChartOfAccountTypeRequest(req)
|
||||
modelResp, err := s.processor.CreateChartOfAccountType(ctx, modelReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return mappers.ModelToContractChartOfAccountTypeResponse(modelResp), nil
|
||||
}
|
||||
|
||||
func (s *ChartOfAccountTypeServiceImpl) GetChartOfAccountTypeByID(ctx context.Context, id uuid.UUID) (*contract.ChartOfAccountTypeResponse, error) {
|
||||
modelResp, err := s.processor.GetChartOfAccountTypeByID(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return mappers.ModelToContractChartOfAccountTypeResponse(modelResp), nil
|
||||
}
|
||||
|
||||
func (s *ChartOfAccountTypeServiceImpl) UpdateChartOfAccountType(ctx context.Context, id uuid.UUID, req *contract.UpdateChartOfAccountTypeRequest) (*contract.ChartOfAccountTypeResponse, error) {
|
||||
modelReq := mappers.ContractToModelUpdateChartOfAccountTypeRequest(req)
|
||||
modelResp, err := s.processor.UpdateChartOfAccountType(ctx, id, modelReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return mappers.ModelToContractChartOfAccountTypeResponse(modelResp), nil
|
||||
}
|
||||
|
||||
func (s *ChartOfAccountTypeServiceImpl) DeleteChartOfAccountType(ctx context.Context, id uuid.UUID) error {
|
||||
return s.processor.DeleteChartOfAccountType(ctx, id)
|
||||
}
|
||||
|
||||
func (s *ChartOfAccountTypeServiceImpl) ListChartOfAccountTypes(ctx context.Context, filters map[string]interface{}, page, limit int) ([]contract.ChartOfAccountTypeResponse, int, error) {
|
||||
modelResp, total, err := s.processor.ListChartOfAccountTypes(ctx, filters, page, limit)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
contractResp := make([]contract.ChartOfAccountTypeResponse, len(modelResp))
|
||||
for i, resp := range modelResp {
|
||||
contractResp[i] = *mappers.ModelToContractChartOfAccountTypeResponse(&resp)
|
||||
}
|
||||
|
||||
return contractResp, total, nil
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"apskel-pos-be/internal/constants"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/processor"
|
||||
"apskel-pos-be/internal/transformer"
|
||||
"context"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type IngredientUnitConverterService interface {
|
||||
CreateIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.CreateIngredientUnitConverterRequest) *contract.Response
|
||||
UpdateIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, req *contract.UpdateIngredientUnitConverterRequest) *contract.Response
|
||||
DeleteIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response
|
||||
GetIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response
|
||||
ListIngredientUnitConverters(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ListIngredientUnitConvertersRequest) *contract.Response
|
||||
GetConvertersForIngredient(ctx context.Context, apctx *appcontext.ContextInfo, ingredientID uuid.UUID) *contract.Response
|
||||
ConvertUnit(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ConvertUnitRequest) *contract.Response
|
||||
}
|
||||
|
||||
type IngredientUnitConverterServiceImpl struct {
|
||||
converterProcessor processor.IngredientUnitConverterProcessor
|
||||
}
|
||||
|
||||
func NewIngredientUnitConverterService(converterProcessor processor.IngredientUnitConverterProcessor) *IngredientUnitConverterServiceImpl {
|
||||
return &IngredientUnitConverterServiceImpl{
|
||||
converterProcessor: converterProcessor,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *IngredientUnitConverterServiceImpl) CreateIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.CreateIngredientUnitConverterRequest) *contract.Response {
|
||||
modelReq := transformer.CreateIngredientUnitConverterRequestToModel(req)
|
||||
|
||||
converterResponse, err := s.converterProcessor.CreateIngredientUnitConverter(ctx, apctx.OrganizationID, apctx.UserID, modelReq)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.IngredientUnitConverterServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.IngredientUnitConverterModelResponseToResponse(converterResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *IngredientUnitConverterServiceImpl) UpdateIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, req *contract.UpdateIngredientUnitConverterRequest) *contract.Response {
|
||||
modelReq := transformer.UpdateIngredientUnitConverterRequestToModel(req)
|
||||
|
||||
converterResponse, err := s.converterProcessor.UpdateIngredientUnitConverter(ctx, id, apctx.OrganizationID, apctx.UserID, modelReq)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.IngredientUnitConverterServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.IngredientUnitConverterModelResponseToResponse(converterResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *IngredientUnitConverterServiceImpl) DeleteIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response {
|
||||
err := s.converterProcessor.DeleteIngredientUnitConverter(ctx, id, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.IngredientUnitConverterServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(nil)
|
||||
}
|
||||
|
||||
func (s *IngredientUnitConverterServiceImpl) GetIngredientUnitConverter(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response {
|
||||
converterResponse, err := s.converterProcessor.GetIngredientUnitConverterByID(ctx, id, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.IngredientUnitConverterServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.IngredientUnitConverterModelResponseToResponse(converterResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *IngredientUnitConverterServiceImpl) ListIngredientUnitConverters(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ListIngredientUnitConvertersRequest) *contract.Response {
|
||||
modelReq := transformer.ListIngredientUnitConvertersRequestToModel(req)
|
||||
|
||||
filters := make(map[string]interface{})
|
||||
if modelReq.IngredientID != nil {
|
||||
filters["ingredient_id"] = *modelReq.IngredientID
|
||||
}
|
||||
if modelReq.FromUnitID != nil {
|
||||
filters["from_unit_id"] = *modelReq.FromUnitID
|
||||
}
|
||||
if modelReq.ToUnitID != nil {
|
||||
filters["to_unit_id"] = *modelReq.ToUnitID
|
||||
}
|
||||
if modelReq.IsActive != nil {
|
||||
filters["is_active"] = *modelReq.IsActive
|
||||
}
|
||||
if modelReq.Search != "" {
|
||||
filters["search"] = modelReq.Search
|
||||
}
|
||||
|
||||
converters, total, err := s.converterProcessor.ListIngredientUnitConverters(ctx, apctx.OrganizationID, filters, modelReq.Page, modelReq.Limit)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.IngredientUnitConverterServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponses := make([]contract.IngredientUnitConverterResponse, len(converters))
|
||||
for i, converter := range converters {
|
||||
contractResponses[i] = transformer.IngredientUnitConverterModelResponseToResponse(converter)
|
||||
}
|
||||
|
||||
totalPages := (total + modelReq.Limit - 1) / modelReq.Limit
|
||||
response := contract.ListIngredientUnitConvertersResponse{
|
||||
Converters: contractResponses,
|
||||
TotalCount: total,
|
||||
Page: modelReq.Page,
|
||||
Limit: modelReq.Limit,
|
||||
TotalPages: totalPages,
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(response)
|
||||
}
|
||||
|
||||
func (s *IngredientUnitConverterServiceImpl) GetConvertersForIngredient(ctx context.Context, apctx *appcontext.ContextInfo, ingredientID uuid.UUID) *contract.Response {
|
||||
converters, err := s.converterProcessor.GetConvertersForIngredient(ctx, ingredientID, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.IngredientUnitConverterServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponses := make([]contract.IngredientUnitConverterResponse, len(converters))
|
||||
for i, converter := range converters {
|
||||
contractResponses[i] = transformer.IngredientUnitConverterModelResponseToResponse(converter)
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(contractResponses)
|
||||
}
|
||||
|
||||
func (s *IngredientUnitConverterServiceImpl) ConvertUnit(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ConvertUnitRequest) *contract.Response {
|
||||
modelReq := transformer.ConvertUnitRequestToModel(req)
|
||||
|
||||
convertResponse, err := s.converterProcessor.ConvertUnit(ctx, apctx.OrganizationID, modelReq)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.IngredientUnitConverterServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.ConvertUnitModelResponseToResponse(convertResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"context"
|
||||
|
||||
"apskel-pos-be/internal/constants"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/processor"
|
||||
"apskel-pos-be/internal/transformer"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type PurchaseOrderService interface {
|
||||
CreatePurchaseOrder(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.CreatePurchaseOrderRequest) *contract.Response
|
||||
UpdatePurchaseOrder(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, req *contract.UpdatePurchaseOrderRequest) *contract.Response
|
||||
DeletePurchaseOrder(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response
|
||||
GetPurchaseOrderByID(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response
|
||||
ListPurchaseOrders(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ListPurchaseOrdersRequest) *contract.Response
|
||||
GetPurchaseOrdersByStatus(ctx context.Context, apctx *appcontext.ContextInfo, status string) *contract.Response
|
||||
GetOverduePurchaseOrders(ctx context.Context, apctx *appcontext.ContextInfo) *contract.Response
|
||||
UpdatePurchaseOrderStatus(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, status string) *contract.Response
|
||||
}
|
||||
|
||||
type PurchaseOrderServiceImpl struct {
|
||||
purchaseOrderProcessor processor.PurchaseOrderProcessor
|
||||
}
|
||||
|
||||
func NewPurchaseOrderService(purchaseOrderProcessor processor.PurchaseOrderProcessor) *PurchaseOrderServiceImpl {
|
||||
return &PurchaseOrderServiceImpl{
|
||||
purchaseOrderProcessor: purchaseOrderProcessor,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) CreatePurchaseOrder(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.CreatePurchaseOrderRequest) *contract.Response {
|
||||
modelReq := transformer.CreatePurchaseOrderRequestToModel(req)
|
||||
|
||||
poResponse, err := s.purchaseOrderProcessor.CreatePurchaseOrder(ctx, apctx.OrganizationID, modelReq)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.PurchaseOrderModelResponseToResponse(poResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) UpdatePurchaseOrder(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, req *contract.UpdatePurchaseOrderRequest) *contract.Response {
|
||||
modelReq := transformer.UpdatePurchaseOrderRequestToModel(req)
|
||||
|
||||
poResponse, err := s.purchaseOrderProcessor.UpdatePurchaseOrder(ctx, id, apctx.OrganizationID, modelReq)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.PurchaseOrderModelResponseToResponse(poResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) DeletePurchaseOrder(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response {
|
||||
err := s.purchaseOrderProcessor.DeletePurchaseOrder(ctx, id, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(map[string]interface{}{
|
||||
"message": "Purchase order deleted successfully",
|
||||
})
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) GetPurchaseOrderByID(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response {
|
||||
poResponse, err := s.purchaseOrderProcessor.GetPurchaseOrderByID(ctx, id, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.PurchaseOrderModelResponseToResponse(poResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) ListPurchaseOrders(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ListPurchaseOrdersRequest) *contract.Response {
|
||||
modelReq := transformer.ListPurchaseOrdersRequestToModel(req)
|
||||
|
||||
filters := make(map[string]interface{})
|
||||
if modelReq.Search != "" {
|
||||
filters["search"] = modelReq.Search
|
||||
}
|
||||
if modelReq.Status != "" {
|
||||
filters["status"] = modelReq.Status
|
||||
}
|
||||
if modelReq.VendorID != nil {
|
||||
filters["vendor_id"] = *modelReq.VendorID
|
||||
}
|
||||
if modelReq.StartDate != nil {
|
||||
filters["start_date"] = *modelReq.StartDate
|
||||
}
|
||||
if modelReq.EndDate != nil {
|
||||
filters["end_date"] = *modelReq.EndDate
|
||||
}
|
||||
|
||||
pos, totalPages, err := s.purchaseOrderProcessor.ListPurchaseOrders(ctx, apctx.OrganizationID, filters, modelReq.Page, modelReq.Limit)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponses := make([]contract.PurchaseOrderResponse, len(pos))
|
||||
for i, po := range pos {
|
||||
response := transformer.PurchaseOrderModelResponseToResponse(po)
|
||||
if response != nil {
|
||||
contractResponses[i] = *response
|
||||
}
|
||||
}
|
||||
|
||||
response := contract.ListPurchaseOrdersResponse{
|
||||
PurchaseOrders: contractResponses,
|
||||
TotalCount: len(contractResponses),
|
||||
Page: modelReq.Page,
|
||||
Limit: modelReq.Limit,
|
||||
TotalPages: totalPages,
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(response)
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) GetPurchaseOrdersByStatus(ctx context.Context, apctx *appcontext.ContextInfo, status string) *contract.Response {
|
||||
poResponses, err := s.purchaseOrderProcessor.GetPurchaseOrdersByStatus(ctx, apctx.OrganizationID, status)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponses := make([]contract.PurchaseOrderResponse, len(poResponses))
|
||||
for i, po := range poResponses {
|
||||
response := transformer.PurchaseOrderModelResponseToResponse(po)
|
||||
if response != nil {
|
||||
contractResponses[i] = *response
|
||||
}
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(contractResponses)
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) GetOverduePurchaseOrders(ctx context.Context, apctx *appcontext.ContextInfo) *contract.Response {
|
||||
poResponses, err := s.purchaseOrderProcessor.GetOverduePurchaseOrders(ctx, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponses := make([]contract.PurchaseOrderResponse, len(poResponses))
|
||||
for i, po := range poResponses {
|
||||
response := transformer.PurchaseOrderModelResponseToResponse(po)
|
||||
if response != nil {
|
||||
contractResponses[i] = *response
|
||||
}
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(contractResponses)
|
||||
}
|
||||
|
||||
func (s *PurchaseOrderServiceImpl) UpdatePurchaseOrderStatus(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, status string) *contract.Response {
|
||||
poResponse, err := s.purchaseOrderProcessor.UpdatePurchaseOrderStatus(ctx, id, apctx.OrganizationID, apctx.UserID, apctx.OutletID, status)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.PurchaseOrderServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.PurchaseOrderModelResponseToResponse(poResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"context"
|
||||
|
||||
"apskel-pos-be/internal/constants"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/processor"
|
||||
"apskel-pos-be/internal/transformer"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type VendorService interface {
|
||||
CreateVendor(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.CreateVendorRequest) *contract.Response
|
||||
UpdateVendor(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, req *contract.UpdateVendorRequest) *contract.Response
|
||||
DeleteVendor(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response
|
||||
GetVendorByID(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response
|
||||
ListVendors(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ListVendorsRequest) *contract.Response
|
||||
GetActiveVendors(ctx context.Context, apctx *appcontext.ContextInfo) *contract.Response
|
||||
}
|
||||
|
||||
type VendorServiceImpl struct {
|
||||
vendorProcessor processor.VendorProcessor
|
||||
}
|
||||
|
||||
func NewVendorService(vendorProcessor processor.VendorProcessor) *VendorServiceImpl {
|
||||
return &VendorServiceImpl{
|
||||
vendorProcessor: vendorProcessor,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *VendorServiceImpl) CreateVendor(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.CreateVendorRequest) *contract.Response {
|
||||
modelReq := transformer.CreateVendorRequestToModel(req)
|
||||
|
||||
vendorResponse, err := s.vendorProcessor.CreateVendor(ctx, apctx.OrganizationID, modelReq)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.VendorServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.VendorModelResponseToResponse(vendorResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *VendorServiceImpl) UpdateVendor(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID, req *contract.UpdateVendorRequest) *contract.Response {
|
||||
modelReq := transformer.UpdateVendorRequestToModel(req)
|
||||
|
||||
vendorResponse, err := s.vendorProcessor.UpdateVendor(ctx, id, apctx.OrganizationID, modelReq)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.VendorServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.VendorModelResponseToResponse(vendorResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *VendorServiceImpl) DeleteVendor(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response {
|
||||
err := s.vendorProcessor.DeleteVendor(ctx, id, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.VendorServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(map[string]interface{}{
|
||||
"message": "Vendor deleted successfully",
|
||||
})
|
||||
}
|
||||
|
||||
func (s *VendorServiceImpl) GetVendorByID(ctx context.Context, apctx *appcontext.ContextInfo, id uuid.UUID) *contract.Response {
|
||||
vendorResponse, err := s.vendorProcessor.GetVendorByID(ctx, id, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.VendorServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponse := transformer.VendorModelResponseToResponse(vendorResponse)
|
||||
return contract.BuildSuccessResponse(contractResponse)
|
||||
}
|
||||
|
||||
func (s *VendorServiceImpl) ListVendors(ctx context.Context, apctx *appcontext.ContextInfo, req *contract.ListVendorsRequest) *contract.Response {
|
||||
modelReq := transformer.ListVendorsRequestToModel(req)
|
||||
|
||||
filters := make(map[string]interface{})
|
||||
if modelReq.Search != "" {
|
||||
filters["search"] = modelReq.Search
|
||||
}
|
||||
if modelReq.IsActive != nil {
|
||||
filters["is_active"] = *modelReq.IsActive
|
||||
}
|
||||
|
||||
vendors, totalPages, err := s.vendorProcessor.ListVendors(ctx, apctx.OrganizationID, filters, modelReq.Page, modelReq.Limit)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.VendorServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponses := transformer.VendorModelResponsesToResponses(vendors)
|
||||
|
||||
response := contract.ListVendorsResponse{
|
||||
Vendors: contractResponses,
|
||||
TotalCount: len(contractResponses),
|
||||
Page: modelReq.Page,
|
||||
Limit: modelReq.Limit,
|
||||
TotalPages: totalPages,
|
||||
}
|
||||
|
||||
return contract.BuildSuccessResponse(response)
|
||||
}
|
||||
|
||||
func (s *VendorServiceImpl) GetActiveVendors(ctx context.Context, apctx *appcontext.ContextInfo) *contract.Response {
|
||||
vendorResponses, err := s.vendorProcessor.GetActiveVendors(ctx, apctx.OrganizationID)
|
||||
if err != nil {
|
||||
errorResp := contract.NewResponseError(constants.InternalServerErrorCode, constants.VendorServiceEntity, err.Error())
|
||||
return contract.BuildErrorResponse([]*contract.ResponseError{errorResp})
|
||||
}
|
||||
|
||||
contractResponses := transformer.VendorModelResponsesToResponses(vendorResponses)
|
||||
return contract.BuildSuccessResponse(contractResponses)
|
||||
}
|
||||
Reference in New Issue
Block a user