MyBookmark/Modules.Library.WebApi/Controllers/AnimeTitle1Controller.cs
THE_KONDRAT 3294f8d88d title:
non season episode
seasons
2024-12-29 19:41:07 +03:00

160 lines
5.7 KiB
C#

using AutoMapper;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Modules.Library.WebApi.Models.Anime;
using Modules.Library.WebApi.Models.Anime.CommonProperties;
using Modules.Library.WebApi.Models.Views.Anime;
using System.Net;
namespace Modules.Library.WebApi.Controllers;
[ApiController]
[ApiExplorerSettings(GroupName = "AnimeTitle1V1")]
[Route("MediaContent/Anime/Title1")]
//[Route("[controller]")]
[Authorize]
public class AnimeTitle1Controller : ControllerBase
{
private readonly IMapper _mapper;
private readonly IMediator _mediator;
private readonly ILogger _logger;
public AnimeTitle1Controller(IMapper mapper, IMediator mediator, ILogger<AnimeTitleController> logger)
{
_mapper = mapper;
_mediator = mediator;
_logger = logger;
}
[HttpGet]
[AllowAnonymous]
public async Task<Title> ById(Guid TitleId)
{
var title = await _mediator.Send(new Application.Queries.Anime.AnimeTitle.AnimeTitleQuery { Id = TitleId });
var r = new Title
{
Id = title.Id,
Deleted = title.Deleted,
CommonProperties = GetCommonProperties(title.CommonProperties),
ContainRates = title.Rate > 0,
ContainViews = false,
Items = title.Items.Select(GetAnimeItem),
Completed = title.Completed,
ExpirationTimeTicks = title.ExpirationTime.Ticks,
};
return new Title
{
Id = title.Id,
Deleted = title.Deleted,
CommonProperties = GetCommonProperties(title.CommonProperties),
ContainRates = title.Rate > 0,
ContainViews = false,
Items = title.Items.Select(GetAnimeItem),
Completed = title.Completed,
ExpirationTimeTicks = title.ExpirationTime.Ticks,
};
}
private static Models.Views.CommonProperties GetCommonProperties(Application.Models.CommonProperties commonProperties)
{
return new Models.Views.CommonProperties
{
Names = commonProperties.Names.Select(GetNameItem),
Preview = commonProperties.Preview != null ? GetMediaInfo(commonProperties.Preview) : null,
Descriptions = commonProperties.Descriptions.Select(q => new Models.Views.Description
{
Language = GetLanguage(q.Language),
Value = q.Value,
IsOriginal = q.IsOriginal,
}),
Genres = commonProperties.Genres.Select(GetGenreProportion),
RelatedContent = commonProperties.RelatedContent.Select(GetMediaInfo),
AnnouncementDate = commonProperties.AnnouncementDate,
EstimatedReleaseDate = commonProperties.EstimatedReleaseDate,
ReleaseDate = commonProperties.ReleaseDate,
};
}
private static Models.Views.NameItem GetNameItem(Application.Models.NameItem nameItem)
{
return new Models.Views.NameItem
{
Type = (Models.NameType)nameItem.Type,
Language = GetLanguage(nameItem.Language),
Value = nameItem.Value,
};
}
private static Models.Views.GenreProportion GetGenreProportion(Application.Models.GenreProportion genreProportion)
{
return new Models.Views.GenreProportion
{
Genre = new Models.Views.Dictionary.Genre
{
Id = genreProportion.Genre.Id,
Name = genreProportion.Genre.Name,
Deleted = genreProportion.Genre.Deleted,
},
Proportion = genreProportion.Proportion,
};
}
private static Models.Views.Dictionary.Language GetLanguage(Application.Models.Language language)
{
return new Models.Views.Dictionary.Language
{
Id = language.Id,
Name = language.Name,
CodeIso3 = language.CodeIso3,
Deleted = language.Deleted,
IconId = language.IconId,
};
}
private static Models.MediaInfo GetMediaInfo(Application.Models.MediaInfo mediaInfo)
{
return new Models.MediaInfo
{
Type = (Models.MediaInfoType)mediaInfo.Type,
ContentType = mediaInfo.ContentType,
ObjectId = mediaInfo.ObjectId,
};
}
private static AnimeItem GetAnimeItem(Application.Models.Anime.AnimeItem item)
{
if (item is Application.Models.Anime.Season season)
{
return new Season
{
Id = season.Id,
Deleted = season.Deleted,
Completed = season.Completed,
CommonProperties = GetCommonProperties(season.CommonProperties),
Number = season.Number,
Order = season.Order,
ExpirationTimeTicks = season.ExpirationTime.Ticks,
Director = season.Director,
OriginCountry = season.OriginCountry,
Episodes = season.Episodes.Select(GetAnimeItem).OfType<Episode>(),
};
}
else if (item is Application.Models.Anime.Episode episode)
{
return new Episode
{
Id = episode.Id,
Deleted = episode.Deleted,
Completed = episode.Completed,
CommonProperties = GetCommonProperties(episode.CommonProperties),
Number = episode.Number,
Order = episode.Order,
ExpirationTimeTicks = episode.ExpirationTime.Ticks,
Variant = episode.Variant,
Type = (Models.AnimeEpisodeType)episode.Type,
DurationTicks = episode.Duration?.Ticks,
};
}
else throw new NotImplementedException();
}
}