add product ingredients
This commit is contained in:
@@ -0,0 +1,205 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/mappers"
|
||||
"apskel-pos-be/internal/models"
|
||||
"apskel-pos-be/internal/processor"
|
||||
"apskel-pos-be/internal/repository"
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type OrderIngredientTransactionService struct {
|
||||
processor processor.OrderIngredientTransactionProcessor
|
||||
txManager *repository.TxManager
|
||||
}
|
||||
|
||||
func NewOrderIngredientTransactionService(processor processor.OrderIngredientTransactionProcessor, txManager *repository.TxManager) *OrderIngredientTransactionService {
|
||||
return &OrderIngredientTransactionService{
|
||||
processor: processor,
|
||||
txManager: txManager,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) CreateOrderIngredientTransaction(ctx context.Context, req *contract.CreateOrderIngredientTransactionRequest) (*contract.OrderIngredientTransactionResponse, error) {
|
||||
// Get organization and outlet from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
outletID := appCtx.OutletID
|
||||
createdBy := appCtx.UserID
|
||||
|
||||
// Convert contract to model
|
||||
modelReq := mappers.ContractToModelCreateOrderIngredientTransactionRequest(req)
|
||||
|
||||
// Create transaction
|
||||
response, err := s.processor.CreateOrderIngredientTransaction(ctx, modelReq, organizationID, outletID, createdBy)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create order ingredient transaction: %w", err)
|
||||
}
|
||||
|
||||
// Convert model to contract
|
||||
contractResp := mappers.ModelToContractOrderIngredientTransactionResponse(response)
|
||||
return contractResp, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) GetOrderIngredientTransactionByID(ctx context.Context, id uuid.UUID) (*contract.OrderIngredientTransactionResponse, error) {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Get transaction
|
||||
response, err := s.processor.GetOrderIngredientTransactionByID(ctx, id, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get order ingredient transaction: %w", err)
|
||||
}
|
||||
|
||||
// Convert model to contract
|
||||
contractResp := mappers.ModelToContractOrderIngredientTransactionResponse(response)
|
||||
return contractResp, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) UpdateOrderIngredientTransaction(ctx context.Context, id uuid.UUID, req *contract.UpdateOrderIngredientTransactionRequest) (*contract.OrderIngredientTransactionResponse, error) {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Convert contract to model
|
||||
modelReq := mappers.ContractToModelUpdateOrderIngredientTransactionRequest(req)
|
||||
|
||||
// Update transaction
|
||||
response, err := s.processor.UpdateOrderIngredientTransaction(ctx, id, modelReq, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to update order ingredient transaction: %w", err)
|
||||
}
|
||||
|
||||
// Convert model to contract
|
||||
contractResp := mappers.ModelToContractOrderIngredientTransactionResponse(response)
|
||||
return contractResp, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) DeleteOrderIngredientTransaction(ctx context.Context, id uuid.UUID) error {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Delete transaction
|
||||
if err := s.processor.DeleteOrderIngredientTransaction(ctx, id, organizationID); err != nil {
|
||||
return fmt.Errorf("failed to delete order ingredient transaction: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) ListOrderIngredientTransactions(ctx context.Context, req *contract.ListOrderIngredientTransactionsRequest) ([]*contract.OrderIngredientTransactionResponse, int64, error) {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Convert contract to model
|
||||
modelReq := mappers.ContractToModelListOrderIngredientTransactionsRequest(req)
|
||||
|
||||
// List transactions
|
||||
responses, total, err := s.processor.ListOrderIngredientTransactions(ctx, modelReq, organizationID)
|
||||
if err != nil {
|
||||
return nil, 0, fmt.Errorf("failed to list order ingredient transactions: %w", err)
|
||||
}
|
||||
|
||||
// Convert models to contracts
|
||||
contractResponses := mappers.ModelToContractOrderIngredientTransactionResponses(responses)
|
||||
return contractResponses, total, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) GetOrderIngredientTransactionsByOrder(ctx context.Context, orderID uuid.UUID) ([]*contract.OrderIngredientTransactionResponse, error) {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Get transactions by order
|
||||
responses, err := s.processor.GetOrderIngredientTransactionsByOrder(ctx, orderID, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get order ingredient transactions by order: %w", err)
|
||||
}
|
||||
|
||||
// Convert models to contracts
|
||||
contractResponses := mappers.ModelToContractOrderIngredientTransactionResponses(responses)
|
||||
return contractResponses, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) GetOrderIngredientTransactionsByOrderItem(ctx context.Context, orderItemID uuid.UUID) ([]*contract.OrderIngredientTransactionResponse, error) {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Get transactions by order item
|
||||
responses, err := s.processor.GetOrderIngredientTransactionsByOrderItem(ctx, orderItemID, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get order ingredient transactions by order item: %w", err)
|
||||
}
|
||||
|
||||
// Convert models to contracts
|
||||
contractResponses := mappers.ModelToContractOrderIngredientTransactionResponses(responses)
|
||||
return contractResponses, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) GetOrderIngredientTransactionsByIngredient(ctx context.Context, ingredientID uuid.UUID) ([]*contract.OrderIngredientTransactionResponse, error) {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Get transactions by ingredient
|
||||
responses, err := s.processor.GetOrderIngredientTransactionsByIngredient(ctx, ingredientID, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get order ingredient transactions by ingredient: %w", err)
|
||||
}
|
||||
|
||||
// Convert models to contracts
|
||||
contractResponses := mappers.ModelToContractOrderIngredientTransactionResponses(responses)
|
||||
return contractResponses, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) GetOrderIngredientTransactionSummary(ctx context.Context, req *contract.ListOrderIngredientTransactionsRequest) ([]*contract.OrderIngredientTransactionSummary, error) {
|
||||
// Get organization from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
|
||||
// Convert contract to model
|
||||
modelReq := mappers.ContractToModelListOrderIngredientTransactionsRequest(req)
|
||||
|
||||
// Get summary
|
||||
summaries, err := s.processor.GetOrderIngredientTransactionSummary(ctx, modelReq, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get order ingredient transaction summary: %w", err)
|
||||
}
|
||||
|
||||
// Convert models to contracts
|
||||
contractSummaries := mappers.ModelToContractOrderIngredientTransactionSummaries(summaries)
|
||||
return contractSummaries, nil
|
||||
}
|
||||
|
||||
func (s *OrderIngredientTransactionService) BulkCreateOrderIngredientTransactions(ctx context.Context, transactions []*contract.CreateOrderIngredientTransactionRequest) ([]*contract.OrderIngredientTransactionResponse, error) {
|
||||
// Get organization and outlet from context
|
||||
appCtx := appcontext.FromGinContext(ctx)
|
||||
organizationID := appCtx.OrganizationID
|
||||
outletID := appCtx.OutletID
|
||||
createdBy := appCtx.UserID
|
||||
|
||||
// Convert contracts to models
|
||||
modelReqs := make([]*models.CreateOrderIngredientTransactionRequest, len(transactions))
|
||||
for i, req := range transactions {
|
||||
modelReqs[i] = mappers.ContractToModelCreateOrderIngredientTransactionRequest(req)
|
||||
}
|
||||
|
||||
// Bulk create transactions
|
||||
responses, err := s.processor.BulkCreateOrderIngredientTransactions(ctx, modelReqs, organizationID, outletID, createdBy)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to bulk create order ingredient transactions: %w", err)
|
||||
}
|
||||
|
||||
// Convert models to contracts
|
||||
contractResponses := mappers.ModelToContractOrderIngredientTransactionResponses(responses)
|
||||
return contractResponses, nil
|
||||
}
|
||||
Reference in New Issue
Block a user