init
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
package mappers
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/entities"
|
||||
"apskel-pos-be/internal/models"
|
||||
)
|
||||
|
||||
func InventoryMovementEntityToModel(entity *entities.InventoryMovement) *models.InventoryMovement {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.InventoryMovement{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
ProductID: entity.ProductID,
|
||||
MovementType: models.InventoryMovementType(entity.MovementType),
|
||||
Quantity: entity.Quantity,
|
||||
PreviousQuantity: entity.PreviousQuantity,
|
||||
NewQuantity: entity.NewQuantity,
|
||||
UnitCost: entity.UnitCost,
|
||||
TotalCost: entity.TotalCost,
|
||||
ReferenceType: (*models.InventoryMovementReferenceType)(entity.ReferenceType),
|
||||
ReferenceID: entity.ReferenceID,
|
||||
OrderID: entity.OrderID,
|
||||
PaymentID: entity.PaymentID,
|
||||
UserID: entity.UserID,
|
||||
Reason: entity.Reason,
|
||||
Notes: entity.Notes,
|
||||
Metadata: map[string]interface{}(entity.Metadata),
|
||||
CreatedAt: entity.CreatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func InventoryMovementModelToEntity(model *models.InventoryMovement) *entities.InventoryMovement {
|
||||
if model == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &entities.InventoryMovement{
|
||||
ID: model.ID,
|
||||
OrganizationID: model.OrganizationID,
|
||||
OutletID: model.OutletID,
|
||||
ProductID: model.ProductID,
|
||||
MovementType: entities.InventoryMovementType(model.MovementType),
|
||||
Quantity: model.Quantity,
|
||||
PreviousQuantity: model.PreviousQuantity,
|
||||
NewQuantity: model.NewQuantity,
|
||||
UnitCost: model.UnitCost,
|
||||
TotalCost: model.TotalCost,
|
||||
ReferenceType: (*entities.InventoryMovementReferenceType)(model.ReferenceType),
|
||||
ReferenceID: model.ReferenceID,
|
||||
OrderID: model.OrderID,
|
||||
PaymentID: model.PaymentID,
|
||||
UserID: model.UserID,
|
||||
Reason: model.Reason,
|
||||
Notes: model.Notes,
|
||||
Metadata: entities.Metadata(model.Metadata),
|
||||
CreatedAt: model.CreatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func InventoryMovementEntityToResponse(entity *entities.InventoryMovement) *models.InventoryMovementResponse {
|
||||
if entity == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &models.InventoryMovementResponse{
|
||||
ID: entity.ID,
|
||||
OrganizationID: entity.OrganizationID,
|
||||
OutletID: entity.OutletID,
|
||||
ProductID: entity.ProductID,
|
||||
MovementType: models.InventoryMovementType(entity.MovementType),
|
||||
Quantity: entity.Quantity,
|
||||
PreviousQuantity: entity.PreviousQuantity,
|
||||
NewQuantity: entity.NewQuantity,
|
||||
UnitCost: entity.UnitCost,
|
||||
TotalCost: entity.TotalCost,
|
||||
ReferenceType: (*models.InventoryMovementReferenceType)(entity.ReferenceType),
|
||||
ReferenceID: entity.ReferenceID,
|
||||
OrderID: entity.OrderID,
|
||||
PaymentID: entity.PaymentID,
|
||||
UserID: entity.UserID,
|
||||
Reason: entity.Reason,
|
||||
Notes: entity.Notes,
|
||||
Metadata: map[string]interface{}(entity.Metadata),
|
||||
CreatedAt: entity.CreatedAt,
|
||||
MovementDescription: entity.GetMovementDescription(),
|
||||
}
|
||||
}
|
||||
|
||||
func InventoryMovementEntitiesToResponses(entities []*entities.InventoryMovement) []models.InventoryMovementResponse {
|
||||
responses := make([]models.InventoryMovementResponse, len(entities))
|
||||
for i, entity := range entities {
|
||||
if response := InventoryMovementEntityToResponse(entity); response != nil {
|
||||
responses[i] = *response
|
||||
}
|
||||
}
|
||||
return responses
|
||||
}
|
||||
|
||||
func InventoryMovementEntitiesToModels(entities []*entities.InventoryMovement) []*models.InventoryMovement {
|
||||
models := make([]*models.InventoryMovement, len(entities))
|
||||
for i, entity := range entities {
|
||||
models[i] = InventoryMovementEntityToModel(entity)
|
||||
}
|
||||
return models
|
||||
}
|
||||
|
||||
func CreateInventoryMovementRequestToEntity(req *models.CreateInventoryMovementRequest, previousQuantity, newQuantity int) *entities.InventoryMovement {
|
||||
if req == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &entities.InventoryMovement{
|
||||
OrganizationID: req.OrganizationID,
|
||||
OutletID: req.OutletID,
|
||||
ProductID: req.ProductID,
|
||||
MovementType: entities.InventoryMovementType(req.MovementType),
|
||||
Quantity: req.Quantity,
|
||||
PreviousQuantity: previousQuantity,
|
||||
NewQuantity: newQuantity,
|
||||
UnitCost: req.UnitCost,
|
||||
TotalCost: float64(req.Quantity) * req.UnitCost,
|
||||
ReferenceType: (*entities.InventoryMovementReferenceType)(req.ReferenceType),
|
||||
ReferenceID: req.ReferenceID,
|
||||
OrderID: req.OrderID,
|
||||
PaymentID: req.PaymentID,
|
||||
UserID: req.UserID,
|
||||
Reason: req.Reason,
|
||||
Notes: req.Notes,
|
||||
Metadata: entities.Metadata(req.Metadata),
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,8 @@ func ProductEntityToModel(entity *entities.Product) *models.Product {
|
||||
Price: entity.Price,
|
||||
Cost: entity.Cost,
|
||||
BusinessType: constants.BusinessType(entity.BusinessType),
|
||||
ImageURL: entity.ImageURL,
|
||||
PrinterType: entity.PrinterType,
|
||||
Metadata: map[string]interface{}(entity.Metadata),
|
||||
IsActive: entity.IsActive,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
@@ -43,6 +45,8 @@ func ProductModelToEntity(model *models.Product) *entities.Product {
|
||||
Price: model.Price,
|
||||
Cost: model.Cost,
|
||||
BusinessType: string(model.BusinessType),
|
||||
ImageURL: model.ImageURL,
|
||||
PrinterType: model.PrinterType,
|
||||
Metadata: entities.Metadata(model.Metadata),
|
||||
IsActive: model.IsActive,
|
||||
CreatedAt: model.CreatedAt,
|
||||
@@ -65,6 +69,11 @@ func CreateProductRequestToEntity(req *models.CreateProductRequest) *entities.Pr
|
||||
businessType = string(req.BusinessType)
|
||||
}
|
||||
|
||||
printerType := "kitchen"
|
||||
if req.PrinterType != nil && *req.PrinterType != "" {
|
||||
printerType = *req.PrinterType
|
||||
}
|
||||
|
||||
metadata := entities.Metadata{}
|
||||
if req.Metadata != nil {
|
||||
metadata = entities.Metadata(req.Metadata)
|
||||
@@ -79,6 +88,8 @@ func CreateProductRequestToEntity(req *models.CreateProductRequest) *entities.Pr
|
||||
Price: req.Price,
|
||||
Cost: cost,
|
||||
BusinessType: businessType,
|
||||
ImageURL: req.ImageURL,
|
||||
PrinterType: printerType,
|
||||
Metadata: metadata,
|
||||
IsActive: true, // Default to active
|
||||
}
|
||||
@@ -117,6 +128,8 @@ func ProductEntityToResponse(entity *entities.Product) *models.ProductResponse {
|
||||
Price: entity.Price,
|
||||
Cost: entity.Cost,
|
||||
BusinessType: constants.BusinessType(entity.BusinessType),
|
||||
ImageURL: entity.ImageURL,
|
||||
PrinterType: entity.PrinterType,
|
||||
Metadata: map[string]interface{}(entity.Metadata),
|
||||
IsActive: entity.IsActive,
|
||||
CreatedAt: entity.CreatedAt,
|
||||
@@ -154,6 +167,14 @@ func UpdateProductEntityFromRequest(entity *entities.Product, req *models.Update
|
||||
entity.Cost = *req.Cost
|
||||
}
|
||||
|
||||
if req.ImageURL != nil {
|
||||
entity.ImageURL = req.ImageURL
|
||||
}
|
||||
|
||||
if req.PrinterType != nil {
|
||||
entity.PrinterType = *req.PrinterType
|
||||
}
|
||||
|
||||
if req.Metadata != nil {
|
||||
if entity.Metadata == nil {
|
||||
entity.Metadata = make(entities.Metadata)
|
||||
|
||||
Reference in New Issue
Block a user