using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using FutureMailAPI.Services; using FutureMailAPI.DTOs; namespace FutureMailAPI.Controllers { [ApiController] [Route("api/v1/[controller]")] [Authorize] public class TimeCapsulesController : ControllerBase { private readonly ITimeCapsuleService _timeCapsuleService; private readonly ILogger _logger; public TimeCapsulesController(ITimeCapsuleService timeCapsuleService, ILogger logger) { _timeCapsuleService = timeCapsuleService; _logger = logger; } [HttpPost] public async Task>> CreateTimeCapsule([FromBody] TimeCapsuleCreateDto createDto) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.CreateTimeCapsuleAsync(currentUserId.Value, createDto); if (!result.Success) { return BadRequest(result); } return CreatedAtAction( nameof(GetTimeCapsule), new { capsuleId = result.Data!.Id }, result); } [HttpGet("{capsuleId}")] public async Task>> GetTimeCapsule(int capsuleId) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.GetTimeCapsuleByIdAsync(currentUserId.Value, capsuleId); if (!result.Success) { return NotFound(result); } return Ok(result); } [HttpGet] public async Task>>> GetTimeCapsules([FromQuery] TimeCapsuleListQueryDto queryDto) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse>.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.GetTimeCapsulesAsync(currentUserId.Value, queryDto); return Ok(result); } [HttpPut("{capsuleId}")] public async Task>> UpdateTimeCapsule(int capsuleId, [FromBody] TimeCapsuleUpdateDto updateDto) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.UpdateTimeCapsuleAsync(currentUserId.Value, capsuleId, updateDto); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpDelete("{capsuleId}")] public async Task>> DeleteTimeCapsule(int capsuleId) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.DeleteTimeCapsuleAsync(currentUserId.Value, capsuleId); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpGet("public")] [AllowAnonymous] public async Task>>> GetPublicTimeCapsules([FromQuery] TimeCapsuleListQueryDto queryDto) { var result = await _timeCapsuleService.GetPublicTimeCapsulesAsync(queryDto); return Ok(result); } [HttpPost("public/{capsuleId}/claim")] public async Task>> ClaimPublicCapsule(int capsuleId) { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.ClaimPublicCapsuleAsync(currentUserId.Value, capsuleId); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpGet("view")] public async Task>> GetTimeCapsuleView() { // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.GetTimeCapsuleViewAsync(currentUserId.Value); if (!result.Success) { return BadRequest(result); } return Ok(result); } [HttpPut("{capsuleId}/style")] public async Task>> UpdateTimeCapsuleStyle(int capsuleId, [FromBody] TimeCapsuleStyleUpdateDto updateDto) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } // 从JWT令牌中获取当前用户ID var currentUserId = GetCurrentUserId(); if (currentUserId == null) { return Unauthorized(ApiResponse.ErrorResult("未授权访问")); } var result = await _timeCapsuleService.UpdateTimeCapsuleStyleAsync(currentUserId.Value, capsuleId, updateDto); if (!result.Success) { return BadRequest(result); } return Ok(result); } private int? GetCurrentUserId() { var userIdClaim = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier); if (userIdClaim == null || !int.TryParse(userIdClaim.Value, out var userId)) { return null; } return userId; } } }