mirror of
https://github.com/movie-web/providers-api.git
synced 2025-09-13 10:03:27 +00:00
42 lines
1.0 KiB
TypeScript
42 lines
1.0 KiB
TypeScript
import { z } from 'zod';
|
|
|
|
export const tmdbIdSchema = z.string().regex(/^\d+$/);
|
|
|
|
export const mediaSchema = z
|
|
.discriminatedUnion('type', [
|
|
z.object({
|
|
type: z.literal('movie'),
|
|
title: z.string().min(1),
|
|
releaseYear: z.coerce.number().int().gt(0),
|
|
tmdbId: tmdbIdSchema,
|
|
}),
|
|
z.object({
|
|
type: z.literal('show'),
|
|
title: z.string().min(1),
|
|
releaseYear: z.coerce.number().int().gt(0),
|
|
tmdbId: tmdbIdSchema,
|
|
episodeNumber: z.coerce.number().int(),
|
|
episodeTmdbId: tmdbIdSchema,
|
|
seasonNumber: z.coerce.number().int(),
|
|
seasonTmdbId: tmdbIdSchema,
|
|
}),
|
|
])
|
|
.transform((query) => {
|
|
if (query.type == 'movie') return query;
|
|
|
|
return {
|
|
type: query.type,
|
|
title: query.title,
|
|
releaseYear: query.releaseYear,
|
|
tmdbId: query.tmdbId,
|
|
episode: {
|
|
number: query.episodeNumber,
|
|
tmdbId: query.episodeTmdbId,
|
|
},
|
|
season: {
|
|
number: query.seasonNumber,
|
|
tmdbId: query.seasonTmdbId,
|
|
},
|
|
};
|
|
});
|