add product ingredients
This commit is contained in:
@@ -32,6 +32,7 @@ type IngredientUnitConverterProcessor interface {
|
||||
ListIngredientUnitConverters(ctx context.Context, organizationID uuid.UUID, filters map[string]interface{}, page, limit int) ([]*models.IngredientUnitConverterResponse, int, error)
|
||||
GetConvertersForIngredient(ctx context.Context, ingredientID, organizationID uuid.UUID) ([]*models.IngredientUnitConverterResponse, error)
|
||||
ConvertUnit(ctx context.Context, organizationID uuid.UUID, req *models.ConvertUnitRequest) (*models.ConvertUnitResponse, error)
|
||||
GetUnitsByIngredientID(ctx context.Context, organizationID, ingredientID uuid.UUID) (*models.IngredientUnitsResponse, error)
|
||||
}
|
||||
|
||||
type IngredientUnitConverterProcessorImpl struct {
|
||||
@@ -257,3 +258,64 @@ func (p *IngredientUnitConverterProcessorImpl) ConvertUnit(ctx context.Context,
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (p *IngredientUnitConverterProcessorImpl) GetUnitsByIngredientID(ctx context.Context, organizationID, ingredientID uuid.UUID) (*models.IngredientUnitsResponse, error) {
|
||||
// Get the ingredient with its base unit
|
||||
ingredient, err := p.ingredientRepo.GetByID(ctx, ingredientID, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get ingredient: %w", err)
|
||||
}
|
||||
|
||||
// Get the base unit details
|
||||
baseUnit, err := p.unitRepo.GetByID(ctx, ingredient.UnitID, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get base unit: %w", err)
|
||||
}
|
||||
|
||||
// Start with the base unit
|
||||
units := []*models.UnitResponse{
|
||||
mappers.MapUnitEntityToResponse(baseUnit),
|
||||
}
|
||||
|
||||
// Get all converters for this ingredient
|
||||
converters, err := p.converterRepo.GetConvertersForIngredient(ctx, ingredientID, organizationID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get converters: %w", err)
|
||||
}
|
||||
|
||||
// Add unique units from converters
|
||||
unitMap := make(map[uuid.UUID]bool)
|
||||
unitMap[baseUnit.ID] = true
|
||||
|
||||
for _, converter := range converters {
|
||||
if converter.IsActive {
|
||||
// Add FromUnit if not already added
|
||||
if !unitMap[converter.FromUnitID] {
|
||||
fromUnit, err := p.unitRepo.GetByID(ctx, converter.FromUnitID, organizationID)
|
||||
if err == nil {
|
||||
units = append(units, mappers.MapUnitEntityToResponse(fromUnit))
|
||||
unitMap[converter.FromUnitID] = true
|
||||
}
|
||||
}
|
||||
|
||||
// Add ToUnit if not already added
|
||||
if !unitMap[converter.ToUnitID] {
|
||||
toUnit, err := p.unitRepo.GetByID(ctx, converter.ToUnitID, organizationID)
|
||||
if err == nil {
|
||||
units = append(units, mappers.MapUnitEntityToResponse(toUnit))
|
||||
unitMap[converter.ToUnitID] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
response := &models.IngredientUnitsResponse{
|
||||
IngredientID: ingredientID,
|
||||
IngredientName: ingredient.Name,
|
||||
BaseUnitID: baseUnit.ID,
|
||||
BaseUnitName: baseUnit.Name,
|
||||
Units: units,
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user