using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using FutureMailAPI.Services; using FutureMailAPI.DTOs; namespace FutureMailAPI.Controllers { [ApiController] [Route("api/v1/users")] public class UsersController : BaseController { private readonly IUserService _userService; private readonly ILogger _logger; public UsersController(IUserService userService, ILogger logger) { _userService = userService; _logger = logger; } [HttpGet("{id}")] public async Task GetUser(int id) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId <= 0) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } // 只有用户本人可以查看自己的信息 if (currentUserId != id) { return Forbid(); } var result = await _userService.GetUserByIdAsync(id); if (!result.Success) { return NotFound(result); } return Ok(result); } [HttpPut("{id}")] public async Task UpdateUser(int id, [FromBody] UserUpdateDto updateDto) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId <= 0) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } // 只有用户本人可以更新自己的信息 if (currentUserId != id) { return Forbid(); } var result = await _userService.UpdateUserAsync(id, updateDto); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpPost("{id}/change-password")] public async Task ChangePassword(int id, [FromBody] ChangePasswordDto changePasswordDto) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId <= 0) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } // 只有用户本人可以修改自己的密码 if (currentUserId != id) { return Forbid(); } var result = await _userService.ChangePasswordAsync(id, changePasswordDto); if (!result.Success) { return BadRequest(result); } return Ok(result); } } }