diff --git a/app/api/notifications/add/route.ts b/app/api/notifications/add/route.ts new file mode 100644 index 0000000..b0de94d --- /dev/null +++ b/app/api/notifications/add/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; +import prisma from "@/app/prisma"; +import { z } from "zod/v4"; +import { NotificationType } from "@/prisma/generated/prisma"; + +const schema = z.object({ + name: z.string(), + type: z.string(), + config: z.string(), +}) + +export async function POST(request: NextRequest) { + try { + const body = await request.json(); + const { name, type, config } = schema.parse(body); + + const notification = await prisma.notificationProvider.create({ + data: { name, type: type as NotificationType, config, tests: {} }, + }); + + return NextResponse.json({ notification }, { status: 201 }); + } catch (error) { + if(error instanceof z.ZodError) { + return NextResponse.json({ error: error.issues[0].message }, { status: 400 }); + } + return NextResponse.json({ error: "Internal Server Error" }, { status: 500 }); + } +} \ No newline at end of file diff --git a/app/api/notifications/delete/route.ts b/app/api/notifications/delete/route.ts new file mode 100644 index 0000000..57b5078 --- /dev/null +++ b/app/api/notifications/delete/route.ts @@ -0,0 +1,25 @@ +import { NextRequest, NextResponse } from "next/server"; +import prisma from "@/app/prisma"; +import { z } from "zod/v4"; + +const schema = z.object({ + notificationId: z.number(), +}); + +export async function DELETE(request: NextRequest) { + const searchParams = request.nextUrl.searchParams; + const notificationId = schema.parse({ notificationId: searchParams.get("notificationId") }); + + try { + const notification = await prisma.notificationProvider.delete({ + where: { id: notificationId.notificationId }, + }); + + return NextResponse.json(notification); + } catch (error: any) { + if(error instanceof z.ZodError) { + return NextResponse.json({ error: error.issues[0].message }, { status: 400 }); + } + return NextResponse.json({ error: "Internal Server Error" }, { status: 500 }); + } +} \ No newline at end of file