small fixups

This commit is contained in:
Daniel Bulant 2026-05-27 21:23:06 +02:00
parent bbf3870a85
commit ac506795c6
No known key found for this signature in database
4 changed files with 23 additions and 40 deletions

View file

@ -30,6 +30,14 @@ export async function updatePartyData(
status: status ?? partyObject.status,
data,
};
await db
.update(party)
.set({
data,
...(status ? { status } : {}),
lastUpdated: new Date(),
})
.where(eq(party.id, id));
pubsub.publishPartyData(id, {
type: "party_status",
@ -54,12 +62,4 @@ export async function updatePartyData(
);
void publishDeviceEventForUser(member.userId, event);
}
await db
.update(party)
.set({
data,
...(status ? { status } : {}),
lastUpdated: new Date(),
})
.where(eq(party.id, id));
}

View file

@ -4,7 +4,7 @@ import { betterAuthElysia } from "../auth";
import { db } from "../db";
import { getMemberRecord, getPartyStatus } from "../party-data";
import type { PartySocketEvent, QuizState } from "../party-types";
import type { PartySocketEvent } from "../party-types";
export function userTopic(userId: string) {
return `user:${userId}`;
@ -63,31 +63,6 @@ async function subscribeWsToParty(
return nextPartyId;
}
export async function broadcastQuizState(
ws: { publish: (topic: string, message: string) => void },
partyId: string,
) {
const partyRecord = await db.query.party.findFirst({
where: { id: partyId },
});
if (!partyRecord) return;
const quizData = ((partyRecord.data ?? {}) as Record<string, unknown>).quiz as
| QuizState
| undefined;
if (!quizData) return;
if (!quizData) return;
ws.publish(
partyTopic(partyId),
JSON.stringify({
type: "quiz_state",
quiz: quizData,
}),
);
}
export const topic = {
user: userTopic,
party: partyTopic,
@ -118,8 +93,6 @@ export const partySocketApp = new Elysia()
);
return;
}
await broadcastQuizState(ws, subscribedPartyId);
},
message: async (ws, message) => {
const data = ws.data;

View file

@ -55,6 +55,11 @@ export function Question() {
const [isSubmitting, setIsSubmitting] = useState(false);
const question = party?.data?.currentQuestion;
const questionStartTimestamp = question?.startTimestamp ?? null;
const questionResetKey = question
? `${party?.data?.questionIndex ?? 0}:${question.startTimestamp}`
: null;
const numericInitialValue =
question?.type === "numeric" ? question.range.min : null;
const questionAnnouncement = question
? getQuestionAnnouncement(question)
: null;
@ -68,10 +73,10 @@ export function Question() {
}, []);
useEffect(() => {
if (!question) return;
if (!questionResetKey) return;
setSelected(null);
setSelectedValue(question.type === "numeric" ? question.range.min : null);
}, [question]);
setSelectedValue(numericInitialValue);
}, [questionResetKey, numericInitialValue]);
useEffect(() => {
if (

View file

@ -50,7 +50,12 @@ export function usePartySocket({
};
ws.onmessage = (event) => {
const parsed = JSON.parse(event.data) as PartySocketEvent;
let parsed: PartySocketEvent;
try {
parsed = JSON.parse(event.data) as PartySocketEvent;
} catch {
return;
}
handlerRef.current?.(parsed);
};