Merge branch 'feature-nxdev' of https://gitea.nxsir.cn/code/IM into feature-nxdev

This commit is contained in:
2025-11-27 16:56:02 +08:00
25 changed files with 479 additions and 83 deletions
+26 -1
View File
@@ -1,6 +1,8 @@
using IM_API.Dtos;
using IM_API.Interface.Services;
using IM_API.Tools;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
namespace IM_API.Controllers
@@ -11,16 +13,18 @@ namespace IM_API.Controllers
{
private readonly ILogger<AuthController> _logger;
private readonly IAuthService _authService;
private readonly IUserService _userService;
private readonly IJWTService _jwtService;
private readonly IRefreshTokenService _refreshTokenService;
private readonly IConfiguration _configuration;
public AuthController(ILogger<AuthController> logger, IAuthService authService, IJWTService jwtService, IRefreshTokenService refreshTokenService, IConfiguration configuration)
public AuthController(ILogger<AuthController> logger, IAuthService authService, IJWTService jwtService, IRefreshTokenService refreshTokenService, IConfiguration configuration,IUserService userService)
{
_logger = logger;
_authService = authService;
_jwtService = jwtService;
_refreshTokenService = refreshTokenService;
_configuration = configuration;
_userService = userService;
}
[HttpPost]
public async Task<IActionResult> Login(LoginRequestDto dto)
@@ -33,5 +37,26 @@ namespace IM_API.Controllers
var res = new BaseResponse<LoginDto>(new LoginDto(user.Id,token,refreshToken,expiresAt));
return Ok(res);
}
[HttpPost]
public async Task<IActionResult> Register(RegisterRequestDto dto)
{
var userInfo = await _authService.RegisterAsync(dto);
var res = new BaseResponse<UserInfoDto>(userInfo);
return Ok(res);
}
[HttpPost]
public async Task<IActionResult> Refresh(RefreshDto dto)
{
(bool ok,int userId) = await _refreshTokenService.ValidateRefreshTokenAsync(dto.refreshToken);
if (!ok)
{
var err = new BaseResponse<LoginDto>(CodeDefine.AUTH_FAILED);
return Unauthorized(err);
}
var userinfo = await _userService.GetUserInfoAsync(userId);
(string token,DateTime expiresAt) = _jwtService.CreateAccessTokenForUser(userinfo.Id,userinfo.Username,"user");
var res = new BaseResponse<LoginDto>(new LoginDto(userinfo.Id,token,dto.refreshToken,expiresAt));
return Ok(res);
}
}
}
@@ -0,0 +1,103 @@
using IM_API.Dtos;
using IM_API.Interface.Services;
using IM_API.Tools;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
namespace IM_API.Controllers
{
[Authorize]
[Route("api/[controller]/[action]")]
[ApiController]
public class UserController : ControllerBase
{
private readonly IUserService _userService;
private readonly ILogger<UserController> _logger;
public UserController(IUserService userService, ILogger<UserController> logger)
{
_userService = userService;
_logger = logger;
}
/// <summary>
/// 获取当前用户信息
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<IActionResult> Me()
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
int userId = int.Parse(userIdStr);
var userinfo = await _userService.GetUserInfoAsync(userId);
var res = new BaseResponse<UserInfoDto>(userinfo);
return Ok(res);
}
/// <summary>
/// 修改用户资料
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> Profile(UpdateUserDto dto)
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
int userId = int.Parse(userIdStr);
var userinfo = await _userService.UpdateUserAsync(userId,dto);
var res = new BaseResponse<UserInfoDto>(userinfo);
return Ok(res);
}
/// <summary>
/// ID查询用户
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
[HttpGet]
public async Task<IActionResult> Find(int userId)
{
var userinfo = await _userService.GetUserInfoAsync(userId);
var res = new BaseResponse<UserInfoDto>(userinfo);
return Ok(res);
}
/// <summary>
/// 用户名查询用户
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
[HttpGet]
public async Task<IActionResult> Find(string username)
{
var userinfo = await _userService.GetUserInfoByUsernameAsync(username);
var res = new BaseResponse<UserInfoDto>(userinfo);
return Ok(res);
}
/// <summary>
/// 重置用户密码
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> ResetPassword(PasswordResetDto dto)
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
int userId = int.Parse(userIdStr);
await _userService.ResetPasswordAsync(userId,dto.oldPassword,dto.Password);
return Ok(new BaseResponse<object?>());
}
/// <summary>
/// 设置在线状态
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> SetOnlineStatus(OnlineStatusSetDto dto)
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
int userId = int.Parse(userIdStr);
await _userService.UpdateOlineStatusAsync(userId, dto.OnlineStatus);
return Ok(new BaseResponse<object?>());
}
}
}