diff --git a/prisma/migrations/20250722170032_group_array_required/migration.sql b/prisma/migrations/20250722170032_group_array_required/migration.sql new file mode 100644 index 0000000..e2851d3 --- /dev/null +++ b/prisma/migrations/20250722170032_group_array_required/migration.sql @@ -0,0 +1,9 @@ +/* + Warnings: + + - The `group` column on the `bookmarks` table would be dropped and recreated. This will lead to data loss if there is data in the column. + +*/ +-- AlterTable +ALTER TABLE "bookmarks" DROP COLUMN "group", +ADD COLUMN "group" TEXT[]; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 1d590af..03619a6 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -13,7 +13,7 @@ model bookmarks { user_id String @db.VarChar(255) meta Json updated_at DateTime @db.Timestamptz(0) - group String? + group String[] @@id([tmdb_id, user_id]) @@unique([tmdb_id, user_id], map: "bookmarks_tmdb_id_user_id_unique") diff --git a/server/routes/users/[id]/bookmarks/[tmdbid]/index.ts b/server/routes/users/[id]/bookmarks/[tmdbid]/index.ts index d2639c4..cfa9ec9 100644 --- a/server/routes/users/[id]/bookmarks/[tmdbid]/index.ts +++ b/server/routes/users/[id]/bookmarks/[tmdbid]/index.ts @@ -9,7 +9,7 @@ const bookmarkMetaSchema = z.object({ year: z.number(), poster: z.string().optional(), type: z.enum(['movie', 'show']), - group: z.string().optional(), + group: z.union([z.string(), z.array(z.string())]).optional(), }); // Support both formats: direct fields or nested under meta @@ -45,6 +45,13 @@ export default defineEventHandler(async event => { // Validate the meta data separately const validatedMeta = bookmarkMetaSchema.parse(metaData); + // Normalize group to always be an array if present + if (validatedMeta.group) { + validatedMeta.group = Array.isArray(validatedMeta.group) + ? validatedMeta.group + : [validatedMeta.group]; + } + const bookmark = await prisma.bookmarks.create({ data: { user_id: session.user,