using System; using System.Security.Claims; using System.Threading.Tasks; using D3ROVoice.Api.Dtos; using D3ROVoice.Api.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace D3ROVoice.Api.Controllers; [Authorize] [ApiController] [Route("api/[controller]")] public class LlmController : ControllerBase { private readonly ILlmProxyService _llmService; public LlmController(ILlmProxyService llmService) { _llmService = llmService; } [HttpPost("generate")] public async Task Generate([FromBody] LlmGenerateRequest request) { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); var userEmail = User.FindFirstValue(ClaimTypes.Email) ?? "unknown@user"; int userId = int.TryParse(userIdStr, out var id) ? id : 0; if (string.IsNullOrWhiteSpace(request.Prompt)) { return BadRequest(new { message = "Prompt는 필수 항목입니다." }); } var result = await _llmService.GenerateAsync(userId, userEmail, request); return Ok(result); } [HttpPost("chat")] public async Task Chat([FromBody] LlmChatRequest request) { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); var userEmail = User.FindFirstValue(ClaimTypes.Email) ?? "unknown@user"; int userId = int.TryParse(userIdStr, out var id) ? id : 0; var result = await _llmService.ChatAsync(userId, userEmail, request); return Ok(result); } }