diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index aac86eff..f6141aa8 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -148,6 +148,9 @@ namespace Kyoo.Controllers Expression> sort, Pagination limit = default ) => GetGenresFromShow(showSlug, where, new Sort(sort), limit); + + Task GetStudioFromShow(int showID); + Task GetStudioFromShow(string showSlug); // Helpers diff --git a/Kyoo.Common/Controllers/IRepository.cs b/Kyoo.Common/Controllers/IRepository.cs index 1034c947..4e2fa8c7 100644 --- a/Kyoo.Common/Controllers/IRepository.cs +++ b/Kyoo.Common/Controllers/IRepository.cs @@ -218,7 +218,12 @@ namespace Kyoo.Controllers Pagination limit = default ) => GetFromShow(showSlug, where, new Sort(sort), limit); } - public interface IStudioRepository : IRepository {} + + public interface IStudioRepository : IRepository + { + Task GetFromShow(int showID); + Task GetFromShow(string showSlug); + } public interface IPeopleRepository : IRepository { diff --git a/Kyoo.Common/Controllers/Implementations/LibraryManager.cs b/Kyoo.Common/Controllers/Implementations/LibraryManager.cs index c0968952..c707f9b0 100644 --- a/Kyoo.Common/Controllers/Implementations/LibraryManager.cs +++ b/Kyoo.Common/Controllers/Implementations/LibraryManager.cs @@ -286,7 +286,17 @@ namespace Kyoo.Controllers { return GenreRepository.GetFromShow(showSlug, where, sort, limit); } - + + public Task GetStudioFromShow(int showID) + { + return StudioRepository.GetFromShow(showID); + } + + public Task GetStudioFromShow(string showSlug) + { + return StudioRepository.GetFromShow(showSlug); + } + public Task AddShowLink(int showID, int? libraryID, int? collectionID) { return ShowRepository.AddShowLink(showID, libraryID, collectionID); diff --git a/Kyoo/Controllers/Repositories/StudioRepository.cs b/Kyoo/Controllers/Repositories/StudioRepository.cs index 299eb712..65ec054e 100644 --- a/Kyoo/Controllers/Repositories/StudioRepository.cs +++ b/Kyoo/Controllers/Repositories/StudioRepository.cs @@ -66,5 +66,27 @@ namespace Kyoo.Controllers show.StudioID = null; await _database.SaveChangesAsync(); } + + public async Task GetFromShow(int showID) + { + Studio studio = await _database.Shows + .Where(x => x.ID == showID) + .Select(x => x.Studio) + .FirstOrDefaultAsync(); + if (studio == null && !_database.Shows.Any(x => x.ID == showID)) + throw new ItemNotFound(); + return studio; + } + + public async Task GetFromShow(string showSlug) + { + Studio studio = await _database.Shows + .Where(x => x.Slug == showSlug) + .Select(x => x.Studio) + .FirstOrDefaultAsync(); + if (studio == null && !_database.Shows.Any(x => x.Slug == showSlug)) + throw new ItemNotFound(); + return studio; + } } } \ No newline at end of file diff --git a/Kyoo/Startup.cs b/Kyoo/Startup.cs index b0c08eb5..ef540054 100644 --- a/Kyoo/Startup.cs +++ b/Kyoo/Startup.cs @@ -48,7 +48,7 @@ namespace Kyoo options.UseLazyLoadingProxies() .UseNpgsql(_configuration.GetConnectionString("Database")); // .EnableSensitiveDataLogging() - //.UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole())); + // .UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole())); }, ServiceLifetime.Transient); services.AddDbContext(options => diff --git a/Kyoo/Views/API/ShowsApi.cs b/Kyoo/Views/API/ShowsApi.cs index 29c76071..84e77c0a 100644 --- a/Kyoo/Views/API/ShowsApi.cs +++ b/Kyoo/Views/API/ShowsApi.cs @@ -286,5 +286,33 @@ namespace Kyoo.Api return BadRequest(new {Error = ex.Message}); } } + + [HttpGet("{showID:int}/studio")] + [Authorize(Policy = "Read")] + public async Task> GetStudio(int showID) + { + try + { + return await _libraryManager.GetStudioFromShow(showID); + } + catch (ItemNotFound) + { + return NotFound(); + } + } + + [HttpGet("{slug}/studio")] + [Authorize(Policy = "Read")] + public async Task> GetStudio(string slug) + { + try + { + return await _libraryManager.GetStudioFromShow(slug); + } + catch (ItemNotFound) + { + return NotFound(); + } + } } }