84 lines
2.3 KiB
Go
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
|
|
}
|