Add user-specific quiz statistics

This commit is contained in:
2022-11-05 18:44:42 +01:00
parent f5d0734e84
commit cc20ed870c
5 changed files with 156 additions and 12 deletions

View File

@@ -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)
}
}