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, status: status ?? partyObject.status,
data, data,
}; };
await db
.update(party)
.set({
data,
...(status ? { status } : {}),
lastUpdated: new Date(),
})
.where(eq(party.id, id));
pubsub.publishPartyData(id, { pubsub.publishPartyData(id, {
type: "party_status", type: "party_status",
@ -54,12 +62,4 @@ export async function updatePartyData(
); );
void publishDeviceEventForUser(member.userId, event); 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 { db } from "../db";
import { getMemberRecord, getPartyStatus } from "../party-data"; import { getMemberRecord, getPartyStatus } from "../party-data";
import type { PartySocketEvent, QuizState } from "../party-types"; import type { PartySocketEvent } from "../party-types";
export function userTopic(userId: string) { export function userTopic(userId: string) {
return `user:${userId}`; return `user:${userId}`;
@ -63,31 +63,6 @@ async function subscribeWsToParty(
return nextPartyId; 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 = { export const topic = {
user: userTopic, user: userTopic,
party: partyTopic, party: partyTopic,
@ -118,8 +93,6 @@ export const partySocketApp = new Elysia()
); );
return; return;
} }
await broadcastQuizState(ws, subscribedPartyId);
}, },
message: async (ws, message) => { message: async (ws, message) => {
const data = ws.data; const data = ws.data;

View file

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

View file

@ -50,7 +50,12 @@ export function usePartySocket({
}; };
ws.onmessage = (event) => { 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); handlerRef.current?.(parsed);
}; };