using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading.Tasks; using API.Data; using API.DTOs; using API.DTOs.Filtering; using API.DTOs.Metadata; using API.Entities.Enums; using Kavita.Common.Extensions; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class MetadataController : BaseApiController { private readonly IUnitOfWork _unitOfWork; public MetadataController(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; } /// /// Fetches genres from the instance /// /// String separated libraryIds or null for all genres /// [HttpGet("genres")] public async Task>> GetAllGenres(string? libraryIds) { var ids = libraryIds?.Split(",").Select(int.Parse).ToList(); if (ids != null && ids.Count > 0) { return Ok(await _unitOfWork.GenreRepository.GetAllGenreDtosForLibrariesAsync(ids)); } return Ok(await _unitOfWork.GenreRepository.GetAllGenreDtosAsync()); } /// /// Fetches people from the instance /// /// String separated libraryIds or null for all people /// [HttpGet("people")] public async Task>> GetAllPeople(string? libraryIds) { var ids = libraryIds?.Split(",").Select(int.Parse).ToList(); if (ids != null && ids.Count > 0) { return Ok(await _unitOfWork.PersonRepository.GetAllPeopleDtosForLibrariesAsync(ids)); } return Ok(await _unitOfWork.PersonRepository.GetAllPeople()); } /// /// Fetches all tags from the instance /// /// String separated libraryIds or null for all tags /// [HttpGet("tags")] public async Task>> GetAllTags(string? libraryIds) { var ids = libraryIds?.Split(",").Select(int.Parse).ToList(); if (ids != null && ids.Count > 0) { return Ok(await _unitOfWork.TagRepository.GetAllTagDtosForLibrariesAsync(ids)); } return Ok(await _unitOfWork.TagRepository.GetAllTagDtosAsync()); } /// /// Fetches all age ratings from the instance /// /// String separated libraryIds or null for all ratings /// [HttpGet("age-ratings")] public async Task>> GetAllAgeRatings(string? libraryIds) { var ids = libraryIds?.Split(",").Select(int.Parse).ToList(); if (ids != null && ids.Count > 0) { return Ok(await _unitOfWork.SeriesRepository.GetAllAgeRatingsDtosForLibrariesAsync(ids)); } return Ok(Enum.GetValues().Select(t => new AgeRatingDto() { Title = t.ToDescription(), Value = t })); } /// /// Fetches all publication status' from the instance /// /// String separated libraryIds or null for all publication status /// [HttpGet("publication-status")] public async Task>> GetAllPublicationStatus(string? libraryIds) { var ids = libraryIds?.Split(",").Select(int.Parse).ToList(); if (ids != null && ids.Count > 0) { return Ok(await _unitOfWork.SeriesRepository.GetAllPublicationStatusesDtosForLibrariesAsync(ids)); } return Ok(Enum.GetValues().Select(t => new PublicationStatusDto() { Title = t.ToDescription(), Value = t })); } /// /// Fetches all age ratings from the instance /// /// String separated libraryIds or null for all ratings /// [HttpGet("languages")] public async Task>> GetAllLanguages(string? libraryIds) { var ids = libraryIds?.Split(",").Select(int.Parse).ToList(); if (ids != null && ids.Count > 0) { return Ok(await _unitOfWork.SeriesRepository.GetAllLanguagesForLibrariesAsync(ids)); } return Ok(new List() { new () { Title = CultureInfo.GetCultureInfo("en").DisplayName, IsoCode = "en" } }); } }