From 12063db819bb7714f4ca53d81e00d43f807cb81f Mon Sep 17 00:00:00 2001 From: Jorge Vargas Date: Mon, 10 Mar 2025 22:50:21 -0600 Subject: [PATCH] Simply formData parsing --- src/pages/api/album/create.ts | 10 +++++----- src/utils/form.ts | 10 ++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/pages/api/album/create.ts b/src/pages/api/album/create.ts index 1427b18..26b39f3 100644 --- a/src/pages/api/album/create.ts +++ b/src/pages/api/album/create.ts @@ -3,7 +3,7 @@ import * as s from 'superstruct' import prismaClient from 'utils/prisma-client' import { AlbumStatus } from '@prisma/client' -import { Status, slug } from 'utils/form' +import { Status, formToObject, slug } from 'utils/form' import { writeImg, getImgColor } from 'utils/img' import { handleComplete } from 'integrations/requestCat' import { CreateAlbum } from 'schemas/album' @@ -17,10 +17,10 @@ export const POST: APIRoute = async ({ request, locals }) => { let body try { const formData = await request.formData() - const data = formData.get('data') as string - const cover = formData.get('cover') - const formObject = { cover, ...JSON.parse(data) } - body = s.create(formObject, CreateAlbum) + const formObject = formToObject(formData) + const { data, ...rest } = formObject + + body = s.create({ ...JSON.parse(data), ...rest }, CreateAlbum) } catch (err) { return Status(422, (err as Error).message) } diff --git a/src/utils/form.ts b/src/utils/form.ts index 845e119..7c78464 100644 --- a/src/utils/form.ts +++ b/src/utils/form.ts @@ -2,3 +2,13 @@ import slugify from 'slugify' export const Status = (status: number, statusText?: string) => new Response(null, { status, statusText }) export const slug = (text: string) => slugify(text, { lower: true, strict: true }) + +export function formToObject(formData: FormData) { + const object: Record = {} + for (const entry of formData.entries()) { + const [key, value] = entry + object[key] = value + } + + return object +}