Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion projects/api/deno.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@trakt/api",
"exports": "./src/index.ts",
"version": "0.3.10",
"version": "0.4.0",
"imports": {
"@anatine/zod-openapi": "npm:@anatine/zod-openapi@^2.2.6",
"@std/testing": "jsr:@std/testing@^1.0.5",
Expand Down
18 changes: 6 additions & 12 deletions projects/api/src/contracts/checkin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,15 @@ import { movieCheckinResponseSchema } from './schema/response/movieCheckinRespon
import { showCheckinResponseSchema } from './schema/response/showCheckinResponseSchema.ts';

export const checkin = builder.router({
show: {
start: {
method: 'POST',
path: '',
body: showCheckinRequestSchema,
body: z.union([
showCheckinRequestSchema,
movieCheckinRequestSchema,
]),
responses: {
200: showCheckinResponseSchema,
409: checkin409ErrorResponse,
},
},
movie: {
method: 'POST',
path: '',
body: movieCheckinRequestSchema,
responses: {
200: movieCheckinResponseSchema,
200: z.union([showCheckinResponseSchema, movieCheckinResponseSchema]),
409: checkin409ErrorResponse,
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export const movieCheckinRequestSchema = z.object({
title: z.string().nullish(),
year: z.number().int().nullish(),
ids: movieIdsRequestSchema,
}),
}).nullish(),
sharing: sharingRequestSchema,
message: z.string().nullish(),
});
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ const showAbsoluteCheckinRequestSchema = z.object({
title: z.string().nullish(),
year: z.number().int().nullish(),
ids: showIdsRequestSchema,
}),
episode: z.object({ number_abs: z.number().int() }),
}).nullish(),
episode: z.object({ number_abs: z.number().int() }).nullish(),
sharing: sharingRequestSchema,
message: z.string().nullish(),
});

const episodeCheckinRequestSchema = z.object({
episode: z.object({ ids: showIdsRequestSchema }),
episode: z.object({ ids: showIdsRequestSchema }).nullish(),
sharing: sharingRequestSchema,
message: z.string().nullish(),
});
Expand All @@ -24,8 +24,9 @@ const episodeWithShowCheckinRequestSchema = z.object({
title: z.string().nullish(),
year: z.number().int().nullish(),
ids: showIdsRequestSchema,
}),
episode: z.object({ season: z.number().int(), number: z.number().int() }),
}).nullish(),
episode: z.object({ season: z.number().int(), number: z.number().int() })
.nullish(),
sharing: sharingRequestSchema,
message: z.string().nullish(),
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ export const movieCheckinResponseSchema = z.object({
title: z.string(),
year: z.number().int(),
ids: movieIdsResponseSchema,
}),
}).nullish(),
});
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ export const showCheckinResponseSchema = z.object({
number: z.number().int(),
title: z.string(),
ids: episodeIdsResponseSchema,
}),
}).nullish(),
show: z.object({
title: z.string(),
year: z.number().int(),
ids: showIdsResponseSchema,
}),
}).nullish(),
});
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { typedEpisodeResponseSchema } from '../../../_internal/response/episodeResponseSchema.ts';
import { typedMovieResponseSchema } from '../../../_internal/response/movieResponseSchema.ts';
import { episodeResponseSchema } from '../../../_internal/response/episodeResponseSchema.ts';
import { movieResponseSchema } from '../../../_internal/response/movieResponseSchema.ts';
import {
typedShowResponseSchema,
showResponseSchema,
} from '../../../_internal/response/showResponseSchema.ts';
import { z } from '../../../_internal/z.ts';
import { availableOnEnumSchema } from '../request/availableOnEnumSchema.ts';
Expand All @@ -20,10 +20,17 @@ const collectedItemSchema = z.object({
updated_at: z.string().datetime(),
}).merge(availableOnSchema);

export const collectedMovieSchema = typedMovieResponseSchema
export const collectedMovieSchema = z.object({
type: z.literal('movie'),
movie: movieResponseSchema.nullish(),
})
.merge(collectedItemSchema);

export const collectedEpisodeSchema = typedEpisodeResponseSchema
export const collectedEpisodeSchema = z.object({
type: z.literal('episode'),
episode: episodeResponseSchema.nullish(),
show: showResponseSchema.nullish(),
})
.merge(collectedItemSchema);

const collectedSeasonEpisodeSchema = z.object({
Expand All @@ -37,11 +44,14 @@ const collectedSeasonResponseSchema = z.object({
});

export const collectedShowSchema = z.object({
last_collected_at: z.string().datetime(),
last_updated_at: z.string().datetime(),
seasons: collectedSeasonResponseSchema.array(),
last_collected_at: z.string().datetime().nullish(),
last_updated_at: z.string().datetime().nullish(),
seasons: collectedSeasonResponseSchema.array().nullish(),
})
.merge(typedShowResponseSchema);
.merge(z.object({
type: z.literal('show'),
show: showResponseSchema.nullish(),
}));

export const collectionResponseSchema = z.union([
collectedMovieSchema,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ export const likedListResponseSchema = z.object({
/***
* When using extended 'min', only the id is returned
*/
list: listResponseSchema.partial()
.extend({ id: z.number().int() }),
list: z.union([
listResponseSchema.partial(),
z.object({ id: z.number().int().nullish() }),
]),
});
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { typedEpisodeResponseSchema } from '../../../_internal/response/episodeResponseSchema.ts';
import { typedMovieResponseSchema } from '../../../_internal/response/movieResponseSchema.ts';
import { episodeResponseSchema } from '../../../_internal/response/episodeResponseSchema.ts';
import { movieResponseSchema } from '../../../_internal/response/movieResponseSchema.ts';
import { showResponseSchema } from '../../../_internal/response/showResponseSchema.ts';
import { asString, z } from '../../../_internal/z.ts';

const commonWatchingResponseSchema = z.object({
Expand All @@ -9,12 +10,19 @@ const commonWatchingResponseSchema = z.object({
});

const movieWatchingResponseSchema = commonWatchingResponseSchema
.merge(typedMovieResponseSchema);
.merge(z.object({
type: z.literal('movie'),
movie: movieResponseSchema.nullish(),
}));

const episodeWatchingResponseSchema = commonWatchingResponseSchema
.merge(typedEpisodeResponseSchema);
.merge(z.object({
type: z.literal('episode'),
episode: episodeResponseSchema.nullish(),
show: showResponseSchema.nullish(),
}));

export const watchingResponseSchema = z.discriminatedUnion('type', [
export const watchingResponseSchema = z.union([
movieWatchingResponseSchema,
episodeWatchingResponseSchema,
]);
Loading