package transformer import ( "apskel-pos-be/internal/contract" "apskel-pos-be/internal/models" ) // Request transformations func CreateIngredientUnitConverterRequestToModel(req *contract.CreateIngredientUnitConverterRequest) *models.CreateIngredientUnitConverterRequest { if req == nil { return nil } return &models.CreateIngredientUnitConverterRequest{ IngredientID: req.IngredientID, FromUnitID: req.FromUnitID, ToUnitID: req.ToUnitID, ConversionFactor: req.ConversionFactor, IsActive: req.IsActive, } } func UpdateIngredientUnitConverterRequestToModel(req *contract.UpdateIngredientUnitConverterRequest) *models.UpdateIngredientUnitConverterRequest { if req == nil { return nil } return &models.UpdateIngredientUnitConverterRequest{ FromUnitID: req.FromUnitID, ToUnitID: req.ToUnitID, ConversionFactor: req.ConversionFactor, IsActive: req.IsActive, } } func ListIngredientUnitConvertersRequestToModel(req *contract.ListIngredientUnitConvertersRequest) *models.ListIngredientUnitConvertersRequest { if req == nil { return nil } return &models.ListIngredientUnitConvertersRequest{ IngredientID: req.IngredientID, FromUnitID: req.FromUnitID, ToUnitID: req.ToUnitID, IsActive: req.IsActive, Search: req.Search, Page: req.Page, Limit: req.Limit, } } func ConvertUnitRequestToModel(req *contract.ConvertUnitRequest) *models.ConvertUnitRequest { if req == nil { return nil } return &models.ConvertUnitRequest{ IngredientID: req.IngredientID, FromUnitID: req.FromUnitID, ToUnitID: req.ToUnitID, Quantity: req.Quantity, } } // Response transformations func IngredientUnitConverterModelResponseToResponse(model *models.IngredientUnitConverterResponse) contract.IngredientUnitConverterResponse { if model == nil { return contract.IngredientUnitConverterResponse{} } response := contract.IngredientUnitConverterResponse{ ID: model.ID, OrganizationID: model.OrganizationID, IngredientID: model.IngredientID, FromUnitID: model.FromUnitID, ToUnitID: model.ToUnitID, ConversionFactor: model.ConversionFactor, IsActive: model.IsActive, CreatedAt: model.CreatedAt, UpdatedAt: model.UpdatedAt, CreatedBy: model.CreatedBy, UpdatedBy: model.UpdatedBy, } // Map related entities if model.Ingredient != nil { ingredientResp := IngredientModelResponseToResponse(model.Ingredient) response.Ingredient = &ingredientResp } if model.FromUnit != nil { fromUnitResp := UnitModelResponseToResponse(model.FromUnit) response.FromUnit = &fromUnitResp } if model.ToUnit != nil { toUnitResp := UnitModelResponseToResponse(model.ToUnit) response.ToUnit = &toUnitResp } return response } func ConvertUnitModelResponseToResponse(model *models.ConvertUnitResponse) contract.ConvertUnitResponse { if model == nil { return contract.ConvertUnitResponse{} } response := contract.ConvertUnitResponse{ FromQuantity: model.FromQuantity, ToQuantity: model.ToQuantity, ConversionFactor: model.ConversionFactor, } // Map units if model.FromUnit != nil { fromUnitResp := UnitModelResponseToResponse(model.FromUnit) response.FromUnit = &fromUnitResp } if model.ToUnit != nil { toUnitResp := UnitModelResponseToResponse(model.ToUnit) response.ToUnit = &toUnitResp } // Map ingredient if model.Ingredient != nil { ingredientResp := IngredientModelResponseToResponse(model.Ingredient) response.Ingredient = &ingredientResp } return response } // Helper functions for related entities func IngredientModelResponseToResponse(model *models.IngredientResponse) contract.IngredientResponse { if model == nil { return contract.IngredientResponse{} } return contract.IngredientResponse{ ID: model.ID, Name: model.Name, } } func UnitModelResponseToResponse(model *models.UnitResponse) contract.UnitResponse { if model == nil { return contract.UnitResponse{} } return contract.UnitResponse{ ID: model.ID, Name: model.Name, } } func IngredientUnitsModelResponseToResponse(model *models.IngredientUnitsResponse) contract.IngredientUnitsResponse { if model == nil { return contract.IngredientUnitsResponse{} } response := contract.IngredientUnitsResponse{ IngredientID: model.IngredientID, IngredientName: model.IngredientName, BaseUnitID: model.BaseUnitID, BaseUnitName: model.BaseUnitName, Units: make([]*contract.UnitResponse, 0), } // Map units for _, unit := range model.Units { if unit != nil { unitResp := UnitModelResponseToResponse(unit) response.Units = append(response.Units, &unitResp) } } return response }