276 lines
12 KiB
C#
276 lines
12 KiB
C#
using AutoMapper;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Components.Web;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Modules.Library.WebApi.Models;
|
|
using Modules.Library.WebApi.Models.Anime;
|
|
using Modules.Library.WebApi.Models.Anime.CommonProperties;
|
|
using Modules.Library.WebApi.Models.Views.Anime;
|
|
|
|
namespace Modules.Library.WebApi.Controllers;
|
|
|
|
[ApiController]
|
|
[ApiExplorerSettings(GroupName = "AnimeTitleV1")]
|
|
[Route("MediaContent/Anime/Title")]
|
|
//[Route("[controller]")]
|
|
public class TitleController : ControllerBase
|
|
{
|
|
private readonly IMapper _mapper;
|
|
private readonly IMediator _mediator;
|
|
private readonly ILogger _logger;
|
|
|
|
public TitleController(IMapper mapper, IMediator mediator, ILogger<TitleController> logger)
|
|
{
|
|
_mapper = mapper;
|
|
_mediator = mediator;
|
|
_logger = logger;
|
|
}
|
|
|
|
[HttpGet("List")]
|
|
public async Task<List<Title>> List() =>
|
|
_mapper.Map<List<Title>>(await _mediator.Send(new Application.Queries.Anime.AnimeTitle.AnimeTitleListQuery { UserId = new Guid("8393230f-78e3-473b-a5dc-3221917e0aeb") }));
|
|
|
|
[HttpGet]
|
|
public async Task<Title> ById(Guid TitleId) =>
|
|
_mapper.Map<Title>(await _mediator.Send(new Application.Queries.Anime.AnimeTitle.AnimeTitleQuery { Id = TitleId }));
|
|
|
|
[HttpPost("Rate")]
|
|
public async Task Rate(RateEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.RateTitleCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
RatePercentage = model.RatePercentage ?? throw new ArgumentNullException(nameof(model.RatePercentage)),
|
|
});
|
|
|
|
[HttpPost("Unrate")]
|
|
public async Task Unrate(RateEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.UnrateTitleCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
});
|
|
|
|
[HttpPost("Create")]
|
|
public async Task<Guid> CreateTitle(TitleCreate model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.CreateAnimeTitleCommand
|
|
{
|
|
NameOriginalLanguageId = model.OriginalName.LanguageId,
|
|
NameOriginal = model.OriginalName.Value,
|
|
Preview = model.Preview == null ? null : new Application.Models.MediaInfo
|
|
{
|
|
Url = model.Preview.Url,
|
|
Type = (Application.Models.MediaInfoType)model.Preview.Type,
|
|
}
|
|
});
|
|
|
|
[HttpPost("AddSeason")]
|
|
public async Task<Guid> AddSeason([FromQuery] Guid titleId) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.AddSeasonCommand
|
|
{
|
|
TitleId = titleId
|
|
});
|
|
|
|
[HttpPost("DeleteSeason")]
|
|
public async Task DeleteSeason([FromQuery] Guid titleId, [FromQuery] Guid itemId) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.DeleteSeasonCommand
|
|
{
|
|
TitleId = titleId
|
|
});
|
|
|
|
[HttpPost("AddEpisode")]
|
|
public async Task<Guid> AddEpisode([FromQuery] Guid titleId) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.AddEpisodeCommand
|
|
{
|
|
TitleId = titleId
|
|
});
|
|
|
|
[HttpPost("DeleteEpisode")]
|
|
public async Task DeleteEpisode([FromQuery] Guid titleId, [FromQuery] Guid itemId) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.DeleteEpisodeCommand
|
|
{
|
|
TitleId = titleId
|
|
});
|
|
|
|
|
|
[HttpPost("AddName")]
|
|
public async Task AddName(NameEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Name.AddNameCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
LanguageId = model.LanguageId,
|
|
NameType = (Application.Commands.CommonModels.NameType)model.Type,
|
|
Value = model.Value
|
|
});
|
|
|
|
[HttpPost("EditName")]
|
|
public async Task EditName(NameEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Name.EditNameCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
LanguageId = model.LanguageId,
|
|
NameType = (Application.Commands.CommonModels.NameType)model.Type,
|
|
Value = model.Value,
|
|
NewLanguageId = model.NewLanguageId,
|
|
NewValue = model.NewValue,
|
|
});
|
|
|
|
[HttpPost("DeleteName")]
|
|
public async Task DeleteName(NameEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Name.DeleteNameCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
LanguageId = model.LanguageId,
|
|
NameType = (Application.Commands.CommonModels.NameType)model.Type,
|
|
Value = model.Value,
|
|
});
|
|
|
|
|
|
[HttpPost("SetPreview")]
|
|
public async Task SetPreview(MediaInfoEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Preview.SetPreviewCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
Type = (Application.Commands.CommonModels.MediaInfoType)model.Type,
|
|
Url = model.Url,
|
|
});
|
|
|
|
[HttpPost("ClearPreview")]
|
|
public async Task ClearPreview(MediaInfoEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Preview.DeletePreviewCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
});
|
|
|
|
|
|
[HttpPost("AddDescription")]
|
|
public async Task AddDescription(DescriptionEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Description.AddDescriptionCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
IsOriginal = model.IsOriginal,
|
|
LanguageId = model.LanguageId,
|
|
Value = model.Value,
|
|
});
|
|
|
|
[HttpPost("EditDescription")]
|
|
public async Task EditDescription(DescriptionEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Description.EditDescriptionCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
LanguageId = model.LanguageId,
|
|
IsOriginal = model.IsOriginal,
|
|
Value = model.Value,
|
|
NewLanguageId = model.NewLanguageId,
|
|
NewValue = model.NewValue,
|
|
});
|
|
|
|
[HttpPost("DeleteDescription")]
|
|
public async Task DeleteDescription(DescriptionEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Description.DeleteDescriptionCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
LanguageId = model.LanguageId,
|
|
IsOriginal = model.IsOriginal,
|
|
Value = model.Value,
|
|
});
|
|
|
|
|
|
[HttpPost("AddGenre")]
|
|
public async Task AddDescription([FromQuery] Guid titleId, [FromQuery] Guid genreId, [FromQuery] decimal? proportion) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Genre.AddGenreCommand
|
|
{
|
|
TitleId = titleId,
|
|
GenreId = genreId,
|
|
Proportion = proportion,
|
|
});
|
|
|
|
[HttpPost("SetGenreProportion")]
|
|
public async Task SetGenreProportion([FromQuery] Guid titleId, [FromQuery] Guid genreId, [FromQuery] decimal? proportion,
|
|
[FromQuery] decimal? newProportion) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Genre.SetGenreProportionCommand
|
|
{
|
|
TitleId = titleId,
|
|
GenreId = genreId,
|
|
Proportion = proportion,
|
|
NewProportion = newProportion
|
|
});
|
|
|
|
[HttpPost("DeleteGenre")]
|
|
public async Task DeleteGenre([FromQuery] Guid titleId, [FromQuery] Guid genreId) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.Genre.DeleteGenreCommand
|
|
{
|
|
TitleId = titleId,
|
|
GenreId = genreId,
|
|
});
|
|
|
|
//related content
|
|
[HttpPost("AddRelatedContent")]
|
|
public async Task AddDescription([FromQuery] Guid titleId, [FromQuery] MediaInfoType type, [FromQuery] string url) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.RelatedContent.AddRelatedContentCommand
|
|
{
|
|
TitleId = titleId,
|
|
Type = (Application.Commands.CommonModels.MediaInfoType)type,
|
|
Url = url,
|
|
});
|
|
|
|
[HttpPost("EditRelatedContent")]
|
|
public async Task EditRelatedContent([FromQuery] Guid titleId, [FromQuery] MediaInfoType type, [FromQuery] string url,
|
|
[FromQuery] MediaInfoType newType, [FromQuery] string newUrl) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.RelatedContent.EditRelatedContentCommand
|
|
{
|
|
TitleId = titleId,
|
|
Type = (Application.Commands.CommonModels.MediaInfoType)type,
|
|
Url = url,
|
|
NewType = (Application.Commands.CommonModels.MediaInfoType)newType,
|
|
NewUrl = newUrl,
|
|
});
|
|
|
|
[HttpPost("DeleteRelatedContent")]
|
|
public async Task DeleteRelatedContent([FromQuery] Guid titleId, [FromQuery] MediaInfoType type, [FromQuery] string url) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.RelatedContent.DeleteRelatedContentCommand
|
|
{
|
|
TitleId = titleId,
|
|
Type = (Application.Commands.CommonModels.MediaInfoType)type,
|
|
Url = url,
|
|
});
|
|
|
|
|
|
[HttpPost("SetCompleted")]
|
|
public async Task SetCompleted([FromQuery] Guid titleId, [FromQuery] bool completed) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.SetCompletedCommand
|
|
{
|
|
TitleId = titleId,
|
|
Value = completed,
|
|
});
|
|
|
|
[HttpPost("SetExpirationTime")]
|
|
public async Task SetExpirationTime([FromQuery] Guid titleId, [FromQuery] long expirationTimeTicks) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.SetExpirationTimeCommand
|
|
{
|
|
TitleId = titleId,
|
|
ExpirationTime = TimeSpan.FromTicks(expirationTimeTicks),
|
|
});
|
|
|
|
[HttpPost("SetAnnouncementDate")]
|
|
public async Task SetAnnouncementDate(DateEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.SetAnnouncementDateCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
Value = model.Value.HasValue ? new DateTimeOffset(model.Value.Value.DateTime, TimeSpan.Zero) : null
|
|
});
|
|
|
|
[HttpPost("SetEstimatedReleaseDate")]
|
|
public async Task SetEstimatedReleaseDate(DateEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.SetEstimatedReleaseDateCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
Value = model.Value.HasValue ? new DateTimeOffset(model.Value.Value.DateTime, TimeSpan.Zero) : null
|
|
});
|
|
|
|
[HttpPost("SetReleaseDate")]
|
|
public async Task SetReleaseDate(DateEdit model) =>
|
|
await _mediator.Send(new Application.Commands.Anime.Title.Properties.SetReleaseDateCommand
|
|
{
|
|
TitleId = model.AnimeTitleId ?? throw new ArgumentNullException(nameof(model.AnimeTitleId)),
|
|
Value = model.Value.HasValue ? new DateTimeOffset(model.Value.Value.DateTime, TimeSpan.Zero) : null,
|
|
});
|
|
} |