mirror of
https://github.com/soconnor0919/hristudio.git
synced 2025-12-11 22:54:45 -05:00
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { db } from "~/server/db";
|
|
import { informedConsentForms, contents } from "~/server/db/schema";
|
|
import { auth } from "@clerk/nextjs/server";
|
|
import { eq } from "drizzle-orm";
|
|
import fs from 'fs/promises';
|
|
import path from 'path';
|
|
|
|
export async function DELETE(
|
|
request: Request,
|
|
{ params }: { params: { id: string } }
|
|
) {
|
|
const { userId } = auth();
|
|
if (!userId) {
|
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
}
|
|
|
|
const id = parseInt(params.id);
|
|
if (isNaN(id)) {
|
|
return NextResponse.json({ error: 'Invalid ID' }, { status: 400 });
|
|
}
|
|
|
|
try {
|
|
// First, get the content associated with this form
|
|
const [form] = await db
|
|
.select({
|
|
contentId: informedConsentForms.contentId,
|
|
location: contents.location,
|
|
previewLocation: contents.previewLocation,
|
|
})
|
|
.from(informedConsentForms)
|
|
.innerJoin(contents, eq(informedConsentForms.contentId, contents.id))
|
|
.where(eq(informedConsentForms.id, id));
|
|
|
|
if (!form) {
|
|
return NextResponse.json({ error: 'Form not found' }, { status: 404 });
|
|
}
|
|
|
|
// Delete the file and preview from the file system
|
|
const fullPath = path.join(process.cwd(), form.location ?? '');
|
|
const previewPath = path.join(process.cwd(), form.previewLocation ?? '');
|
|
try {
|
|
await fs.access(fullPath);
|
|
await fs.unlink(fullPath);
|
|
} catch (error) {
|
|
console.warn(`File not found or couldn't be deleted: ${fullPath}`);
|
|
}
|
|
try {
|
|
await fs.access(previewPath);
|
|
await fs.unlink(previewPath);
|
|
} catch (error) {
|
|
console.warn(`Preview file not found or couldn't be deleted: ${previewPath}`);
|
|
}
|
|
|
|
// Delete the form and content from the database
|
|
await db.transaction(async (tx) => {
|
|
await tx.delete(informedConsentForms).where(eq(informedConsentForms.id, id));
|
|
await tx.delete(contents).where(eq(contents.id, form.contentId));
|
|
});
|
|
|
|
return NextResponse.json({ message: "Form and preview deleted successfully" });
|
|
} catch (error) {
|
|
console.error('Error deleting form:', error);
|
|
return NextResponse.json({ error: 'Failed to delete form' }, { status: 500 });
|
|
}
|
|
} |