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 ProductRelationDTO struct { Id uint `json:"id"` Name string `json:"name"` SKU string `json:"sku"` ProductCategory *productCategoryDTO.ProductCategoryRelationDTO `json:"product_category,omitempty"` } type WarehouseRelationDTO 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 *ProductRelationDTO `json:"product,omitempty"` Warehouse *WarehouseRelationDTO `json:"warehouse,omitempty"` } type AdjustmentRelationDTO struct { Id uint `json:"id"` Increase float64 `json:"increase"` Decrease float64 `json:"decrease"` Note string `json:"note,omitempty"` ProductWarehouseId uint `json:"product_warehouse_id"` ProductWarehouse *ProductWarehouseDTO `json:"product_warehouse,omitempty"` } type AdjustmentListDTO struct { AdjustmentRelationDTO CreatedUser *userDTO.UserRelationDTO `json:"created_user,omitempty"` CreatedAt time.Time `json:"created_at"` } type AdjustmentDetailDTO struct { AdjustmentListDTO UpdatedAt time.Time `json:"updated_at"` } // === Mapper Functions === func ToProductRelationDTO(e *entity.Product) *ProductRelationDTO { if e == nil { return nil } sku := "" if e.Sku != nil { sku = *e.Sku } var category *productCategoryDTO.ProductCategoryRelationDTO if e.ProductCategory.Id != 0 { mapped := productCategoryDTO.ToProductCategoryRelationDTO(e.ProductCategory) category = &mapped } return &ProductRelationDTO{ Id: e.Id, Name: e.Name, SKU: sku, ProductCategory: category, } } func ToWarehouseRelationDTO(e *entity.Warehouse) *WarehouseRelationDTO { if e == nil { return nil } return &WarehouseRelationDTO{ 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: ToProductRelationDTO(&e.Product), Warehouse: ToWarehouseRelationDTO(&e.Warehouse), } } func ToAdjustmentRelationDTO(e *entity.AdjustmentStock) AdjustmentRelationDTO { return AdjustmentRelationDTO{ Id: e.Id, Note: "", Increase: e.TotalQty, Decrease: e.UsageQty, ProductWarehouseId: e.ProductWarehouseId, ProductWarehouse: ToProductWarehouseDTO(e.ProductWarehouse), } } func ToAdjustmentListDTO(e *entity.AdjustmentStock) AdjustmentListDTO { var createdUser *userDTO.UserRelationDTO // Get created user from StockLog if e.StockLog != nil && e.StockLog.CreatedUser != nil { mapped := userDTO.ToUserRelationDTO(*e.StockLog.CreatedUser) createdUser = &mapped } return AdjustmentListDTO{ AdjustmentRelationDTO: ToAdjustmentRelationDTO(e), CreatedUser: createdUser, CreatedAt: e.CreatedAt, } } func ToAdjustmentDetailDTO(e *entity.AdjustmentStock) AdjustmentDetailDTO { return AdjustmentDetailDTO{ AdjustmentListDTO: ToAdjustmentListDTO(e), } }