Newer
Older
Warehouse / src / Domain / Common / ValueObjects / Mass / Mass.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 722 bytes Init
namespace MyWarehouse.Domain.Common.ValueObjects.Mass;

public record Mass
{
    public float Value { get; init; }

    [Required]
    public MassUnit Unit { get; init; }

    public Mass(float value, MassUnit unit)
    {
        if (value < 0)
            throw new ArgumentException("Value cannot be negative", nameof(value));

        Value = value;
        Unit = unit;
    }

    public Mass ConvertTo(MassUnit newUnit)
    {
        if (newUnit == Unit)
            return this;

        return new Mass(
            value: Value * Unit.ConversionRateToGram / newUnit.ConversionRateToGram,
            unit: newUnit
        );
    }

    public override string ToString()
        => $"{Value:n} {Unit.Symbol}";
}