using MediatR;
using TakeoutSaaS.Application.App.Billings.Dto;
using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Shared.Abstractions.Results;
namespace TakeoutSaaS.Application.App.Billings.Queries;
///
/// 分页查询账单列表。
///
public sealed record GetBillingListQuery : IRequest>
{
///
/// 租户 ID(可选,管理员可查询所有租户)。
///
public long? TenantId { get; init; }
///
/// 账单状态筛选。
///
public TenantBillingStatus? Status { get; init; }
///
/// 账单类型筛选。
///
public BillingType? BillingType { get; init; }
///
/// 账单起始时间(UTC)筛选。
///
public DateTime? StartDate { get; init; }
///
/// 账单结束时间(UTC)筛选。
///
public DateTime? EndDate { get; init; }
///
/// 关键词搜索(账单编号)。
///
public string? Keyword { get; init; }
///
/// 最小应付金额筛选(包含)。
///
public decimal? MinAmount { get; init; }
///
/// 最大应付金额筛选(包含)。
///
public decimal? MaxAmount { get; init; }
///
/// 页码(从 1 开始)。
///
public int PageNumber { get; init; } = 1;
///
/// 每页条数。
///
public int PageSize { get; init; } = 20;
///
/// 排序字段(DueDate/CreatedAt/AmountDue)。
///
public string? SortBy { get; init; }
///
/// 是否降序排序。
///
public bool SortDesc { get; init; }
}