63 lines
1.4 KiB
TypeScript
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,
|
|
},
|
|
);
|