73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
using MediatR;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using TakeoutSaaS.Application.App.Merchants.Commands;
|
|
using TakeoutSaaS.Application.App.Merchants.Dto;
|
|
using TakeoutSaaS.Application.App.Merchants.Queries;
|
|
using TakeoutSaaS.Domain.Merchants.Enums;
|
|
using TakeoutSaaS.Module.Authorization.Attributes;
|
|
using TakeoutSaaS.Shared.Abstractions.Constants;
|
|
using TakeoutSaaS.Shared.Abstractions.Results;
|
|
using TakeoutSaaS.Shared.Web.Api;
|
|
|
|
namespace TakeoutSaaS.AdminApi.Controllers;
|
|
|
|
/// <summary>
|
|
/// 商户管理。
|
|
/// </summary>
|
|
[ApiVersion("1.0")]
|
|
[Authorize]
|
|
[Route("api/admin/v{version:apiVersion}/merchants")]
|
|
public sealed class MerchantsController : BaseApiController
|
|
{
|
|
private readonly IMediator _mediator;
|
|
|
|
/// <summary>
|
|
/// 初始化控制器。
|
|
/// </summary>
|
|
public MerchantsController(IMediator mediator)
|
|
{
|
|
_mediator = mediator;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建商户。
|
|
/// </summary>
|
|
[HttpPost]
|
|
[PermissionAuthorize("merchant:create")]
|
|
[ProducesResponseType(typeof(ApiResponse<MerchantDto>), StatusCodes.Status200OK)]
|
|
public async Task<ApiResponse<MerchantDto>> Create([FromBody] CreateMerchantCommand command, CancellationToken cancellationToken)
|
|
{
|
|
var result = await _mediator.Send(command, cancellationToken);
|
|
return ApiResponse<MerchantDto>.Ok(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询商户列表。
|
|
/// </summary>
|
|
[HttpGet]
|
|
[PermissionAuthorize("merchant:read")]
|
|
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<MerchantDto>>), StatusCodes.Status200OK)]
|
|
public async Task<ApiResponse<IReadOnlyList<MerchantDto>>> List([FromQuery] MerchantStatus? status, CancellationToken cancellationToken)
|
|
{
|
|
var result = await _mediator.Send(new SearchMerchantsQuery { Status = status }, cancellationToken);
|
|
return ApiResponse<IReadOnlyList<MerchantDto>>.Ok(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取商户详情。
|
|
/// </summary>
|
|
[HttpGet("{merchantId:long}")]
|
|
[PermissionAuthorize("merchant:read")]
|
|
[ProducesResponseType(typeof(ApiResponse<MerchantDto>), StatusCodes.Status200OK)]
|
|
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
|
|
public async Task<ApiResponse<MerchantDto>> Detail(long merchantId, CancellationToken cancellationToken)
|
|
{
|
|
var result = await _mediator.Send(new GetMerchantByIdQuery { MerchantId = merchantId }, cancellationToken);
|
|
return result == null
|
|
? ApiResponse<MerchantDto>.Error(ErrorCodes.NotFound, "商户不存在")
|
|
: ApiResponse<MerchantDto>.Ok(result);
|
|
}
|
|
}
|