diff --git a/backend/app/api/genre/add/route.ts b/backend/app/api/genre/add/route.ts new file mode 100644 index 0000000..e6dc934 --- /dev/null +++ b/backend/app/api/genre/add/route.ts @@ -0,0 +1,51 @@ +import prisma from '@/lib/prisma'; +import { verifySession } from '@/lib/session'; +import { ErrorResponse } from '@/lib/types'; +import { Genre } from '@prisma/client'; +import { NextRequest, NextResponse } from 'next/server'; + +type PutRequest = { + genreName: string; +}; + +type PutResponse = { + genre: Genre; +}; + +export const PUT = async ( + req: NextRequest +): Promise> => { + const { genreName }: PutRequest = await req.json(); + + const session = await verifySession(); + + if (!session.isAuth) { + return NextResponse.json({ error: 'Invalid session' }, { status: 400 }); + } + + const genre = await prisma.genre.upsert({ + where: { + value: genreName, + }, + create: { + value: genreName, + users: { + connect: { + id: session.uid, + }, + }, + }, + update: { + users: { + connect: { + id: session.uid, + }, + }, + }, + include: { + users: true, + }, + }); + + return NextResponse.json({ genre }); +}; diff --git a/backend/app/api/genre/remove/route.ts b/backend/app/api/genre/remove/route.ts new file mode 100644 index 0000000..d82c7e9 --- /dev/null +++ b/backend/app/api/genre/remove/route.ts @@ -0,0 +1,43 @@ +import prisma from '@/lib/prisma'; +import { verifySession } from '@/lib/session'; +import { ErrorResponse } from '@/lib/types'; +import { Genre } from '@prisma/client'; +import { NextRequest, NextResponse } from 'next/server'; + +type PutRequest = { + genreName: string; +}; + +type PutResponse = { + genre: Genre; +}; + +export const PUT = async ( + req: NextRequest +): Promise> => { + const { genreName }: PutRequest = await req.json(); + + const session = await verifySession(); + + if (!session.isAuth) { + return NextResponse.json({ error: 'Invalid session' }, { status: 400 }); + } + + const genre = await prisma.genre.upsert({ + where: { + value: genreName, + }, + create: { + value: genreName, + }, + update: { + users: { + disconnect: { + id: session.uid, + }, + }, + }, + }); + + return NextResponse.json({ genre }); +}; diff --git a/backend/app/api/genre/route.ts b/backend/app/api/genre/route.ts new file mode 100644 index 0000000..8b2967f --- /dev/null +++ b/backend/app/api/genre/route.ts @@ -0,0 +1,8 @@ +import prisma from '@/lib/prisma'; +import { NextResponse } from 'next/server'; + +export const GET = async () => { + const genres = await prisma.genre.findMany(); + + return NextResponse.json({ genres }); +};