using TakeoutSaaS.Domain.Orders.Entities;
using TakeoutSaaS.Domain.Orders.Enums;
using TakeoutSaaS.Domain.Payments.Enums;
namespace TakeoutSaaS.Domain.Orders.Repositories;
///
/// 订单聚合仓储契约。
///
public interface IOrderRepository
{
///
/// 依据标识获取订单。
///
/// 订单 ID。
/// 租户 ID。
/// 取消标记。
/// 订单实体或 null。
Task FindByIdAsync(long orderId, long tenantId, CancellationToken cancellationToken = default);
///
/// 依据标识获取订单(跨租户)。
///
/// 订单 ID。
/// 取消标记。
/// 订单实体或 null。
Task FindByIdAsync(long orderId, CancellationToken cancellationToken = default);
///
/// 依据订单号获取订单。
///
/// 订单号。
/// 租户 ID。
/// 取消标记。
/// 订单实体或 null。
Task FindByOrderNoAsync(string orderNo, long tenantId, CancellationToken cancellationToken = default);
///
/// 按状态筛选订单列表。
///
/// 租户 ID。
/// 订单状态。
/// 支付状态。
/// 取消标记。
/// 订单集合。
Task> SearchAsync(long tenantId, OrderStatus? status, PaymentStatus? paymentStatus, CancellationToken cancellationToken = default);
///
/// 按状态筛选订单列表(可选租户过滤)。
///
/// 租户 ID(可选,空表示跨租户查询)。
/// 订单状态。
/// 支付状态。
/// 取消标记。
/// 订单集合。
Task> SearchAsync(long? tenantId, OrderStatus? status, PaymentStatus? paymentStatus, CancellationToken cancellationToken = default);
///
/// 获取订单明细行。
///
/// 订单 ID。
/// 租户 ID。
/// 取消标记。
/// 订单明细集合。
Task> GetItemsAsync(long orderId, long tenantId, CancellationToken cancellationToken = default);
///
/// 获取订单状态流转记录。
///
/// 订单 ID。
/// 租户 ID。
/// 取消标记。
/// 状态变更记录列表。
Task> GetStatusHistoryAsync(long orderId, long tenantId, CancellationToken cancellationToken = default);
///
/// 获取订单退款申请。
///
/// 订单 ID。
/// 租户 ID。
/// 取消标记。
/// 退款申请列表。
Task> GetRefundsAsync(long orderId, long tenantId, CancellationToken cancellationToken = default);
///
/// 新增订单。
///
/// 订单实体。
/// 取消标记。
/// 异步任务。
Task AddOrderAsync(Order order, CancellationToken cancellationToken = default);
///
/// 新增订单明细。
///
/// 明细集合。
/// 取消标记。
/// 异步任务。
Task AddItemsAsync(IEnumerable items, CancellationToken cancellationToken = default);
///
/// 新增订单状态记录。
///
/// 状态记录。
/// 取消标记。
/// 异步任务。
Task AddStatusHistoryAsync(OrderStatusHistory history, CancellationToken cancellationToken = default);
///
/// 新增退款申请。
///
/// 退款申请实体。
/// 取消标记。
/// 异步任务。
Task AddRefundAsync(RefundRequest refund, CancellationToken cancellationToken = default);
///
/// 持久化变更。
///
/// 取消标记。
/// 异步任务。
Task SaveChangesAsync(CancellationToken cancellationToken = default);
///
/// 更新订单。
///
/// 订单实体。
/// 取消标记。
/// 异步任务。
Task UpdateOrderAsync(Order order, CancellationToken cancellationToken = default);
///
/// 删除订单。
///
/// 订单 ID。
/// 租户 ID。
/// 取消标记。
/// 异步任务。
Task DeleteOrderAsync(long orderId, long tenantId, CancellationToken cancellationToken = default);
}