small fixups
This commit is contained in:
parent
bbf3870a85
commit
ac506795c6
4 changed files with 23 additions and 40 deletions
|
|
@ -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));
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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 (
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue