65 lines
2.5 KiB
C#
65 lines
2.5 KiB
C#
using LiteCqrs;
|
|
using TeleWave.Api.Common;
|
|
using TeleWave.Application.Library.Interstitials;
|
|
using TeleWave.Application.Library.Interstitials.ImportInterstitials;
|
|
using TeleWave.Application.Library.Interstitials.ListInterstitialBlocks;
|
|
using TeleWave.Application.Library.Interstitials.ListInterstitials;
|
|
using TeleWave.Infrastructure.Identity;
|
|
|
|
namespace TeleWave.Api.Endpoints;
|
|
|
|
/// <summary>
|
|
/// Ролики-врезки: тот же <c>Show(Kind = Interstitial)</c>, но со своим экраном (см. 6.7). Правка
|
|
/// названия и удаление идут через обычные эндпоинты шоу — здесь только то, чего у библиотеки нет:
|
|
/// список с длительностями, блоки и импорт загруженных файлов.
|
|
/// </summary>
|
|
public static class InterstitialEndpoints
|
|
{
|
|
public static IEndpointRouteBuilder MapInterstitialEndpoints(this IEndpointRouteBuilder app)
|
|
{
|
|
var admin = app.MapGroup("/api/admin/interstitials")
|
|
.WithTags("Admin.Interstitials")
|
|
.RequireAuthorization(policy => policy.RequireRole(RoleNames.Admin));
|
|
|
|
admin.MapGet("", List).Produces<IReadOnlyList<InterstitialDto>>();
|
|
admin.MapGet("/blocks", ListBlocks).Produces<IReadOnlyList<InterstitialBlockDto>>();
|
|
admin.MapPost("/import", Import).Produces<ImportInterstitialsResponse>();
|
|
|
|
return app;
|
|
}
|
|
|
|
private static async Task<IResult> List(ISender sender, CancellationToken cancellationToken)
|
|
{
|
|
var result = await sender.Send(new ListInterstitialsQuery(), cancellationToken);
|
|
return Results.Ok(result);
|
|
}
|
|
|
|
private static async Task<IResult> ListBlocks(
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(new ListInterstitialBlocksQuery(), cancellationToken);
|
|
return Results.Ok(result);
|
|
}
|
|
|
|
private static async Task<IResult> Import(
|
|
ImportInterstitialsBody body,
|
|
ISender sender,
|
|
CancellationToken cancellationToken
|
|
)
|
|
{
|
|
var result = await sender.Send(
|
|
new ImportInterstitialsCommand(body.MediaAssetIds),
|
|
cancellationToken
|
|
);
|
|
return result.IsSuccess
|
|
? Results.Ok(new ImportInterstitialsResponse(result.Value))
|
|
: result.ToHttpResult();
|
|
}
|
|
}
|
|
|
|
public sealed record ImportInterstitialsBody(IReadOnlyList<Guid> MediaAssetIds);
|
|
|
|
public sealed record ImportInterstitialsResponse(int Imported);
|