package dto import ( "time" entity "gitlab.com/mbugroup/lti-api.git/internal/entities" productCategoryDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/master/product-categories/dto" userDTO "gitlab.com/mbugroup/lti-api.git/internal/modules/users/dto" ) // === DTO Structs === type ProductBaseDTO struct { Id uint `json:"id"` Name string `json:"name"` SKU string `json:"sku"` ProductCategory *productCategoryDTO.ProductCategoryBaseDTO `json:"product_category,omitempty"` } type WarehouseBaseDTO struct { Id uint `json:"id"` Name string `json:"name"` } type ProductWarehouseDTO struct { Id uint `json:"id"` ProductId uint `json:"product_id"` WarehouseId uint `json:"warehouse_id"` Quantity float64 `json:"quantity"` Product *ProductBaseDTO `json:"product,omitempty"` Warehouse *WarehouseBaseDTO `json:"warehouse,omitempty"` } type AdjustmentBaseDTO struct { Id uint `json:"id"` TransactionType string `json:"transaction_type"` Quantity float64 `json:"quantity"` BeforeQuantity float64 `json:"before_quantity"` AfterQuantity float64 `json:"after_quantity"` Note string `json:"note,omitempty"` ProductWarehouseId uint `json:"product_warehouse_id"` ProductWarehouse *ProductWarehouseDTO `json:"product_warehouse,omitempty"` } type AdjustmentListDTO struct { AdjustmentBaseDTO CreatedUser *userDTO.UserBaseDTO `json:"created_user,omitempty"` CreatedAt time.Time `json:"created_at"` } type AdjustmentDetailDTO struct { AdjustmentListDTO UpdatedAt time.Time `json:"updated_at"` } // === Mapper Functions === func ToProductBaseDTO(e *entity.Product) *ProductBaseDTO { if e == nil { return nil } sku := "" if e.Sku != nil { sku = *e.Sku } var category *productCategoryDTO.ProductCategoryBaseDTO if e.ProductCategory.Id != 0 { mapped := productCategoryDTO.ToProductCategoryBaseDTO(e.ProductCategory) category = &mapped } return &ProductBaseDTO{ Id: e.Id, Name: e.Name, SKU: sku, ProductCategory: category, } } func ToWarehouseBaseDTO(e *entity.Warehouse) *WarehouseBaseDTO { if e == nil { return nil } return &WarehouseBaseDTO{ Id: e.Id, Name: e.Name, } } func ToProductWarehouseDTO(e *entity.ProductWarehouse) *ProductWarehouseDTO { if e == nil { return nil } return &ProductWarehouseDTO{ Id: e.Id, ProductId: e.ProductId, WarehouseId: e.WarehouseId, Quantity: e.Quantity, Product: ToProductBaseDTO(&e.Product), Warehouse: ToWarehouseBaseDTO(&e.Warehouse), } } func ToAdjustmentBaseDTO(e *entity.StockLog) AdjustmentBaseDTO { return AdjustmentBaseDTO{ Id: e.Id, TransactionType: e.TransactionType, Quantity: e.Quantity, BeforeQuantity: e.BeforeQuantity, AfterQuantity: e.AfterQuantity, Note: e.Note, ProductWarehouseId: e.ProductWarehouseId, ProductWarehouse: ToProductWarehouseDTO(e.ProductWarehouse), } } func ToAdjustmentListDTO(e *entity.StockLog) AdjustmentListDTO { var createdUser *userDTO.UserBaseDTO if e.CreatedUser != nil { createdUser = &userDTO.UserBaseDTO{ Id: e.CreatedUser.Id, IdUser: e.CreatedUser.IdUser, Email: e.CreatedUser.Email, Name: e.CreatedUser.Name, } } return AdjustmentListDTO{ AdjustmentBaseDTO: ToAdjustmentBaseDTO(e), CreatedUser: createdUser, CreatedAt: e.CreatedAt, } } func ToAdjustmentDetailDTO(e *entity.StockLog) AdjustmentDetailDTO { return AdjustmentDetailDTO{ AdjustmentListDTO: ToAdjustmentListDTO(e), UpdatedAt: e.UpdatedAt, } }