apskel-pos-backend/internal/mappers/inventory_mapper.go
2025-08-13 21:02:26 +07:00

122 lines
2.7 KiB
Go

package mappers
import (
"apskel-pos-be/internal/entities"
"apskel-pos-be/internal/models"
"github.com/google/uuid"
)
func InventoryEntityToModel(entity *entities.Inventory) *models.Inventory {
if entity == nil {
return nil
}
return &models.Inventory{
ID: entity.ID,
OutletID: entity.OutletID,
ProductID: entity.ProductID,
Quantity: entity.Quantity,
ReorderLevel: entity.ReorderLevel,
UpdatedAt: entity.UpdatedAt,
}
}
func InventoryModelToEntity(model *models.Inventory) *entities.Inventory {
if model == nil {
return nil
}
return &entities.Inventory{
ID: model.ID,
OutletID: model.OutletID,
ProductID: model.ProductID,
Quantity: model.Quantity,
ReorderLevel: model.ReorderLevel,
UpdatedAt: model.UpdatedAt,
}
}
func CreateInventoryRequestToEntity(req *models.CreateInventoryRequest) *entities.Inventory {
if req == nil {
return nil
}
return &entities.Inventory{
OutletID: req.OutletID,
ProductID: req.ProductID,
Quantity: req.Quantity,
ReorderLevel: req.ReorderLevel,
}
}
func InventoryEntityToResponse(entity *entities.Inventory) *models.InventoryResponse {
if entity == nil {
return nil
}
productName := ""
if entity.Product.ID != uuid.Nil {
productName = entity.Product.Name
}
return &models.InventoryResponse{
ID: entity.ID,
OutletID: entity.OutletID,
ProductID: entity.ProductID,
ProductName: productName,
Quantity: entity.Quantity,
ReorderLevel: entity.ReorderLevel,
IsLowStock: entity.IsLowStock(),
UpdatedAt: entity.UpdatedAt,
}
}
func UpdateInventoryEntityFromRequest(entity *entities.Inventory, req *models.UpdateInventoryRequest) {
if entity == nil || req == nil {
return
}
if req.Quantity != nil {
entity.Quantity = *req.Quantity
}
if req.ReorderLevel != nil {
entity.ReorderLevel = *req.ReorderLevel
}
}
func InventoryAdjustmentRequestToModel(req *models.InventoryAdjustmentRequest) *models.InventoryAdjustmentRequest {
if req == nil {
return nil
}
return &models.InventoryAdjustmentRequest{
Delta: req.Delta,
Reason: req.Reason,
}
}
func InventoryEntitiesToModels(entities []*entities.Inventory) []*models.Inventory {
if entities == nil {
return nil
}
models := make([]*models.Inventory, len(entities))
for i, entity := range entities {
models[i] = InventoryEntityToModel(entity)
}
return models
}
func InventoryEntitiesToResponses(entities []*entities.Inventory) []*models.InventoryResponse {
if entities == nil {
return nil
}
responses := make([]*models.InventoryResponse, len(entities))
for i, entity := range entities {
responses[i] = InventoryEntityToResponse(entity)
}
return responses
}