import { validationResult } from 'express-validator'; import { getUserByUsername } from '../../database/users.js'; import { listGames, newGame } from '../../database/games.js'; import { emptyBoard, Bag } from '../../utils/board.js'; function makePageData(user) { return { title: 'Parties', user: user, games: listGames(user.id), formdata: { name: '', username: '', }, errors: {}, }; } export function root_get(req, res) { let page = makePageData(req.session.user); page.games.forEach(g => g.data = JSON.parse(g.data)); return res.render('games', page); } function makeNewGameData(name, player1, player2) { let bag = new Bag(); return { board: emptyBoard, name: name, player1: { id: player1.id, username: player1.username, score: 0, letters: bag.pick(7), }, player2: { id: player2.id, username: player2.username, score: 0, letters: bag.pick(7), }, }; } export function root_post(req, res) { let page = makePageData(req.session.user); page.formdata = req.body; page.errors = validationResult(req).mapped(); if (Object.keys(page.errors).length === 0) { const player2 = getUserByUsername(page.formdata.username); if (player2) { const gameId = newGame(req.session.user.id, player2.id, makeNewGameData(page.formdata.name, req.session.user, player2)); if (gameId) { return res.redirect(302, `/games/${gameId}`); } else { page.errors.mismatch = 'Erreur du serveur: la création de partie a échoué'; } } else { page.errors.username = { msg: 'L\'identifiant n\'existe pas.' }; } } return res.render('games', page); }