ql_apimanager_backend/Apimanager_backend/Controllers/UserController.cs
2024-11-06 23:12:12 +08:00

92 lines
3.1 KiB
C#

using Apimanager_backend.Dtos;
using Apimanager_backend.Exceptions;
using Apimanager_backend.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Apimanager_backend.Filters;
using Microsoft.AspNetCore.Authorization;
using Apimanager_backend.Models;
using System.Security.Claims;
namespace Apimanager_backend.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class UserController : ControllerBase
{
private readonly IUserService userService;
public UserController(IUserService userService)
{
this.userService = userService;
}
/// <summary>
/// 获取用户个人信息
/// </summary>
/// <returns></returns>
[HttpGet]
[Authorize(Roles = "User")]
public async Task<ActionResult<ResponseBase<UserInfoDto>>> UserInfo()
{
var userId = User.Claims.First(x => x.Type == "userId").Value;
var userInfo = await userService.GetUserAsync(int.Parse(userId));
var res = new ResponseBase<UserInfoDto>(
code:1000,
message:"Success",
data:userInfo
);
return Ok(res);
}
/// <summary>
/// 重置用户密码
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
public async Task<ActionResult<ResponseBase<object?>>> Resetpassword([FromBody]ResetPasswordDto dto)
{
try
{
await userService.ResetPasswordAsync(dto.Email, dto.Code, dto.NewPassword);
var res = new ResponseBase<object?>(
code:1000,
message:"Success",
data: null
);
return Ok(res);
}catch(BaseException e)
{
var res = new ResponseBase<object?>(
code:e.code,
message:e.message,
data:null
);
return StatusCode(400,res);
}
}
[HttpPost]
public async Task<ActionResult<ResponseBase<object?>>> SendResetEmail([FromQuery]string email)
{
await userService.SendResetPasswordEmailAsync(email);
var res = new ResponseBase<object?>(
code: 1000,
message: "Success",
data: null
);
return Ok(res);
}
[HttpPost]
[Authorize(Roles = "User")]
public async Task<ActionResult<ResponseBase<UserInfoDto?>>> Update([FromBody]UpdateUserDto dto)
{
var userId = User.Claims.First(x => x.ValueType == "userId").Value;
var userInfo = await userService.UpdateUserAsync(int.Parse(userId),dto);
var res = new ResponseBase<object?>(
code:1000,
message:"Success",
data:userInfo
);
return Ok(res);
}
}
}