using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
using System.ComponentModel.DataAnnotations;
using TakeoutSaaS.Application.App.Billings.Commands;
using TakeoutSaaS.Application.App.Billings.Dto;
using TakeoutSaaS.Application.App.Billings.Queries;
using TakeoutSaaS.Module.Authorization.Attributes;
using TakeoutSaaS.Shared.Abstractions.Results;
using TakeoutSaaS.Shared.Web.Api;
namespace TakeoutSaaS.AdminApi.Controllers;
///
/// 账单管理。
///
[ApiVersion("1.0")]
[Authorize]
[Route("api/admin/v{version:apiVersion}/billings")]
public sealed class BillingsController(IMediator mediator) : BaseApiController
{
///
/// 分页查询账单列表。
///
/// 账单分页结果。
[HttpGet]
[PermissionAuthorize("bill:read")]
[ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
public async Task>> GetList([FromQuery] GetBillingListQuery query, CancellationToken cancellationToken)
{
// 1. 查询账单列表
var result = await mediator.Send(query, cancellationToken);
// 2. 返回分页结果
return ApiResponse>.Ok(result);
}
///
/// 获取账单详情。
///
/// 账单 ID。
/// 取消标记。
/// 账单详情。
[HttpGet("{id:long}")]
[PermissionAuthorize("bill:read")]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse