Add user-specific quiz statistics
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
export class Game {
|
||||
constructor (id, questions, created, player1id, player1name, player1answers, player2id, player2name, player2answers) {
|
||||
this.id = id
|
||||
this.questions = questions
|
||||
this.questionIds = questions
|
||||
this.created = created
|
||||
this.player1id = player1id
|
||||
this.player1name = player1name
|
||||
@@ -10,13 +10,38 @@ export class Game {
|
||||
this.player2name = player2name
|
||||
this.player2answers = player2answers
|
||||
}
|
||||
|
||||
getResult () {
|
||||
if (!this.questions) return {}
|
||||
const qs = this.questions
|
||||
|
||||
function countCorrectAnswers(answersGiven) {
|
||||
let i = 0
|
||||
answersGiven.forEach(a => {
|
||||
const q = qs.find(e => e.id === a.frage)
|
||||
if (q && a.antwort === q.correctAnswer) i++
|
||||
})
|
||||
return i
|
||||
}
|
||||
|
||||
const correctAnswersPl1 = countCorrectAnswers(this.player1answers)
|
||||
const correctAnswersPl2 = countCorrectAnswers(this.player2answers)
|
||||
|
||||
return {
|
||||
winner: correctAnswersPl1 > correctAnswersPl2 ? 1 : 2,
|
||||
loser: correctAnswersPl1 > correctAnswersPl2 ? 2 : 1,
|
||||
tie: correctAnswersPl1 === correctAnswersPl2,
|
||||
correctAnswersPl1,
|
||||
correctAnswersPl2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Firestore data converter
|
||||
export const GameConverter = {
|
||||
toFirestore: (game) => {
|
||||
return {
|
||||
fragen: game.questions,
|
||||
fragen: game.questionIds,
|
||||
erstellt: game.created,
|
||||
spieler1id: game.player1id,
|
||||
spieler1name: game.player1name,
|
||||
|
||||
@@ -1,20 +1,48 @@
|
||||
export class User {
|
||||
constructor (displayName, courses, gamesStarted) {
|
||||
constructor (displayName, courses, games, gamesStarted) {
|
||||
this.displayName = displayName
|
||||
this.courses = courses
|
||||
this.games = {}
|
||||
this.gamesStarted = []
|
||||
|
||||
if (games) this.setGames(games)
|
||||
|
||||
if (gamesStarted && gamesStarted.length > 0) {
|
||||
gamesStarted.forEach(e => {
|
||||
this.gamesStarted.push({ course: e.kurs, game: e.spiel })
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
setGames (gamesObj) {
|
||||
for (const [key, value] of Object.entries(gamesObj)) {
|
||||
const obj = {
|
||||
won: value.gewonnen || 0,
|
||||
lost: value.verloren || 0,
|
||||
tie: value.unentschieden || 0,
|
||||
questionsCorrect: value.fragenRichtig || 0,
|
||||
questionsIncorrect: value.fragenFalsch || 0
|
||||
}
|
||||
this.games[key] = obj
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Firestore data converter
|
||||
export const UserConverter = {
|
||||
toFirestore: (user) => {
|
||||
const spiele = {}
|
||||
for (const [key, value] of Object.entries(user.games)) {
|
||||
const obj = {
|
||||
gewonnen: value.won || 0,
|
||||
verloren: value.lost || 0,
|
||||
unentschieden: value.tie || 0,
|
||||
fragenRichtig: value.questionsCorrect || 0,
|
||||
fragenFalsch: value.questionsIncorrect || 0
|
||||
}
|
||||
spiele[key] = obj
|
||||
}
|
||||
|
||||
const spieleBegonnen = []
|
||||
user.gamesStarted.forEach(e => {
|
||||
spieleBegonnen.push({ kurs: e.course, spiel: e.game })
|
||||
@@ -23,11 +51,12 @@ export const UserConverter = {
|
||||
return {
|
||||
anzeigename: user.displayName,
|
||||
kurse: user.courses,
|
||||
spiele,
|
||||
spieleBegonnen
|
||||
}
|
||||
},
|
||||
fromFirestore: (snapshot, options) => {
|
||||
const data = snapshot.data(options)
|
||||
return new User(data.anzeigename, data.kurse, data.spieleBegonnen)
|
||||
return new User(data.anzeigename, data.kurse, data.spiele, data.spieleBegonnen)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user