49 lines
1.4 KiB
C#
49 lines
1.4 KiB
C#
using Creative.Models;
|
|
using Creative.Security;
|
|
using Creative.Services;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace Creative.Controllers;
|
|
|
|
/// <summary>
|
|
/// Internal endpoint called by Gateway.
|
|
/// Single dispatch point: POST /internal/execute
|
|
/// </summary>
|
|
[ApiController]
|
|
[Route("internal")]
|
|
public class InternalController : ControllerBase
|
|
{
|
|
private readonly CreativeService _service;
|
|
private readonly ILogger<InternalController> _logger;
|
|
|
|
public InternalController(CreativeService service, ILogger<InternalController> logger)
|
|
{
|
|
_service = service;
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Execute a creative operation.
|
|
/// Called by Gateway with X-Internal-Key header.
|
|
/// </summary>
|
|
[HttpPost("execute")]
|
|
[ServiceFilter(typeof(InternalAuthFilter))]
|
|
public async Task<IActionResult> 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);
|
|
}
|
|
}
|