ql_apimanager_backend/Apimanager_backend/Controllers/UserController.cs

115 lines
4.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;
private readonly IUserPackageService _userPackageService;
public UserController(IUserService userService,IUserPackageService userPackageService)
{
this.userService = userService;
this._userPackageService = userPackageService;
}
/// <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.Type == "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);
}
//设置用户apikey
[HttpPost]
[Authorize(Roles = "User")]
public async Task<IActionResult> SetApiKey()
{
var userId = User.Claims.First(x => x.Type == "userId").Value;
var key = await userService.SetUserTokenAsync(int.Parse(userId));
var res = new ResponseBase<string>(1000, "操作成功", key);
return Ok(res);
}
//获取已订购套餐
[HttpGet]
[Authorize(Roles = "User")]
public async Task<IActionResult> GetUserPackages()
{
var userId = User.Claims.First(x => x.Type == "userId").Value;
var list = await _userPackageService.GetUserPackagesByUserIdAsync(int.Parse(userId));
var res = new ResponseBase<List<UserPackage>>(1000,"查询成功",list);
return Ok(res);
}
}
}