79 lines
2.2 KiB
C#
79 lines
2.2 KiB
C#
using Microsoft.eShopOnContainers.Services.Ordering.Domain.Seedwork;
|
|
using Ordering.Domain.Exceptions;
|
|
using System;
|
|
|
|
namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate
|
|
{
|
|
public class OrderItem
|
|
: Entity
|
|
{
|
|
// DDD Patterns comment
|
|
// Using private fields, allowed since EF Core 1.1, is a much better encapsulation
|
|
// aligned with DDD Aggregates and Domain Entities (Instead of properties and property collections)
|
|
private string _productName;
|
|
private string _pictureUrl;
|
|
private int _orderId;
|
|
private decimal _unitPrice;
|
|
private decimal _discount;
|
|
private int _units;
|
|
|
|
public int ProductId { get; private set; }
|
|
|
|
protected OrderItem() { }
|
|
|
|
public OrderItem(int productId, string productName, decimal unitPrice, decimal discount, string PictureUrl, int units = 1)
|
|
{
|
|
if (units <= 0)
|
|
{
|
|
throw new OrderingDomainException("Invalid number of units");
|
|
}
|
|
|
|
if ((unitPrice * units) < discount)
|
|
{
|
|
throw new OrderingDomainException("The total of order item is lower than applied discount");
|
|
}
|
|
|
|
ProductId = productId;
|
|
|
|
_productName = productName;
|
|
_unitPrice = unitPrice;
|
|
_discount = discount;
|
|
_units = units;
|
|
_pictureUrl = PictureUrl;
|
|
}
|
|
|
|
public void SetPictureUri(string pictureUri)
|
|
{
|
|
if (!String.IsNullOrWhiteSpace(pictureUri))
|
|
{
|
|
_pictureUrl = pictureUri;
|
|
}
|
|
}
|
|
|
|
public decimal GetCurrentDiscount()
|
|
{
|
|
return _discount;
|
|
}
|
|
|
|
public void SetNewDiscount(decimal discount)
|
|
{
|
|
if (discount < 0)
|
|
{
|
|
throw new OrderingDomainException("Discount is not valid");
|
|
}
|
|
|
|
_discount = discount;
|
|
}
|
|
|
|
public void AddUnits(int units)
|
|
{
|
|
if (units < 0)
|
|
{
|
|
throw new OrderingDomainException("Invalid units");
|
|
}
|
|
|
|
_units += units;
|
|
}
|
|
}
|
|
}
|