package mappers import ( "apskel-pos-be/internal/entities" "apskel-pos-be/internal/models" ) func CategoryEntityToModel(entity *entities.Category) *models.Category { if entity == nil { return nil } return &models.Category{ ID: entity.ID, OrganizationID: entity.OrganizationID, Name: entity.Name, Description: entity.Description, ImageURL: nil, // Entity doesn't have ImageURL, model does Order: entity.Order, // Entity doesn't have SortOrder, model does IsActive: true, // Entity doesn't have IsActive, default to true CreatedAt: entity.CreatedAt, UpdatedAt: entity.UpdatedAt, } } func CategoryModelToEntity(model *models.Category) *entities.Category { if model == nil { return nil } metadata := entities.Metadata{} if model.ImageURL != nil { metadata["image_url"] = *model.ImageURL } // metadata["sort_order"] = model.SortOrder return &entities.Category{ ID: model.ID, OrganizationID: model.OrganizationID, Name: model.Name, Description: model.Description, BusinessType: "restaurant", // Default business type Order: model.Order, Metadata: metadata, CreatedAt: model.CreatedAt, UpdatedAt: model.UpdatedAt, } } func CreateCategoryRequestToEntity(req *models.CreateCategoryRequest) *entities.Category { if req == nil { return nil } metadata := entities.Metadata{} if req.ImageURL != nil { metadata["image_url"] = *req.ImageURL } // metadata["sort_order"] = req.SortOrder return &entities.Category{ OrganizationID: req.OrganizationID, Name: req.Name, Description: req.Description, Order: req.Order, BusinessType: "restaurant", // Default business type Metadata: metadata, } } func CategoryEntityToResponse(entity *entities.Category) *models.CategoryResponse { if entity == nil { return nil } // Extract image URL and sort order from metadata var imageURL *string if entity.Metadata != nil { if imgURL, exists := entity.Metadata["image_url"]; exists { if imgURLStr, ok := imgURL.(string); ok { imageURL = &imgURLStr } } } return &models.CategoryResponse{ ID: entity.ID, OrganizationID: entity.OrganizationID, Name: entity.Name, Description: entity.Description, ImageURL: imageURL, Order: entity.Order, IsActive: true, // Default to true since entity doesn't have this field CreatedAt: entity.CreatedAt, UpdatedAt: entity.UpdatedAt, } } func UpdateCategoryEntityFromRequest(entity *entities.Category, req *models.UpdateCategoryRequest) { if entity == nil || req == nil { return } if req.Name != nil { entity.Name = *req.Name } if req.Description != nil { entity.Description = req.Description } if entity.Metadata == nil { entity.Metadata = make(entities.Metadata) } if req.ImageURL != nil { entity.Metadata["image_url"] = *req.ImageURL } if req.Order != nil { entity.Order = *req.Order } } func CategoryEntitiesToModels(entities []*entities.Category) []*models.Category { if entities == nil { return nil } models := make([]*models.Category, len(entities)) for i, entity := range entities { models[i] = CategoryEntityToModel(entity) } return models } func CategoryEntitiesToResponses(entities []*entities.Category) []*models.CategoryResponse { if entities == nil { return nil } responses := make([]*models.CategoryResponse, len(entities)) for i, entity := range entities { responses[i] = CategoryEntityToResponse(entity) } return responses }