2026-05-29 23:29:31 +03:30
|
|
|
using FlatRender.ContentSvc.Application.Services;
|
|
|
|
|
using FlatRender.ContentSvc.Models.Requests;
|
|
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
|
|
|
|
|
namespace FlatRender.ContentSvc.Controllers;
|
|
|
|
|
|
|
|
|
|
[ApiController]
|
|
|
|
|
[Route("v1/templates")]
|
|
|
|
|
public class TemplatesController(TemplateService svc) : ControllerBase
|
|
|
|
|
{
|
|
|
|
|
// ── Containers ────────────────────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<IActionResult> ListContainers([FromQuery] ContainerListRequest req) =>
|
|
|
|
|
Ok(await svc.GetContainersAsync(req));
|
|
|
|
|
|
|
|
|
|
[HttpGet("{slug}")]
|
|
|
|
|
public async Task<IActionResult> GetContainer(string slug)
|
|
|
|
|
{
|
|
|
|
|
await svc.IncrementContainerViewAsync(
|
|
|
|
|
(await svc.GetContainerBySlugAsync(slug)).Id);
|
|
|
|
|
return Ok(await svc.GetContainerBySlugAsync(slug));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public async Task<IActionResult> CreateContainer([FromBody] CreateContainerRequest req) =>
|
|
|
|
|
Ok(await svc.CreateContainerAsync(req));
|
|
|
|
|
|
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
|
|
|
[HttpPut("{id:guid}")]
|
|
|
|
|
public async Task<IActionResult> UpdateContainer(Guid id, [FromBody] UpdateContainerRequest req) =>
|
|
|
|
|
Ok(await svc.UpdateContainerAsync(id, req));
|
|
|
|
|
|
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
|
|
|
[HttpDelete("{id:guid}")]
|
|
|
|
|
public async Task<IActionResult> DeleteContainer(Guid id)
|
|
|
|
|
{
|
|
|
|
|
await svc.DeleteContainerAsync(id);
|
|
|
|
|
return NoContent();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[ApiController]
|
|
|
|
|
[Route("v1/projects")]
|
|
|
|
|
public class ProjectsController(TemplateService svc) : ControllerBase
|
|
|
|
|
{
|
|
|
|
|
[HttpGet("{id:guid}")]
|
|
|
|
|
public async Task<IActionResult> GetProject(Guid id) =>
|
|
|
|
|
Ok(await svc.GetProjectDetailAsync(id));
|
|
|
|
|
|
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public async Task<IActionResult> CreateProject([FromBody] CreateProjectRequest req) =>
|
|
|
|
|
Ok(await svc.CreateProjectAsync(req));
|
|
|
|
|
|
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
|
|
|
[HttpPut("{id:guid}")]
|
|
|
|
|
public async Task<IActionResult> UpdateProject(Guid id, [FromBody] UpdateProjectRequest req) =>
|
|
|
|
|
Ok(await svc.UpdateProjectAsync(id, req));
|
|
|
|
|
|
2026-06-02 14:26:44 +03:30
|
|
|
// Partial update (aspect / resolution / dimensions / duration) without wiping other fields.
|
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
|
|
|
[HttpPatch("{id:guid}")]
|
|
|
|
|
public async Task<IActionResult> PatchProject(Guid id, [FromBody] PatchProjectRequest req) =>
|
|
|
|
|
Ok(await svc.PatchProjectAsync(id, req));
|
|
|
|
|
|
2026-05-29 23:29:31 +03:30
|
|
|
[Authorize(Roles = "Admin")]
|
|
|
|
|
[HttpDelete("{id:guid}")]
|
|
|
|
|
public async Task<IActionResult> DeleteProject(Guid id)
|
|
|
|
|
{
|
|
|
|
|
await svc.DeleteProjectAsync(id);
|
|
|
|
|
return NoContent();
|
|
|
|
|
}
|
|
|
|
|
}
|