From 9e3959b2fc5c25c407e72375d8c0557dedb8e4fd Mon Sep 17 00:00:00 2001 From: FifthWit Date: Tue, 22 Apr 2025 16:03:12 -0500 Subject: [PATCH] Fixed up the lists, looking much nicer and it should be perfectly ready --- .../migration.sql | 2 ++ prisma/schema.prisma | 1 + server/routes/users/[id]/lists/index.patch.ts | 13 ++++++++++--- server/routes/users/[id]/lists/index.post.ts | 5 ++++- 4 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 prisma/migrations/20250422205521_added_type_lists_field/migration.sql diff --git a/prisma/migrations/20250422205521_added_type_lists_field/migration.sql b/prisma/migrations/20250422205521_added_type_lists_field/migration.sql new file mode 100644 index 0000000..1e330d3 --- /dev/null +++ b/prisma/migrations/20250422205521_added_type_lists_field/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "list_items" ADD COLUMN "type" VARCHAR(255); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2691c0a..0cf3e15 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -95,6 +95,7 @@ model list_items { id String @id @db.Uuid @default(uuid()) list_id String @db.Uuid tmdb_id String @db.VarChar(255) + type String? @db.VarChar(255) added_at DateTime @default(now()) @db.Timestamptz(0) list lists @relation(fields: [list_id], references: [id]) diff --git a/server/routes/users/[id]/lists/index.patch.ts b/server/routes/users/[id]/lists/index.patch.ts index e5c9407..1775ff2 100644 --- a/server/routes/users/[id]/lists/index.patch.ts +++ b/server/routes/users/[id]/lists/index.patch.ts @@ -4,15 +4,16 @@ import { z } from "zod"; const prisma = new PrismaClient(); -// Schema for validating the request body const listItemSchema = z.object({ tmdb_id: z.string(), + type: z.enum(["movie", "tv"]), }); const updateListSchema = z.object({ list_id: z.string().uuid(), name: z.string().min(1).max(255).optional(), description: z.string().max(255).optional().nullable(), + public: z.boolean().optional(), addItems: z.array(listItemSchema).optional(), removeItems: z.array(listItemSchema).optional(), }); @@ -51,15 +52,20 @@ export default defineEventHandler(async (event) => { } const result = await prisma.$transaction(async (tx) => { - if (validatedBody.name || validatedBody.description !== undefined) { + if ( + validatedBody.name || + validatedBody.description !== undefined || + validatedBody.public !== undefined + ) { await tx.lists.update({ where: { id: list.id }, data: { - name: validatedBody.name || list.name, + name: validatedBody.name ?? list.name, description: validatedBody.description !== undefined ? validatedBody.description : list.description, + public: validatedBody.public ?? list.public, }, }); } @@ -76,6 +82,7 @@ export default defineEventHandler(async (event) => { data: itemsToAdd.map((item) => ({ list_id: list.id, tmdb_id: item.tmdb_id, + type: item.type, })), skipDuplicates: true, }); diff --git a/server/routes/users/[id]/lists/index.post.ts b/server/routes/users/[id]/lists/index.post.ts index a3ac1b5..9f356e9 100644 --- a/server/routes/users/[id]/lists/index.post.ts +++ b/server/routes/users/[id]/lists/index.post.ts @@ -4,15 +4,16 @@ import { z } from "zod"; const prisma = new PrismaClient(); -// Schema for validating the request body const listItemSchema = z.object({ tmdb_id: z.string(), + type: z.enum(["movie", "tv"]), }); const createListSchema = z.object({ name: z.string().min(1).max(255), description: z.string().max(255).optional().nullable(), items: z.array(listItemSchema).optional(), + public: z.boolean().optional(), }); export default defineEventHandler(async (event) => { @@ -46,6 +47,7 @@ export default defineEventHandler(async (event) => { user_id: userId, name: validatedBody.name, description: validatedBody.description || null, + public: validatedBody.public || false, }, }); @@ -54,6 +56,7 @@ export default defineEventHandler(async (event) => { data: validatedBody.items.map((item) => ({ list_id: newList.id, tmdb_id: item.tmdb_id, + type: item.type, // Type is mapped here })), skipDuplicates: true, });