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 }