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/ai")] [Authorize] public class AIController : ControllerBase { private readonly IAIAssistantService _aiAssistantService; private readonly ILogger _logger; public AIController(IAIAssistantService aiAssistantService, ILogger logger) { _aiAssistantService = aiAssistantService; _logger = logger; } /// /// AI写作辅助 /// /// 写作辅助请求 /// AI生成的内容和建议 [HttpPost("writing-assistant")] public async Task>> WritingAssistant([FromBody] WritingAssistantRequestDto request) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } try { var result = await _aiAssistantService.GetWritingAssistanceAsync(request); if (!result.Success) { return BadRequest(result); } return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "获取写作辅助时发生错误"); return StatusCode(500, ApiResponse.ErrorResult("服务器内部错误")); } } /// /// 情感分析 /// /// 情感分析请求 /// 情感分析结果 [HttpPost("sentiment-analysis")] public async Task>> SentimentAnalysis([FromBody] SentimentAnalysisRequestDto request) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } try { var result = await _aiAssistantService.AnalyzeSentimentAsync(request); if (!result.Success) { return BadRequest(result); } return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "进行情感分析时发生错误"); return StatusCode(500, ApiResponse.ErrorResult("服务器内部错误")); } } /// /// 未来预测 /// /// 未来预测请求 /// 未来预测结果 [HttpPost("future-prediction")] public async Task>> FuturePrediction([FromBody] FuturePredictionRequestDto request) { if (!ModelState.IsValid) { return BadRequest(ApiResponse.ErrorResult("输入数据无效")); } try { var result = await _aiAssistantService.PredictFutureAsync(request); if (!result.Success) { return BadRequest(result); } return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "进行未来预测时发生错误"); return StatusCode(500, ApiResponse.ErrorResult("服务器内部错误")); } } /// /// 从JWT令牌中获取当前用户ID /// /// 用户ID private int? GetCurrentUserId() { var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier); if (userIdClaim != null && int.TryParse(userIdClaim.Value, out int userId)) { return userId; } return null; } } }