// EN: Domain events for Order aggregate.
// VI: Domain events cho Order aggregate.

using MediatR;
using OrderService.Domain.AggregatesModel.OrderAggregate;

namespace OrderService.Domain.Events;

/// <summary>
/// EN: Domain event raised when an order is created.
/// VI: Domain event phát ra khi đơn hàng được tạo.
/// </summary>
public record OrderCreatedDomainEvent(Order Order) : INotification;

/// <summary>
/// EN: Domain event raised when an order is paid.
/// VI: Domain event phát ra khi đơn hàng được thanh toán.
/// </summary>
public record OrderPaidDomainEvent(Order Order) : INotification;

/// <summary>
/// EN: Domain event raised when an order is completed.
/// VI: Domain event phát ra khi đơn hàng hoàn thành.
/// </summary>
public record OrderCompletedDomainEvent(Order Order) : INotification;

/// <summary>
/// EN: Domain event raised when an order is cancelled.
/// VI: Domain event phát ra khi đơn hàng bị hủy.
/// </summary>
public record OrderCancelledDomainEvent(Order Order, string Reason) : INotification;
