From 5f4f717872a24bca5f9183922ed1d114c82556d4 Mon Sep 17 00:00:00 2001 From: Michal Date: Mon, 11 May 2026 09:25:21 +0200 Subject: [PATCH 01/10] feat: add missing user_rating --- .../users/schema/response/socialActivityResponseSchema.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/api/src/contracts/users/schema/response/socialActivityResponseSchema.ts b/projects/api/src/contracts/users/schema/response/socialActivityResponseSchema.ts index 6c5d30d3..d4d86042 100644 --- a/projects/api/src/contracts/users/schema/response/socialActivityResponseSchema.ts +++ b/projects/api/src/contracts/users/schema/response/socialActivityResponseSchema.ts @@ -9,6 +9,7 @@ const activitySchema = z.object({ activity_at: z.string().datetime(), action: asString(z.enum(['scrobble', 'watch', 'checkin'])), user: profileResponseSchema, + user_rating: z.number().int().nullish(), }); const socialEpisodeResponseSchema = z.object({ From 155c49b75c560b0b5cab39077bc58c1fbb302f77 Mon Sep 17 00:00:00 2001 From: Michal Date: Mon, 11 May 2026 09:49:34 +0200 Subject: [PATCH 02/10] feat: add nullish episode_count --- .../people/schema/response/peopleShowCreditsResponseSchema.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/api/src/contracts/people/schema/response/peopleShowCreditsResponseSchema.ts b/projects/api/src/contracts/people/schema/response/peopleShowCreditsResponseSchema.ts index a6185579..f07d3249 100644 --- a/projects/api/src/contracts/people/schema/response/peopleShowCreditsResponseSchema.ts +++ b/projects/api/src/contracts/people/schema/response/peopleShowCreditsResponseSchema.ts @@ -8,7 +8,7 @@ export const peopleShowCreditsResponseSchema = z.object({ cast: z.array( z.object({ show: showResponseSchema, - episode_count: z.number().int(), + episode_count: z.number().int().nullish(), series_regular: z.boolean(), }).merge(characterResponseSchema), ).nullish(), @@ -17,7 +17,7 @@ export const peopleShowCreditsResponseSchema = z.object({ z.array( z.object({ show: showResponseSchema, - episode_count: z.number().int(), + episode_count: z.number().int().nullish(), }).merge(jobsResponseSchema), ), ).nullish(), From a97752c1c709ce39ce95d21f87e4e53fade89dce Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 13 May 2026 11:12:03 +0200 Subject: [PATCH 03/10] fix: nullish translation country --- .../contracts/_internal/response/translationResponseSchema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/api/src/contracts/_internal/response/translationResponseSchema.ts b/projects/api/src/contracts/_internal/response/translationResponseSchema.ts index 40d2c8cb..ba234262 100644 --- a/projects/api/src/contracts/_internal/response/translationResponseSchema.ts +++ b/projects/api/src/contracts/_internal/response/translationResponseSchema.ts @@ -6,6 +6,6 @@ export const translationResponseSchema = z.array( overview: z.string().nullish(), tagline: z.string().nullish(), language: z.string(), - country: z.string(), + country: z.string().nullish(), }), ); From 1179630991d37d246bd4d0f8802374323fc2c2fc Mon Sep 17 00:00:00 2001 From: Michal Date: Mon, 18 May 2026 17:51:23 +0200 Subject: [PATCH 04/10] fix: nullish hidden_at in hiddenShowResponseSchema --- .../contracts/users/schema/response/hiddenShowResponseSchema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/api/src/contracts/users/schema/response/hiddenShowResponseSchema.ts b/projects/api/src/contracts/users/schema/response/hiddenShowResponseSchema.ts index eec90d85..c0e78816 100644 --- a/projects/api/src/contracts/users/schema/response/hiddenShowResponseSchema.ts +++ b/projects/api/src/contracts/users/schema/response/hiddenShowResponseSchema.ts @@ -2,5 +2,5 @@ import { typedShowResponseSchema } from '../../../_internal/response/showRespons import { z } from '../../../_internal/z.ts'; export const hiddenShowResponseSchema = z.object({ - hidden_at: z.string().datetime(), + hidden_at: z.string().datetime().nullish(), }).merge(typedShowResponseSchema); From 532fc3dbabc2e88eacaf7eebeb8c9bf720054d14 Mon Sep 17 00:00:00 2001 From: Michal Date: Mon, 18 May 2026 18:03:00 +0200 Subject: [PATCH 05/10] fix: nullish comment_ids --- .../contracts/_internal/response/sentimentsResponseSchema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/api/src/contracts/_internal/response/sentimentsResponseSchema.ts b/projects/api/src/contracts/_internal/response/sentimentsResponseSchema.ts index ad218142..4b7c981d 100644 --- a/projects/api/src/contracts/_internal/response/sentimentsResponseSchema.ts +++ b/projects/api/src/contracts/_internal/response/sentimentsResponseSchema.ts @@ -2,7 +2,7 @@ import { z } from '../z.ts'; const sentimentResponseSchema = z.object({ sentiment: z.string(), - comment_ids: z.array(z.number().int()), + comment_ids: z.array(z.number().int()).nullish(), }); export const sentimentsResponseSchema = z.object({ From 1b3f0b57f671976e6b91e7b9afb1c98b180974d3 Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 20 May 2026 07:54:43 +0200 Subject: [PATCH 06/10] fix: add countries media filter --- .../src/contracts/_internal/request/mediaFilterParamsSchema.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts b/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts index 1c2607f7..ed15773b 100644 --- a/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts +++ b/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts @@ -26,4 +26,5 @@ export const mediaFilterParamsSchema = z.object({ start_date: z.string().nullish(), end_date: z.string().nullish(), runtimes: z.string().nullish(), + countries: z.string().nullish(), }); From 19a2574d6940eb890a6fd58caa020b9f2a9cb4a4 Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 20 May 2026 08:04:41 +0200 Subject: [PATCH 07/10] fix: add certifications media filter --- .../src/contracts/_internal/request/mediaFilterParamsSchema.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts b/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts index ed15773b..c11617db 100644 --- a/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts +++ b/projects/api/src/contracts/_internal/request/mediaFilterParamsSchema.ts @@ -27,4 +27,5 @@ export const mediaFilterParamsSchema = z.object({ end_date: z.string().nullish(), runtimes: z.string().nullish(), countries: z.string().nullish(), + certifications: z.string().nullish(), }); From 9534c596fc865f4761b56567f82629a5c25db41c Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 21 May 2026 10:47:27 +0200 Subject: [PATCH 08/10] fix: add missing mediaFilters to queries --- projects/api/src/contracts/sync/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/api/src/contracts/sync/index.ts b/projects/api/src/contracts/sync/index.ts index 1f56c335..5e1d0780 100644 --- a/projects/api/src/contracts/sync/index.ts +++ b/projects/api/src/contracts/sync/index.ts @@ -35,6 +35,7 @@ import { movieProgressResponseSchema } from './schema/response/movieProgressResp import { ratingsSyncResponseSchema } from './schema/response/ratingsResponseSchema.ts'; import { removeRatingsResponseSchema } from './schema/response/removeRatingsResponseSchema.ts'; import { upNextResponseSchema } from './schema/response/upNextResponseSchema.ts'; +import { mediaFilterParamsSchema } from "../_internal/request/mediaFilterParamsSchema.ts"; const progress = builder.router({ upNext: { @@ -53,6 +54,7 @@ const progress = builder.router({ method: 'GET', path: '/progress/up_next_nitro', query: pageQuerySchema + .merge(mediaFilterParamsSchema) .merge(sortQuerySchema) .merge(upNextIntentQuerySchema), responses: { @@ -64,6 +66,7 @@ const progress = builder.router({ method: 'GET', path: '/playback/movies', query: extendedQuerySchemaFactory<['full', 'images', 'available_on']>() + .merge(mediaFilterParamsSchema) .merge(pageQuerySchema) .merge(progressParamsSchema), responses: { From a69d6a0594d288dcdab4243b5898f63031391c8f Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 21 May 2026 18:02:45 +0200 Subject: [PATCH 09/10] fix: add missing mediaFilters to activities --- projects/api/src/contracts/users/index.ts | 2 ++ projects/api/src/contracts/users/subroutes/history.ts | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/projects/api/src/contracts/users/index.ts b/projects/api/src/contracts/users/index.ts index 6fd21559..893f7571 100644 --- a/projects/api/src/contracts/users/index.ts +++ b/projects/api/src/contracts/users/index.ts @@ -45,6 +45,7 @@ import { requests } from './subroutes/requests.ts'; import { userLists } from './subroutes/userLists.ts'; import { watched } from './subroutes/watched.ts'; import { watchlist } from './subroutes/watchlist.ts'; +import { mediaFilterParamsSchema } from "../_internal/request/mediaFilterParamsSchema.ts"; const GLOBAL_LEVEL = builder.router({ settings: { @@ -139,6 +140,7 @@ const ENTITY_LEVEL = builder.router({ method: 'GET', pathParams: profileParamsSchema.merge(socialActivityParamsSchema), query: extendedMediaQuerySchema + .merge(mediaFilterParamsSchema) .merge(pageQuerySchema), responses: { 200: socialActivityResponseSchema.array(), diff --git a/projects/api/src/contracts/users/subroutes/history.ts b/projects/api/src/contracts/users/subroutes/history.ts index 8b79c69e..77e52504 100644 --- a/projects/api/src/contracts/users/subroutes/history.ts +++ b/projects/api/src/contracts/users/subroutes/history.ts @@ -9,6 +9,7 @@ import { activityHistoryResponseSchema } from '../schema/response/activityHistor import { episodeActivityHistoryResponseSchema } from '../schema/response/episodeActivityHistoryResponseSchema.ts'; import { movieActivityHistoryResponseSchema } from '../schema/response/movieActivityHistoryResponseSchema.ts'; import { showActivityHistoryResponseSchema } from '../schema/response/showActivityHistoryResponseSchema.ts'; +import { mediaFilterParamsSchema } from "../../_internal/request/mediaFilterParamsSchema.ts"; export const history = builder.router({ all: { @@ -27,6 +28,7 @@ export const history = builder.router({ method: 'GET', pathParams: profileParamsSchema, query: extendedMediaQuerySchema + .merge(mediaFilterParamsSchema) .merge(dateRangeParamsSchema) .merge(pageQuerySchema), responses: { @@ -38,6 +40,7 @@ export const history = builder.router({ method: 'GET', pathParams: profileParamsSchema, query: extendedMediaQuerySchema + .merge(mediaFilterParamsSchema) .merge(dateRangeParamsSchema) .merge(pageQuerySchema), responses: { @@ -49,6 +52,7 @@ export const history = builder.router({ method: 'GET', pathParams: profileParamsSchema, query: extendedMediaQuerySchema + .merge(mediaFilterParamsSchema) .merge(dateRangeParamsSchema) .merge(pageQuerySchema), responses: { From 1dbbf3aef533c6ffa2dcd842de02cf9da4bfca29 Mon Sep 17 00:00:00 2001 From: Michal Date: Sun, 24 May 2026 12:06:58 +0200 Subject: [PATCH 10/10] fix: add missing ignoreQuerySchema --- projects/api/src/contracts/calendars/index.ts | 21 ++++++++++++------- projects/api/src/contracts/lists/index.ts | 8 ++++++- projects/api/src/contracts/users/index.ts | 2 ++ .../contracts/users/subroutes/userLists.ts | 5 +++++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/projects/api/src/contracts/calendars/index.ts b/projects/api/src/contracts/calendars/index.ts index e62be86e..fc4cd22b 100644 --- a/projects/api/src/contracts/calendars/index.ts +++ b/projects/api/src/contracts/calendars/index.ts @@ -5,13 +5,15 @@ import type { z } from '../_internal/z.ts'; import { calendarRequestParamsSchema } from './schema/request/calendarParamsSchema.ts'; import { calendarMovieResponseSchema } from './schema/response/calendarMovieResponseSchema.ts'; import { calendarShowResponseSchema } from './schema/response/calendarShowListResponseSchema.ts'; +import { ignoreQuerySchema } from "../_internal/request/ignoreQuerySchema.ts"; export const calendars = builder.router({ shows: { method: 'GET', path: '/:target/shows/:start_date/:days', query: extendedMediaQuerySchema - .merge(mediaFilterParamsSchema), + .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema), pathParams: calendarRequestParamsSchema, responses: { 200: calendarShowResponseSchema.array(), @@ -21,7 +23,8 @@ export const calendars = builder.router({ method: 'GET', path: '/:target/shows/new/:start_date/:days', query: extendedMediaQuerySchema - .merge(mediaFilterParamsSchema), + .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema), pathParams: calendarRequestParamsSchema, responses: { 200: calendarShowResponseSchema.array(), @@ -31,7 +34,8 @@ export const calendars = builder.router({ method: 'GET', path: '/:target/shows/premieres/:start_date/:days', query: extendedMediaQuerySchema - .merge(mediaFilterParamsSchema), + .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema), pathParams: calendarRequestParamsSchema, responses: { 200: calendarShowResponseSchema.array(), @@ -41,7 +45,8 @@ export const calendars = builder.router({ method: 'GET', path: '/:target/shows/finales/:start_date/:days', query: extendedMediaQuerySchema - .merge(mediaFilterParamsSchema), + .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema), pathParams: calendarRequestParamsSchema, responses: { 200: calendarShowResponseSchema.array(), @@ -51,7 +56,8 @@ export const calendars = builder.router({ method: 'GET', path: '/:target/movies/:start_date/:days', query: extendedMediaQuerySchema - .merge(mediaFilterParamsSchema), + .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema), pathParams: calendarRequestParamsSchema, responses: { 200: calendarMovieResponseSchema.array(), @@ -61,13 +67,14 @@ export const calendars = builder.router({ method: 'GET', path: '/:target/dvd/:start_date/:days', query: extendedMediaQuerySchema - .merge(mediaFilterParamsSchema), + .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema), pathParams: calendarRequestParamsSchema, responses: { 200: calendarMovieResponseSchema.array(), }, }, -}, { pathPrefix: '/calendars' }); +}, {pathPrefix: '/calendars'}); export { calendarRequestParamsSchema }; export type CalendarParams = z.infer; diff --git a/projects/api/src/contracts/lists/index.ts b/projects/api/src/contracts/lists/index.ts index ec1e55af..50315598 100644 --- a/projects/api/src/contracts/lists/index.ts +++ b/projects/api/src/contracts/lists/index.ts @@ -18,6 +18,7 @@ import { listResponseSchema } from '../_internal/response/listResponseSchema.ts' import { z } from '../_internal/z.ts'; import { listReportRequestSchema } from './schema/listReportRequestSchema.ts'; import { prominentListResponseSchema } from './schema/prominentListResponseSchema.ts'; +import { ignoreQuerySchema } from "../_internal/request/ignoreQuerySchema.ts"; const ENTITY_LEVEL = builder.router({ summary: { @@ -25,7 +26,8 @@ const ENTITY_LEVEL = builder.router({ method: 'GET', pathParams: idParamsSchema, query: extendedProfileQuerySchema - .merge(mediaFilterParamsSchema), + .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema), responses: { 200: listResponseSchema, }, @@ -38,6 +40,7 @@ const ENTITY_LEVEL = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: { @@ -51,6 +54,7 @@ const ENTITY_LEVEL = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: { @@ -64,6 +68,7 @@ const ENTITY_LEVEL = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: { @@ -77,6 +82,7 @@ const ENTITY_LEVEL = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: { diff --git a/projects/api/src/contracts/users/index.ts b/projects/api/src/contracts/users/index.ts index 893f7571..959f3302 100644 --- a/projects/api/src/contracts/users/index.ts +++ b/projects/api/src/contracts/users/index.ts @@ -46,6 +46,7 @@ import { userLists } from './subroutes/userLists.ts'; import { watched } from './subroutes/watched.ts'; import { watchlist } from './subroutes/watchlist.ts'; import { mediaFilterParamsSchema } from "../_internal/request/mediaFilterParamsSchema.ts"; +import { ignoreQuerySchema } from "../_internal/request/ignoreQuerySchema.ts"; const GLOBAL_LEVEL = builder.router({ settings: { @@ -141,6 +142,7 @@ const ENTITY_LEVEL = builder.router({ pathParams: profileParamsSchema.merge(socialActivityParamsSchema), query: extendedMediaQuerySchema .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema), responses: { 200: socialActivityResponseSchema.array(), diff --git a/projects/api/src/contracts/users/subroutes/userLists.ts b/projects/api/src/contracts/users/subroutes/userLists.ts index e3e2620d..cb6e19e7 100644 --- a/projects/api/src/contracts/users/subroutes/userLists.ts +++ b/projects/api/src/contracts/users/subroutes/userLists.ts @@ -26,6 +26,7 @@ import { profileParamsSchema } from '../schema/request/profileParamsSchema.ts'; import { reorderRequestSchema } from '../schema/request/reorderRequestSchema.ts'; import { reorderListResponseSchema } from '../schema/response/reorderListResponseSchema.ts'; import { reorderListsResponseSchema } from '../schema/response/reorderListsResponseSchema.ts'; +import { ignoreQuerySchema } from "../../_internal/request/ignoreQuerySchema.ts"; const list = builder.router({ summary: { @@ -63,6 +64,7 @@ const list = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: { @@ -76,6 +78,7 @@ const list = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: { @@ -90,6 +93,7 @@ const list = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: { @@ -104,6 +108,7 @@ const list = builder.router({ query: extendedMediaQuerySchema .merge(sortQuerySchema) .merge(mediaFilterParamsSchema) + .merge(ignoreQuerySchema) .merge(pageQuerySchema) .merge(limitlessQuerySchema), responses: {