Files
dead-man-switch-2.0/src/app/api/messages/[messageId]/route.ts
T

83 lines
2.2 KiB
TypeScript

import { NextResponse } from "next/server";
import { getServerSession } from "next-auth";
import { authOptions } from "@/lib/auth/options";
import { prisma } from "@/lib/prisma";
export async function PATCH(
req: Request,
{ params }: { params: Promise<{ messageId: string }> }
) {
const { messageId } = await params;
const session = await getServerSession(authOptions);
if (!session?.user?.id) {
return new NextResponse("Unauthorized", { status: 401 });
}
try {
const body = await req.json();
const { title, content, recipients, checkInterval, intervalUnit, isEncrypted } = body;
const existingMessage = await prisma.message.findUnique({
where: { id: messageId, userId: session.user.id },
});
if (!existingMessage) {
return new NextResponse("Unauthorized", { status: 401 });
}
// Delete existing recipients and recreate them for simplicity in update
await prisma.recipient.deleteMany({
where: { messageId: messageId },
});
const message = await prisma.message.update({
where: {
id: messageId,
userId: session.user.id,
},
data: {
title,
content,
checkInterval,
intervalUnit: intervalUnit || existingMessage.intervalUnit,
isEncrypted: isEncrypted || existingMessage.isEncrypted,
recipients: {
create: recipients.map((email: string) => ({ email })),
},
},
});
return NextResponse.json(message);
} catch (error) {
console.error("MESSAGE_PATCH_ERROR", error);
return new NextResponse("Internal Server Error", { status: 500 });
}
}
export async function DELETE(
req: Request,
{ params }: { params: Promise<{ messageId: string }> }
) {
const { messageId } = await params;
const session = await getServerSession(authOptions);
if (!session?.user?.id) {
return new NextResponse("Unauthorized", { status: 401 });
}
try {
const message = await prisma.message.delete({
where: {
id: messageId,
userId: session.user.id,
},
});
return NextResponse.json(message);
} catch (error) {
console.error("MESSAGE_DELETE_ERROR", error);
return new NextResponse("Internal Server Error", { status: 500 });
}
}