using IM_API.Dtos; using IM_API.Dtos.User; using IM_API.Interface.Services; using IM_API.Tools; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.ComponentModel.DataAnnotations; 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 _logger; public UserController(IUserService userService, ILogger logger) { _userService = userService; _logger = logger; } /// /// 获取当前用户信息 /// /// [HttpGet] public async Task Me() { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); int userId = int.Parse(userIdStr); var userinfo = await _userService.GetUserInfoAsync(userId); var res = new BaseResponse(userinfo); return Ok(res); } /// /// 修改用户资料 /// /// /// [HttpPost] public async Task 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(userinfo); return Ok(res); } /// /// ID查询用户 /// /// /// [HttpGet] public async Task Find(int userId) { var userinfo = await _userService.GetUserInfoAsync(userId); var res = new BaseResponse(userinfo); return Ok(res); } /// /// 用户名查询用户 /// /// /// [HttpGet] public async Task FindByUsername(string username) { var userinfo = await _userService.GetUserInfoByUsernameAsync(username); var res = new BaseResponse(userinfo); return Ok(res); } /// /// 重置用户密码 /// /// /// [HttpPost] public async Task 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()); } /// /// 设置在线状态 /// /// /// [HttpPost] public async Task SetOnlineStatus(OnlineStatusSetDto dto) { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); int userId = int.Parse(userIdStr); await _userService.UpdateOlineStatusAsync(userId, dto.OnlineStatus); return Ok(new BaseResponse()); } [HttpPost] [ProducesResponseType(typeof(BaseResponse>), StatusCodes.Status200OK)] public async Task GetUserList([FromBody][Required]List ids) { var users = await _userService.GetUserInfoListAsync(ids); var res = new BaseResponse>(users); return Ok(res); } } }