namespace CartWise.Domain.Entities; public class PurchaseItem { public Guid PurchaseItemId { get; private set; } public Guid PurchaseId { get; private set; } public Guid? ProductId { get; private set; } public Guid? GroceryConceptId { get; private set; } public Guid? ShoppingListItemId { get; private set; } public string Description { get; private set; } = null!; public decimal Quantity { get; private set; } public string? Unit { get; private set; } public decimal LinePrice { get; private set; } public decimal? UnitPrice { get; private set; } public DateTime CreatedUtc { get; private set; } private PurchaseItem() { } public PurchaseItem( Guid purchaseId, string description, decimal linePrice, DateTime createdUtc, decimal quantity = 1m, string? unit = null, Guid? productId = null, Guid? groceryConceptId = null, Guid? shoppingListItemId = null, decimal? unitPrice = null) { if (purchaseId == Guid.Empty) { throw new ArgumentException("PurchaseId is required.", nameof(purchaseId)); } if (string.IsNullOrWhiteSpace(description)) { throw new ArgumentException("Description is required.", nameof(description)); } if (quantity <= 0) { throw new ArgumentOutOfRangeException(nameof(quantity), "Quantity must be greater than zero."); } if (linePrice < 0) { throw new ArgumentOutOfRangeException(nameof(linePrice), "LinePrice cannot be negative."); } PurchaseItemId = Guid.NewGuid(); PurchaseId = purchaseId; Description = description.Trim(); Quantity = quantity; Unit = unit; LinePrice = linePrice; UnitPrice = unitPrice; ProductId = productId; GroceryConceptId = groceryConceptId; ShoppingListItemId = shoppingListItemId; CreatedUtc = createdUtc; } }