Starting to clean up

This commit is contained in:
Zoe Roux 2020-07-16 21:25:22 +02:00
parent 63a85124b7
commit d0117a8325
17 changed files with 247 additions and 94 deletions

View File

@ -33,7 +33,6 @@ namespace Kyoo.Controllers
// Helpers
Task<Show> GetShowByPath(string path);
Task AddShowLink(int showID, int? libraryID, int? collectionID);
Task AddShowLink([NotNull] Show show, Library library, Collection collection);
@ -122,26 +121,26 @@ namespace Kyoo.Controllers
Task<ICollection<People>> SearchPeople(string searchQuery);
//Register values
Task RegisterLibrary(Library library);
Task RegisterCollection(Collection collection);
Task RegisterShow(Show show);
Task RegisterSeason(Season season);
Task RegisterEpisode(Episode episode);
Task RegisterTrack(Track track);
Task RegisterGenre(Genre genre);
Task RegisterStudio(Studio studio);
Task RegisterPeople(People people);
Task<Library> RegisterLibrary(Library library);
Task<Collection> RegisterCollection(Collection collection);
Task<Show> RegisterShow(Show show);
Task<Season> RegisterSeason(Season season);
Task<Episode> RegisterEpisode(Episode episode);
Task<Track> RegisterTrack(Track track);
Task<Genre> RegisterGenre(Genre genre);
Task<Studio> RegisterStudio(Studio studio);
Task<People> RegisterPeople(People people);
// Edit values
Task EditLibrary(Library library, bool resetOld);
Task EditCollection(Collection collection, bool resetOld);
Task EditShow(Show show, bool resetOld);
Task EditSeason(Season season, bool resetOld);
Task EditEpisode(Episode episode, bool resetOld);
Task EditTrack(Track track, bool resetOld);
Task EditGenre(Genre genre, bool resetOld);
Task EditStudio(Studio studio, bool resetOld);
Task EditPeople(People people, bool resetOld);
Task<Library> EditLibrary(Library library, bool resetOld);
Task<Collection> EditCollection(Collection collection, bool resetOld);
Task<Show> EditShow(Show show, bool resetOld);
Task<Season> EditSeason(Season season, bool resetOld);
Task<Episode> EditEpisode(Episode episode, bool resetOld);
Task<Track> EditTrack(Track track, bool resetOld);
Task<Genre> EditGenre(Genre genre, bool resetOld);
Task<Studio> EditStudio(Studio studio, bool resetOld);
Task<People> EditPeople(People people, bool resetOld);
// Delete values
@ -154,5 +153,27 @@ namespace Kyoo.Controllers
Task DeleteGenre(Genre genre);
Task DeleteStudio(Studio studio);
Task DeletePeople(People people);
//Delete by slug
Task DelteLibrary(string slug);
Task DeleteCollection(string slug);
Task DeleteShow(string slug);
Task DeleteSeason(string slug);
Task DeleteEpisode(string slug);
Task DeleteTrack(string slug);
Task DeleteGenre(string slug);
Task DeleteStudio(string slug);
Task DeletePeople(string slug);
//Delete by id
Task DelteLibrary(int id);
Task DeleteCollection(int id);
Task DeleteShow(int id);
Task DeleteSeason(int id);
Task DeleteEpisode(int id);
Task DeleteTrack(int id);
Task DeleteGenre(int id);
Task DeleteStudio(int id);
Task DeletePeople(int id);
}
}

View File

@ -81,9 +81,9 @@ namespace Kyoo.Controllers
Pagination page = default
) => GetAll(where, new Sort<T>(sort), page);
Task<int> Create([NotNull] T obj);
Task<int> CreateIfNotExists([NotNull] T obj);
Task Edit([NotNull] T edited, bool resetOld);
Task<T> Create([NotNull] T obj);
Task<T> CreateIfNotExists([NotNull] T obj);
Task<T> Edit([NotNull] T edited, bool resetOld);
Task Delete(int id);
Task Delete(string slug);
@ -99,7 +99,6 @@ namespace Kyoo.Controllers
public interface IShowRepository : IRepository<Show>
{
Task<Show> GetByPath(string path);
Task AddShowLink(int showID, int? libraryID, int? collectionID);
}

View File

@ -221,12 +221,7 @@ namespace Kyoo.Controllers
{
return _episodes.GetEpisodes(seasonID);
}
public Task<Show> GetShowByPath(string path)
{
return _shows.GetByPath(path);
}
public Task AddShowLink(int showID, int? libraryID, int? collectionID)
{
return _shows.AddShowLink(showID, libraryID, collectionID);
@ -279,92 +274,92 @@ namespace Kyoo.Controllers
return _people.Search(searchQuery);
}
public Task RegisterLibrary(Library library)
public Task<Library> RegisterLibrary(Library library)
{
return _libraries.Create(library);
}
public Task RegisterCollection(Collection collection)
public Task<Collection> RegisterCollection(Collection collection)
{
return _collections.Create(collection);
}
public Task RegisterShow(Show show)
public Task<Show> RegisterShow(Show show)
{
return _shows.Create(show);
}
public Task RegisterSeason(Season season)
public Task<Season> RegisterSeason(Season season)
{
return _seasons.Create(season);
}
public Task RegisterEpisode(Episode episode)
public Task<Episode> RegisterEpisode(Episode episode)
{
return _episodes.Create(episode);
}
public Task RegisterTrack(Track track)
public Task<Track> RegisterTrack(Track track)
{
return _tracks.Create(track);
}
public Task RegisterGenre(Genre genre)
public Task<Genre> RegisterGenre(Genre genre)
{
return _genres.Create(genre);
}
public Task RegisterStudio(Studio studio)
public Task<Studio> RegisterStudio(Studio studio)
{
return _studios.Create(studio);
}
public Task RegisterPeople(People people)
public Task<People> RegisterPeople(People people)
{
return _people.Create(people);
}
public Task EditLibrary(Library library, bool resetOld)
public Task<Library> EditLibrary(Library library, bool resetOld)
{
return _libraries.Edit(library, resetOld);
}
public Task EditCollection(Collection collection, bool resetOld)
public Task<Collection> EditCollection(Collection collection, bool resetOld)
{
return _collections.Edit(collection, resetOld);
}
public Task EditShow(Show show, bool resetOld)
public Task<Show> EditShow(Show show, bool resetOld)
{
return _shows.Edit(show, resetOld);
}
public Task EditSeason(Season season, bool resetOld)
public Task<Season> EditSeason(Season season, bool resetOld)
{
return _seasons.Edit(season, resetOld);
}
public Task EditEpisode(Episode episode, bool resetOld)
public Task<Episode> EditEpisode(Episode episode, bool resetOld)
{
return _episodes.Edit(episode, resetOld);
}
public Task EditTrack(Track track, bool resetOld)
public Task<Track> EditTrack(Track track, bool resetOld)
{
return _tracks.Edit(track, resetOld);
}
public Task EditGenre(Genre genre, bool resetOld)
public Task<Genre> EditGenre(Genre genre, bool resetOld)
{
return _genres.Edit(genre, resetOld);
}
public Task EditStudio(Studio studio, bool resetOld)
public Task<Studio> EditStudio(Studio studio, bool resetOld)
{
return _studios.Edit(studio, resetOld);
}
public Task EditPeople(People people, bool resetOld)
public Task<People> EditPeople(People people, bool resetOld)
{
return _people.Edit(people, resetOld);
}
@ -413,5 +408,95 @@ namespace Kyoo.Controllers
{
return _people.Delete(people);
}
public Task DelteLibrary(string library)
{
return _libraries.Delete(library);
}
public Task DeleteCollection(string collection)
{
return _collections.Delete(collection);
}
public Task DeleteShow(string show)
{
return _shows.Delete(show);
}
public Task DeleteSeason(string season)
{
return _seasons.Delete(season);
}
public Task DeleteEpisode(string episode)
{
return _episodes.Delete(episode);
}
public Task DeleteTrack(string track)
{
return _tracks.Delete(track);
}
public Task DeleteGenre(string genre)
{
return _genres.Delete(genre);
}
public Task DeleteStudio(string studio)
{
return _studios.Delete(studio);
}
public Task DeletePeople(string people)
{
return _people.Delete(people);
}
public Task DelteLibrary(int library)
{
return _libraries.Delete(library);
}
public Task DeleteCollection(int collection)
{
return _collections.Delete(collection);
}
public Task DeleteShow(int show)
{
return _shows.Delete(show);
}
public Task DeleteSeason(int season)
{
return _seasons.Delete(season);
}
public Task DeleteEpisode(int episode)
{
return _episodes.Delete(episode);
}
public Task DeleteTrack(int track)
{
return _tracks.Delete(track);
}
public Task DeleteGenre(int genre)
{
return _genres.Delete(genre);
}
public Task DeleteStudio(int studio)
{
return _studios.Delete(studio);
}
public Task DeletePeople(int people)
{
return _people.Delete(people);
}
}
}

View File

@ -72,7 +72,7 @@ namespace Kyoo.Controllers
return await query.ToListAsync();
}
public async Task<int> Create(Collection obj)
public async Task<Collection> Create(Collection obj)
{
if (obj == null)
throw new ArgumentNullException(nameof(obj));
@ -91,17 +91,17 @@ namespace Kyoo.Controllers
throw;
}
return obj.ID;
return obj;
}
public async Task<int> CreateIfNotExists(Collection obj)
public async Task<Collection> CreateIfNotExists(Collection obj)
{
if (obj == null)
throw new ArgumentNullException(nameof(obj));
Collection old = await Get(obj.Slug);
if (old != null)
return old.ID;
return old;
try
{
return await Create(obj);
@ -111,11 +111,11 @@ namespace Kyoo.Controllers
old = await Get(obj.Slug);
if (old == null)
throw new SystemException("Unknown database state.");
return old.ID;
return old;
}
}
public async Task Edit(Collection edited, bool resetOld)
public async Task<Collection> Edit(Collection edited, bool resetOld)
{
if (edited == null)
throw new ArgumentNullException(nameof(edited));
@ -130,6 +130,7 @@ namespace Kyoo.Controllers
Utility.Merge(old, edited);
await _database.SaveChangesAsync();
return old;
}
public async Task Delete(int id)

View File

@ -1,7 +1,7 @@
using System;
using System.Reflection;
using IdentityServer4.Services;
using Kyoo.Api;
using Kyoo.API;
using Kyoo.Controllers;
using Kyoo.Models;
using Microsoft.AspNetCore.Authentication.JwtBearer;

View File

@ -16,7 +16,7 @@ using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.Configuration;
using SignInResult = Microsoft.AspNetCore.Identity.SignInResult;
namespace Kyoo.Api
namespace Kyoo.API
{
public class RegisterRequest
{

View File

@ -5,7 +5,7 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/[controller]")]
[ApiController]

View File

@ -6,7 +6,7 @@ using System.Threading.Tasks;
using Kyoo.Controllers;
using Microsoft.AspNetCore.Authorization;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/[controller]")]
[ApiController]

View File

@ -6,7 +6,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/libraries")]
[Route("api/library")]

View File

@ -5,7 +5,7 @@ using Kyoo.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/[controller]")]
[ApiController]

View File

@ -4,7 +4,7 @@ using Kyoo.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/[controller]")]
[ApiController]

View File

@ -5,34 +5,31 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Kyoo.Controllers;
using Kyoo.Models.Exceptions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/shows")]
[Route("api/show")]
[ApiController]
public class ShowsAPI : ControllerBase
{
private readonly ILibraryManager _libraryManager;
private readonly IShowRepository _shows;
private readonly IProviderManager _providerManager;
private readonly DatabaseContext _database;
private readonly IThumbnailsManager _thumbnailsManager;
private readonly ITaskManager _taskManager;
private readonly string _baseURL;
public ShowsAPI(ILibraryManager libraryManager,
public ShowsAPI(IShowRepository shows,
IProviderManager providerManager,
DatabaseContext database,
IThumbnailsManager thumbnailsManager,
ITaskManager taskManager,
IConfiguration configuration)
{
_libraryManager = libraryManager;
_shows = shows;
_providerManager = providerManager;
_database = database;
_thumbnailsManager = thumbnailsManager;
_taskManager = taskManager;
_baseURL = configuration.GetValue<string>("public_url").TrimEnd('/');
@ -51,23 +48,34 @@ namespace Kyoo.Api
if (limit == 0)
limit = 20;
ICollection<Show> shows;
try
{
shows = await _libraryManager.GetShows(Utility.ParseWhere<Show>(where),
ICollection<Show> shows = await _shows.GetAll(Utility.ParseWhere<Show>(where),
new Sort<Show>(sortBy),
new Pagination(limit, afterID));
return new Page<Show>(shows,
x => $"{x.ID}",
_baseURL + Request.Path,
Request.Query.ToDictionary(x => x.Key, x => x.Value.ToString(), StringComparer.InvariantCultureIgnoreCase),
limit);
}
catch (ArgumentException ex)
{
return BadRequest(new { Error = ex.Message });
}
return new Page<Show>(shows,
x => $"{x.ID}",
_baseURL + Request.Path,
Request.Query.ToDictionary(x => x.Key, x => x.Value.ToString(), StringComparer.InvariantCultureIgnoreCase),
limit);
}
[HttpGet("{id}")]
[Authorize(Policy="Read")]
[JsonDetailed]
public async Task<ActionResult<Show>> GetShow(int id)
{
Show show = await _shows.Get(id);
if (show == null)
return NotFound();
return show;
}
[HttpGet("{slug}")]
@ -75,28 +83,67 @@ namespace Kyoo.Api
[JsonDetailed]
public async Task<ActionResult<Show>> GetShow(string slug)
{
Show show = await _libraryManager.GetShow(slug);
Show show = await _shows.Get(slug);
if (show == null)
return NotFound();
return show;
}
[HttpPost("edit/{slug}")]
[Authorize(Policy="Write")]
public async Task<IActionResult> EditShow(string slug, [FromBody] Show show)
{
if (!ModelState.IsValid)
return BadRequest(show);
Show old = _database.Shows.AsNoTracking().FirstOrDefault(x => x.Slug == slug);
[HttpPost]
[Authorize(Policy="Write")]
public async Task<ActionResult<Show>> CreateShow([FromBody] Show show)
{
try
{
return await _shows.Create(show);
}
catch (DuplicatedItemException)
{
Show existing = await _shows.Get(show.Slug);
return Conflict(existing);
}
}
[HttpPut("{slug}")]
[Authorize(Policy="Write")]
public async Task<ActionResult<Show>> EditShow(string slug, [FromQuery] bool resetOld, [FromBody] Show show)
{
Show old = await _shows.Get(slug);
if (old == null)
return NotFound();
show.ID = old.ID;
show.Slug = slug;
show.Path = old.Path;
await _libraryManager.EditShow(show, false);
return await _shows.Edit(show, resetOld);
}
[HttpDelete("{slug}")]
// [Authorize(Policy="Write")]
public async Task<IActionResult> DeleteShow(string slug)
{
try
{
await _shows.Delete(slug);
}
catch (ItemNotFound)
{
return NotFound();
}
return Ok();
}
[HttpDelete("{id}")]
// [Authorize(Policy="Write")]
public async Task<IActionResult> DeleteShow(int id)
{
try
{
await _shows.Delete(id);
}
catch (ItemNotFound)
{
return NotFound();
}
return Ok();
}

View File

@ -8,7 +8,7 @@ using Kyoo.Controllers;
using Kyoo.Models.Watch;
using Microsoft.AspNetCore.Authorization;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("[controller]")]
[ApiController]
@ -33,7 +33,7 @@ namespace Kyoo.Api
string identifier,
string extension)
{
string languageTag = identifier.Length == 3 ? identifier.Substring(0, 3) : null;
string languageTag = identifier.Length >= 3 ? identifier.Substring(0, 3) : null;
bool forced = identifier.Length > 4 && identifier.Substring(4) == "forced";
Track subtitle = null;

View File

@ -2,7 +2,7 @@
using Kyoo.Controllers;
using Microsoft.AspNetCore.Authorization;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/[controller]")]
[ApiController]

View File

@ -5,7 +5,7 @@ using System.Threading.Tasks;
using Kyoo.Controllers;
using Microsoft.AspNetCore.Authorization;
namespace Kyoo.Api
namespace Kyoo.API
{
public class ThumbnailController : ControllerBase
{

View File

@ -6,7 +6,7 @@ using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("[controller]")]
[ApiController]

View File

@ -4,7 +4,7 @@ using Kyoo.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Kyoo.Api
namespace Kyoo.API
{
[Route("api/[controller]")]
[ApiController]