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);
}
}