Clean codebase- start from scratch

This commit is contained in:
2024-11-19 22:14:54 -05:00
parent 9d9aa52285
commit b4a05e0bcd
97 changed files with 6376 additions and 3624 deletions

View File

@@ -1,50 +1,52 @@
import { db } from "~/server/db";
import { participants, trialParticipants, trials } from "~/server/db/schema";
import { eq } from "drizzle-orm";
import { NextResponse } from "next/server";
import { eq, sql } from "drizzle-orm";
import { auth } from "@clerk/nextjs/server"; // Import auth to get userId
import { anonymizeParticipants } from "~/lib/permissions"; // Import the anonymize function
import { auth } from "@clerk/nextjs/server";
import { db } from "~/db";
import { participants } from "~/db/schema";
export async function GET(request: Request) {
const { userId } = auth(); // Get the userId from auth
try {
const { searchParams } = new URL(request.url);
const studyId = searchParams.get('studyId');
if (!studyId) {
return NextResponse.json({ error: 'Study ID is required' }, { status: 400 });
const { userId } = await auth();
if (!userId) {
return new NextResponse("Unauthorized", { status: 401 });
}
const participantsWithLatestTrial = await db
.select({
id: participants.id,
name: participants.name,
studyId: participants.studyId,
createdAt: participants.createdAt,
latestTrialTimestamp: sql<Date | null>`MAX(${trials.createdAt})`.as('latestTrialTimestamp')
})
.from(participants)
.leftJoin(trialParticipants, eq(participants.id, trialParticipants.participantId))
.leftJoin(trials, eq(trialParticipants.trialId, trials.id))
.where(eq(participants.studyId, parseInt(studyId)))
.groupBy(participants.id)
.orderBy(sql`COALESCE(MAX(${trials.createdAt}), ${participants.createdAt}) DESC`);
const url = new URL(request.url);
const studyId = url.searchParams.get("studyId");
// Anonymize participant names
const anonymizedParticipants = anonymizeParticipants(participantsWithLatestTrial, userId);
if (!studyId) {
return new NextResponse("Study ID is required", { status: 400 });
}
return NextResponse.json(anonymizedParticipants);
} catch (error) {
console.error('Error in GET /api/participants:', error);
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
}
const participantList = await db
.select()
.from(participants)
.where(eq(participants.studyId, parseInt(studyId)));
return NextResponse.json(participantList);
}
export async function POST(request: Request) {
const { name, studyId } = await request.json();
if (!name || !studyId) {
return NextResponse.json({ error: 'Name and Study ID are required' }, { status: 400 });
}
const newParticipant = await db.insert(participants).values({ name, studyId }).returning();
return NextResponse.json(newParticipant[0]);
const { userId } = await auth();
if (!userId) {
return new NextResponse("Unauthorized", { status: 401 });
}
const { name, studyId } = await request.json();
try {
const participant = await db
.insert(participants)
.values({
name,
studyId,
})
.returning();
return NextResponse.json(participant[0]);
} catch (error) {
console.error("Error adding participant:", error);
return new NextResponse("Internal Server Error", { status: 500 });
}
}