import express from "express"; import {GameRepository} from "./repositories/GameRepository.js"; import {GamePgPromiseRepository} from "./repositories/pgPromise/GamePgPromiseRepository.js"; import {Game} from "./model/Game.js"; import {body, validationResult} from "express-validator"; import {TIME_VALIDATION_REGEX, userWithIdExists} from "./validators.js"; export const gameRoute = express.Router() gameRoute.use(express.json()) gameRoute.post( '/add', body('playtime') .matches(TIME_VALIDATION_REGEX), body('date') .isDate(), body('userId') .isInt({min: 1}) .custom(userWithIdExists), /** * After processing the errors of express-validator, inserts the game into the DB * @param req * body { * playtime: string, * date: Date, * userId: int * } * @param res json: Game */ async (req, res) => { try { //region validate parameters const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } //endregion let game: Game = req.body; const gameRepo: GameRepository = new GamePgPromiseRepository; const inserted: Game = await gameRepo.insert(game); res.send(inserted); } catch (error) { // handle errors console.log(error) res.status(500).json({ errors: [{msg: "Internal server error"}]}) } })