using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using TakeoutSaaS.Application.Identity.Abstractions;
using TakeoutSaaS.Application.Identity.Contracts;
using TakeoutSaaS.Shared.Abstractions.Results;
using TakeoutSaaS.Shared.Web.Api;
namespace TakeoutSaaS.MiniApi.Controllers;
///
/// 小程序登录认证
///
/// 提供小程序端的微信登录与 Token 刷新能力。
/// 小程序认证服务
[ApiVersion("1.0")]
[Authorize]
[Route("api/mini/v{version:apiVersion}/auth")]
public sealed class AuthController(IMiniAuthService authService) : BaseApiController
{
///
/// 微信登录
///
/// 微信登录请求。
/// 取消标记。
/// 包含访问令牌与刷新令牌的响应。
[HttpPost("wechat/login")]
[AllowAnonymous]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
public async Task> LoginWithWeChat([FromBody] WeChatLoginRequest request, CancellationToken cancellationToken)
{
// 1. 调用认证服务完成微信登录
var response = await authService.LoginWithWeChatAsync(request, cancellationToken);
// 2. 返回访问与刷新令牌
return ApiResponse.Ok(response);
}
///
/// 刷新 Token
///
/// 刷新令牌请求。
/// 取消标记。
/// 新的访问令牌与刷新令牌。
[HttpPost("refresh")]
[AllowAnonymous]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
public async Task> RefreshToken([FromBody] RefreshTokenRequest request, CancellationToken cancellationToken)
{
// 1. 调用认证服务刷新 Token
var response = await authService.RefreshTokenAsync(request, cancellationToken);
// 2. 返回新的令牌
return ApiResponse.Ok(response);
}
}