using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using FutureMailAPI.Services; using FutureMailAPI.DTOs; using System.Security.Claims; namespace FutureMailAPI.Controllers { [ApiController] [Route("api/v1/[controller]")] [Authorize] public class MailsController : ControllerBase { private readonly IMailService _mailService; public MailsController(IMailService mailService) { _mailService = mailService; } [HttpPost] public async Task>> CreateMail([FromBody] SentMailCreateDto createDto) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _mailService.CreateMailAsync(currentUserId.Value, createDto); if (!result.Success) { return BadRequest(result); } return CreatedAtAction( nameof(GetMail), new { mailId = result.Data!.Id }, result); } [HttpGet("{mailId}")] public async Task>> GetMail(int mailId) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _mailService.GetSentMailByIdAsync(currentUserId.Value, mailId); if (!result.Success) { return NotFound(result); } return Ok(result); } [HttpGet] public async Task>>> GetMails([FromQuery] MailListQueryDto queryDto) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse>.ErrorResult("未授权访问")); } var result = await _mailService.GetSentMailsAsync(currentUserId.Value, queryDto); return Ok(result); } [HttpPut("{mailId}")] public async Task>> UpdateMail(int mailId, [FromBody] SentMailUpdateDto updateDto) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _mailService.UpdateMailAsync(currentUserId.Value, mailId, updateDto); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpDelete("{mailId}")] public async Task>> DeleteMail(int mailId) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _mailService.DeleteMailAsync(currentUserId.Value, mailId); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpGet("received")] public async Task>>> GetReceivedMails([FromQuery] MailListQueryDto queryDto) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse>.ErrorResult("未授权访问")); } var result = await _mailService.GetReceivedMailsAsync(currentUserId.Value, queryDto); return Ok(result); } [HttpGet("received/{id}")] public async Task>> GetReceivedMail(int id) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _mailService.GetReceivedMailByIdAsync(currentUserId.Value, id); if (!result.Success) { return NotFound(result); } return Ok(result); } [HttpPost("received/{id}/mark-read")] public async Task>> MarkReceivedMailAsRead(int id) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _mailService.MarkReceivedMailAsReadAsync(currentUserId.Value, id); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpPost("{mailId}/revoke")] public async Task>> RevokeMail(int mailId) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _mailService.RevokeMailAsync(currentUserId.Value, mailId); if (!result.Success) { return BadRequest(result); } return Ok(result); } private int? GetCurrentUserId() { var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier); if (userIdClaim == null || !int.TryParse(userIdClaim.Value, out var userId)) { return null; } return userId; } } }