From 948f8694f27d31cbc7f7eb4b9b121cca021975af Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 27 Nov 2023 01:55:14 +0100 Subject: [PATCH] Update front for new filter api and use includes when useful --- back/src/Kyoo.Abstractions/Models/Utils/Sort.cs | 13 ++++++++++++- .../Utility/ExpressionParameterReplacer.cs | 2 +- .../Controllers/Repositories/DapperRepository.cs | 11 +++++++++++ back/src/Kyoo.Core/CoreModule.cs | 2 +- front/packages/models/src/resources/library-item.ts | 6 +----- front/packages/ui/src/details/show.tsx | 4 ++-- front/packages/ui/src/home/genre.tsx | 2 +- front/packages/ui/src/home/header.tsx | 3 +++ front/packages/ui/src/home/recommanded.tsx | 1 + 9 files changed, 33 insertions(+), 11 deletions(-) diff --git a/back/src/Kyoo.Abstractions/Models/Utils/Sort.cs b/back/src/Kyoo.Abstractions/Models/Utils/Sort.cs index c8e26c6b..91079312 100644 --- a/back/src/Kyoo.Abstractions/Models/Utils/Sort.cs +++ b/back/src/Kyoo.Abstractions/Models/Utils/Sort.cs @@ -63,7 +63,18 @@ namespace Kyoo.Abstractions.Controllers public record Conglomerate(params Sort[] List) : Sort; /// Sort randomly items - public record Random(uint seed) : Sort; + public record Random(uint Seed) : Sort + { + public Random() + : this(0) + { + uint seed = BitConverter.ToUInt32( + BitConverter.GetBytes(new System.Random().Next(int.MinValue, int.MaxValue)), + 0 + ); + Seed = seed; + } + } /// The default sort method for the given type. public record Default : Sort diff --git a/back/src/Kyoo.Abstractions/Utility/ExpressionParameterReplacer.cs b/back/src/Kyoo.Abstractions/Utility/ExpressionParameterReplacer.cs index 6d7df788..adf7e4bd 100644 --- a/back/src/Kyoo.Abstractions/Utility/ExpressionParameterReplacer.cs +++ b/back/src/Kyoo.Abstractions/Utility/ExpressionParameterReplacer.cs @@ -35,7 +35,7 @@ public sealed class ExpressionArgumentReplacer : ExpressionVisitor { if (_mapping.TryGetValue(node, out Expression? mappedArgument)) return Visit(mappedArgument); - return VisitParameter(node); + return base.VisitParameter(node); } public static Expression ReplaceParams(Expression expression, IEnumerable epxParams, params ParameterExpression[] param) diff --git a/back/src/Kyoo.Core/Controllers/Repositories/DapperRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/DapperRepository.cs index 36b1b5a9..abf48438 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/DapperRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/DapperRepository.cs @@ -94,6 +94,17 @@ public abstract class DapperRepository : IRepository /// public Task GetOrDefault(string slug, Include? include = null) { + if (slug == "random") + { + return Database.QuerySingle( + Sql, + Config, + Mapper, + include, + filter: null, + new Sort.Random() + ); + } return Database.QuerySingle( Sql, Config, diff --git a/back/src/Kyoo.Core/CoreModule.cs b/back/src/Kyoo.Core/CoreModule.cs index df8cf59c..db85763a 100644 --- a/back/src/Kyoo.Core/CoreModule.cs +++ b/back/src/Kyoo.Core/CoreModule.cs @@ -66,7 +66,7 @@ namespace Kyoo.Core builder.RegisterRepository(); builder.RegisterRepository(); builder.RegisterRepository(); - builder.RegisterType().InstancePerLifetimeScope(); + builder.RegisterRepository(); } /// diff --git a/front/packages/models/src/resources/library-item.ts b/front/packages/models/src/resources/library-item.ts index 7871c478..d3f648b7 100644 --- a/front/packages/models/src/resources/library-item.ts +++ b/front/packages/models/src/resources/library-item.ts @@ -36,11 +36,7 @@ export const LibraryItemP = z.union([ /* * Either a Show */ - ShowP.and( - z.object({ - kind: z.literal(ItemKind.Show), - }), - ).transform((x) => ({ ...x, playHref: `/watch/${x.slug}-s1e1` })), + ShowP.and(z.object({ kind: z.literal(ItemKind.Show) })), /* * Or a Movie */ diff --git a/front/packages/ui/src/details/show.tsx b/front/packages/ui/src/details/show.tsx index 33081315..d0b6a786 100644 --- a/front/packages/ui/src/details/show.tsx +++ b/front/packages/ui/src/details/show.tsx @@ -66,7 +66,7 @@ const ShowHeader = forwardRef(function ShowH )} >
- + {/* */} => ({ parser: ShowP, path: ["shows", slug], params: { - fields: ["studio", "firstEpisode", "collections"], + fields: ["studio", "firstEpisode"], }, }); diff --git a/front/packages/ui/src/home/genre.tsx b/front/packages/ui/src/home/genre.tsx index b5923283..de867302 100644 --- a/front/packages/ui/src/home/genre.tsx +++ b/front/packages/ui/src/home/genre.tsx @@ -105,7 +105,7 @@ GenreGrid.query = (genre: Genre): QueryIdentifier => ({ infinite: true, path: ["items"], params: { - genres: genre, + filter: `genres has ${genre}`, sortBy: "random", // Limit the inital numbers of items limit: 10, diff --git a/front/packages/ui/src/home/header.tsx b/front/packages/ui/src/home/header.tsx index 4f97cab4..c7d005e1 100644 --- a/front/packages/ui/src/home/header.tsx +++ b/front/packages/ui/src/home/header.tsx @@ -105,4 +105,7 @@ export const Header = ({ Header.query = (): QueryIdentifier => ({ parser: LibraryItemP, path: ["items", "random"], + params: { + fields: ["firstEpisode"], + }, }); diff --git a/front/packages/ui/src/home/recommanded.tsx b/front/packages/ui/src/home/recommanded.tsx index 28cfc816..da45841e 100644 --- a/front/packages/ui/src/home/recommanded.tsx +++ b/front/packages/ui/src/home/recommanded.tsx @@ -220,5 +220,6 @@ Recommanded.query = (): QueryIdentifier => ({ params: { sortBy: "random", limit: 6, + fields: ["firstEpisode"], }, });