itpdp/api/src/routes/party-analysis.ts
2026-04-25 13:18:17 +02:00

63 lines
1.4 KiB
TypeScript

import Elysia from "elysia";
import { betterAuthElysia } from "../auth";
import { db } from "../db";
import { getMemberRecord } from "../party-data";
import { partyAnalysisWorkflow } from "../workflows/party-analysis";
export const partyAnalysisApp = new Elysia()
.use(betterAuthElysia)
.post(
"/party/analyze",
async ({ user, set }) => {
const membership = await getMemberRecord(db, user.id);
if (!membership) {
set.status = 400;
return { error: "You are not in a party." };
}
const currentParty = await db.query.party.findFirst({
where: {
id: membership.partyId,
},
});
if (!currentParty || currentParty.hostId !== user.id) {
set.status = 403;
return { error: "Only the host can trigger analysis." };
}
const result = await partyAnalysisWorkflow.analyzeParty(
membership.partyId,
);
return result;
},
{
auth: true,
},
)
.get(
"/party/analysis",
async ({ user, set }) => {
const membership = await getMemberRecord(db, user.id);
if (!membership) {
set.status = 404;
return { error: "Party not found." };
}
const partyRecord = await db.query.party.findFirst({
where: {
id: membership.partyId,
},
});
if (!partyRecord?.analysisData) {
set.status = 404;
return { error: "No analysis data available." };
}
return partyRecord.analysisData;
},
{
auth: true,
},
);