add quiz schemas to shared types: QuizQuestion, GameState fields, WS messages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -87,6 +87,22 @@ export const bingoCardSchema = z.object({
|
||||
|
||||
export type BingoCard = z.infer<typeof bingoCardSchema>
|
||||
|
||||
// ─── Quiz ────────────────────────────────────────────────────────
|
||||
|
||||
export const quizQuestionSchema = z.object({
|
||||
index: z.number(),
|
||||
total: z.number(),
|
||||
difficulty: z.enum(["easy", "medium", "hard"]),
|
||||
text: z.string(),
|
||||
answer: z.string(),
|
||||
status: z.enum(["buzzing", "judging", "resolved"]),
|
||||
buzzerPlayerId: z.string().nullable(),
|
||||
buzzerName: z.string().nullable(),
|
||||
wasCorrect: z.boolean().nullable(),
|
||||
})
|
||||
|
||||
export type QuizQuestion = z.infer<typeof quizQuestionSchema>
|
||||
|
||||
// ─── Scoring ────────────────────────────────────────────────────────
|
||||
|
||||
export const leaderboardEntrySchema = z.object({
|
||||
@@ -95,6 +111,7 @@ export const leaderboardEntrySchema = z.object({
|
||||
juryPoints: z.number(),
|
||||
bingoPoints: z.number(),
|
||||
predictionPoints: z.number(),
|
||||
quizPoints: z.number(),
|
||||
totalPoints: z.number(),
|
||||
})
|
||||
|
||||
@@ -117,6 +134,9 @@ export const gameStateSchema = z.object({
|
||||
playerId: z.string(),
|
||||
displayName: z.string(),
|
||||
})),
|
||||
// Quiz
|
||||
currentQuizQuestion: quizQuestionSchema.nullable(),
|
||||
myQuizBuzzStatus: z.enum(["can_buzz", "already_buzzed", "excluded", "waiting"]).nullable(),
|
||||
actualResults: actualResultsSchema.nullable(),
|
||||
// Leaderboard
|
||||
leaderboard: z.array(leaderboardEntrySchema),
|
||||
|
||||
@@ -62,6 +62,23 @@ export const submitActualResultsMessage = z.object({
|
||||
last: z.string(),
|
||||
})
|
||||
|
||||
export const startQuizQuestionMessage = z.object({
|
||||
type: z.literal("start_quiz_question"),
|
||||
})
|
||||
|
||||
export const buzzMessage = z.object({
|
||||
type: z.literal("buzz"),
|
||||
})
|
||||
|
||||
export const judgeQuizAnswerMessage = z.object({
|
||||
type: z.literal("judge_quiz_answer"),
|
||||
correct: z.boolean(),
|
||||
})
|
||||
|
||||
export const skipQuizQuestionMessage = z.object({
|
||||
type: z.literal("skip_quiz_question"),
|
||||
})
|
||||
|
||||
export const clientMessage = z.discriminatedUnion("type", [
|
||||
joinRoomMessage,
|
||||
reconnectMessage,
|
||||
@@ -74,6 +91,10 @@ export const clientMessage = z.discriminatedUnion("type", [
|
||||
submitJuryVoteMessage,
|
||||
tapBingoSquareMessage,
|
||||
submitActualResultsMessage,
|
||||
startQuizQuestionMessage,
|
||||
buzzMessage,
|
||||
judgeQuizAnswerMessage,
|
||||
skipQuizQuestionMessage,
|
||||
])
|
||||
|
||||
export type ClientMessage = z.infer<typeof clientMessage>
|
||||
|
||||
Reference in New Issue
Block a user