From 01c96babd4b36b7f7c12bf6f8bed8f22554d6c98 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Sun, 5 Nov 2023 15:13:09 +0000 Subject: [PATCH] Add season number and episode number to progressitem --- src/db/migrations/.snapshot-movie_web.json | 18 +++++++++++++ src/db/migrations/Migration20231105150807.ts | 14 ++++++++++ src/db/models/ProgressItem.ts | 28 ++++++++++++++++---- src/routes/users/progress.ts | 9 +++++-- 4 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 src/db/migrations/Migration20231105150807.ts diff --git a/src/db/migrations/.snapshot-movie_web.json b/src/db/migrations/.snapshot-movie_web.json index 45a00cb..7cbd87f 100644 --- a/src/db/migrations/.snapshot-movie_web.json +++ b/src/db/migrations/.snapshot-movie_web.json @@ -184,6 +184,24 @@ "nullable": true, "mappedType": "string" }, + "season_number": { + "name": "season_number", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "mappedType": "integer" + }, + "episode_number": { + "name": "episode_number", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "mappedType": "integer" + }, "meta": { "name": "meta", "type": "jsonb", diff --git a/src/db/migrations/Migration20231105150807.ts b/src/db/migrations/Migration20231105150807.ts new file mode 100644 index 0000000..68d4c7c --- /dev/null +++ b/src/db/migrations/Migration20231105150807.ts @@ -0,0 +1,14 @@ +import { Migration } from '@mikro-orm/migrations'; + +export class Migration20231105150807 extends Migration { + async up(): Promise { + this.addSql( + 'alter table "progress_items" add column "season_number" int null, add column "episode_number" int null;', + ); + } + + async down(): Promise { + this.addSql('alter table "progress_items" drop column "season_number";'); + this.addSql('alter table "progress_items" drop column "episode_number";'); + } +} diff --git a/src/db/models/ProgressItem.ts b/src/db/models/ProgressItem.ts index 06f12ae..aad2070 100644 --- a/src/db/models/ProgressItem.ts +++ b/src/db/models/ProgressItem.ts @@ -6,7 +6,7 @@ export const progressMetaSchema = z.object({ title: z.string(), year: z.number(), poster: z.string().optional(), - type: z.string(), + type: z.union([z.literal('show'), z.literal('movie')]), }); export type ProgressMeta = z.infer; @@ -29,6 +29,12 @@ export class ProgressItem { @Property({ name: 'episode_id', nullable: true }) episodeId?: string; + @Property({ name: 'season_number', nullable: true }) + seasonNumber?: number; + + @Property({ name: 'episode_number', nullable: true }) + episodeNumber?: number; + @Property({ name: 'meta', type: types.json, @@ -48,8 +54,14 @@ export class ProgressItem { export interface ProgressItemDTO { tmdbId: string; - seasonId?: string; - episodeId?: string; + season: { + id?: string; + number?: number; + }; + episode: { + id?: string; + number?: number; + }; meta: { title: string; year: number; @@ -66,8 +78,14 @@ export function formatProgressItem( ): ProgressItemDTO { return { tmdbId: progressItem.tmdbId, - seasonId: progressItem.seasonId, - episodeId: progressItem.episodeId, + episode: { + id: progressItem.episodeId, + number: progressItem.episodeNumber, + }, + season: { + id: progressItem.seasonId, + number: progressItem.seasonNumber, + }, meta: { title: progressItem.meta.title, year: progressItem.meta.year, diff --git a/src/routes/users/progress.ts b/src/routes/users/progress.ts index 3ad6e1b..37f5797 100644 --- a/src/routes/users/progress.ts +++ b/src/routes/users/progress.ts @@ -19,10 +19,12 @@ export const userProgressRouter = makeRouter((app) => { }), body: z.object({ meta: progressMetaSchema, - seasonId: z.string().optional(), - episodeId: z.string().optional(), duration: z.number(), watched: z.number(), + seasonId: z.string().optional(), + episodeId: z.string().optional(), + seasonNumber: z.number().optional(), + episodeNumber: z.number().optional(), }), }, }, @@ -38,12 +40,15 @@ export const userProgressRouter = makeRouter((app) => { episodeId: body.episodeId, seasonId: body.seasonId, }); + if (!progressItem) { progressItem = new ProgressItem(); progressItem.tmdbId = params.tmdbid; progressItem.userId = params.uid; progressItem.episodeId = body.episodeId; progressItem.seasonId = body.seasonId; + progressItem.episodeNumber = body.episodeNumber; + progressItem.seasonNumber = body.seasonNumber; } em.assign(progressItem, {