apskel-pos-backend/internal/mappers/category_mapper.go
aditya.siregar 4f5950543e init
2025-07-18 20:10:29 +07:00

155 lines
3.7 KiB
Go

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
SortOrder: 0, // 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
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,
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
var sortOrder int
if entity.Metadata != nil {
if imgURL, exists := entity.Metadata["image_url"]; exists {
if imgURLStr, ok := imgURL.(string); ok {
imageURL = &imgURLStr
}
}
if sort, exists := entity.Metadata["sort_order"]; exists {
if sortInt, ok := sort.(int); ok {
sortOrder = sortInt
} else if sortFloat, ok := sort.(float64); ok {
sortOrder = int(sortFloat)
}
}
}
return &models.CategoryResponse{
ID: entity.ID,
OrganizationID: entity.OrganizationID,
Name: entity.Name,
Description: entity.Description,
ImageURL: imageURL,
SortOrder: sortOrder,
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.SortOrder != nil {
entity.Metadata["sort_order"] = *req.SortOrder
}
}
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
}