98 lines
3.1 KiB
TypeScript
98 lines
3.1 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
||
import { auth } from "@clerk/nextjs/server";
|
||
import { revalidateTag } from "next/cache";
|
||
import { prisma } from "@/lib/prisma";
|
||
import { deleteS3Object } from "@/lib/s3";
|
||
|
||
export async function DELETE(req: NextRequest) {
|
||
const { userId } = await auth();
|
||
if (!userId) {
|
||
return NextResponse.json({ error: "Неавторизирано" }, { status: 401 });
|
||
}
|
||
|
||
try {
|
||
const user = await prisma.user.findUnique({
|
||
where: { clerkId: userId },
|
||
include: { images: true },
|
||
});
|
||
|
||
if (!user) {
|
||
return NextResponse.json({ error: "Споменот не е пронајден" }, { status: 404 });
|
||
}
|
||
|
||
await Promise.all(
|
||
user.images.map((image) =>
|
||
deleteS3Object(image.key).catch((e) =>
|
||
console.error("Не успеа бришењето на S3 објект:", image.key, e)
|
||
)
|
||
)
|
||
);
|
||
|
||
await prisma.user.delete({ where: { id: user.id } });
|
||
|
||
revalidateTag("memorial");
|
||
revalidateTag(`memorial-${user.subdomain}`);
|
||
|
||
return NextResponse.json({ success: true });
|
||
} catch (error) {
|
||
console.error("Delete monument error:", error);
|
||
return NextResponse.json({ error: "Не успеа бришењето на споменот" }, { status: 500 });
|
||
}
|
||
}
|
||
|
||
export async function GET() {
|
||
const { userId } = await auth();
|
||
if (!userId) {
|
||
return NextResponse.json({ error: "Неавторизирано" }, { status: 401 });
|
||
}
|
||
|
||
const user = await prisma.user.findUnique({
|
||
where: { clerkId: userId },
|
||
include: { images: { orderBy: { order: "asc" } } },
|
||
});
|
||
|
||
if (!user) {
|
||
return NextResponse.json({ error: "Споменот не е пронајден" }, { status: 404 });
|
||
}
|
||
|
||
return NextResponse.json({ user });
|
||
}
|
||
|
||
export async function PUT(req: NextRequest) {
|
||
const { userId } = await auth();
|
||
if (!userId) {
|
||
return NextResponse.json({ error: "Неавторизирано" }, { status: 401 });
|
||
}
|
||
|
||
try {
|
||
const body = await req.json();
|
||
const { title, description, bornDate, passedDate, templateId, published } = body;
|
||
|
||
const existingUser = await prisma.user.findUnique({ where: { clerkId: userId } });
|
||
const oldSubdomain = existingUser?.subdomain;
|
||
|
||
const user = await prisma.user.update({
|
||
where: { clerkId: userId },
|
||
data: {
|
||
...(title !== undefined && { title }),
|
||
...(description !== undefined && { description }),
|
||
...(bornDate !== undefined && { bornDate }),
|
||
...(passedDate !== undefined && { passedDate }),
|
||
...(templateId !== undefined && { templateId }),
|
||
...(published !== undefined && { published }),
|
||
},
|
||
include: { images: { orderBy: { order: "asc" } } },
|
||
});
|
||
|
||
revalidateTag("memorial");
|
||
revalidateTag(`memorial-${user.subdomain}`);
|
||
if (oldSubdomain && oldSubdomain !== user.subdomain) {
|
||
revalidateTag(`memorial-${oldSubdomain}`);
|
||
}
|
||
|
||
return NextResponse.json({ user });
|
||
} catch (error) {
|
||
console.error("Update error:", error);
|
||
return NextResponse.json({ error: "Не успеа ажурирањето на споменот" }, { status: 500 });
|
||
}
|
||
} |