using Creative.Models; using Creative.Security; using Creative.Services; using Microsoft.AspNetCore.Mvc; namespace Creative.Controllers; /// /// Internal endpoint called by Gateway. /// Single dispatch point: POST /internal/execute /// [ApiController] [Route("internal")] public class InternalController : ControllerBase { private readonly CreativeService _service; private readonly ILogger _logger; public InternalController(CreativeService service, ILogger logger) { _service = service; _logger = logger; } /// /// Execute a creative operation. /// Called by Gateway with X-Internal-Key header. /// [HttpPost("execute")] [ServiceFilter(typeof(InternalAuthFilter))] public async Task Execute( [FromBody] CreativeRequest request, CancellationToken ct) { var requestId = Request.Headers["X-Request-Id"].FirstOrDefault() ?? request.RequestId ?? Guid.NewGuid().ToString("N"); request.RequestId = requestId; _logger.LogInformation("[Internal] {Operation} | RequestId={RequestId}", request.Operation, requestId); var result = await _service.ExecuteAsync(request, ct); return result.Ok ? Ok(result) : BadRequest(result); } }