apskel-pos-backend/internal/transformer/ingredient_transformer.go
2026-04-27 21:17:12 +07:00

84 lines
2.3 KiB
Go

package transformer
import (
"apskel-pos-be/internal/entities"
"apskel-pos-be/internal/mappers"
"apskel-pos-be/internal/models"
)
// IngredientEntityToResponse converts ingredient entity to response model
func IngredientEntityToResponse(ingredient *entities.Ingredient) *models.IngredientResponse {
if ingredient == nil {
return nil
}
m := mappers.MapIngredientEntityToModel(ingredient)
resp := &models.IngredientResponse{
ID: m.ID,
OrganizationID: m.OrganizationID,
OutletID: m.OutletID,
Name: m.Name,
UnitID: m.UnitID,
Cost: m.Cost,
Stock: m.Stock,
IsSemiFinished: m.IsSemiFinished,
IsActive: m.IsActive,
Metadata: m.Metadata,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
Unit: m.Unit,
}
// Use preloaded compositions for semi-finished ingredients
if ingredient.IsSemiFinished && len(ingredient.Compositions) > 0 {
resp.Compositions = make([]*models.IngredientCompositionResponse, 0, len(ingredient.Compositions))
for _, c := range ingredient.Compositions {
resp.Compositions = append(resp.Compositions, CompositionEntityToResponse(&c))
}
}
return resp
}
// CompositionEntityToResponse converts composition entity to response model
func CompositionEntityToResponse(c *entities.IngredientComposition) *models.IngredientCompositionResponse {
if c == nil {
return nil
}
resp := &models.IngredientCompositionResponse{
ID: c.ID,
OutletID: c.OutletID,
ChildIngredientID: c.ChildIngredientID,
Quantity: c.Quantity,
CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt,
}
if c.ChildIngredient != nil {
resp.ChildIngredient = mappers.MapIngredientEntityToResponse(c.ChildIngredient)
}
if c.ParentIngredient != nil {
resp.ParentIngredient = IngredientEntityToResponse(c.ParentIngredient)
}
return resp
}
// IngredientsToResponses converts slice of ingredient entities to response models
func IngredientsToResponses(ingredients []*entities.Ingredient) []models.IngredientResponse {
if ingredients == nil {
return []models.IngredientResponse{}
}
responses := make([]models.IngredientResponse, len(ingredients))
for i, ing := range ingredients {
response := IngredientEntityToResponse(ing)
if response != nil {
responses[i] = *response
}
}
return responses
}