using System;
namespace AggregateConsistencyBoundary
{
public class Stop
{
public int StopId { get; set; }
public StopType Type { get; set; }
public StopStatus Status { get; set; }
public int Sequence { get; set; }
public Address Address { get; set; }
public DateTime Scheduled { get; set; }
public DateTime? Departed { get; set; }
public void Arrive()
{
if (Status != StopStatus.InTransit)
{
throw new InvalidOperationException("Stop has already arrived.");
}
Status = StopStatus.Arrived;
}
public void Depart()
{
if (Status == StopStatus.Departed)
{
throw new InvalidOperationException("Stop has already departed.");
}
if (Status == StopStatus.InTransit)
{
throw new InvalidOperationException("Stop hasn't arrived yet.");
}
Status = StopStatus.Departed;
Departed = DateTime.UtcNow;
}
}
public enum StopType
{
Pickup,
Delivery
}
public enum StopStatus
{
InTransit,
Arrived,
Departed
}
}