diff --git a/components/Challenge.vue b/components/Challenge.vue index a45c3de..c2e2bc5 100644 --- a/components/Challenge.vue +++ b/components/Challenge.vue @@ -1,13 +1,27 @@ \ No newline at end of file diff --git a/plugins/game.js b/plugins/game.js index 5af7e65..ddf4432 100644 --- a/plugins/game.js +++ b/plugins/game.js @@ -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, diff --git a/plugins/user.js b/plugins/user.js index 491a1e8..23ac350 100644 --- a/plugins/user.js +++ b/plugins/user.js @@ -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) } } \ No newline at end of file diff --git a/store/index.js b/store/index.js index 622675e..bafadd1 100644 --- a/store/index.js +++ b/store/index.js @@ -37,6 +37,9 @@ export const mutations = { setCourses (state, courses) { state.courses = courses }, + initCourse (state, courseID) { + state.user.setGames({ [courseID]: {} }) + }, addFavoriteCourse (state, courseID) { state.user.courses.push(courseID) },