overhauled structure, leaderboardRoute.ts and userRoute.ts working

This commit is contained in:
j-weissen 2022-12-28 15:39:58 +01:00
parent c2cd74ebe2
commit fff55edf79
25 changed files with 315 additions and 212 deletions

View file

@ -1,30 +1,73 @@
import express from "express";
import {Database} from "./Database.js";
import { body, param, validationResult } from 'express-validator';
import {UserScoresPgPromiseManager} from "./manager/pgPromise/UserScoresPgPromiseManager.js";
import {UserPgPromiseManager} from "./manager/pgPromise/UserPgPromiseManager.js";
import {UserManager} from "./manager/UserManager.js";
import {UserScoresManager} from "./manager/UserScoresManager.js";
import {UserScoresPgPromiseSerializer} from "./serializer/pgpromise/UserScoresPgPromiseSerializer.js";
import bodyParser from "body-parser";
import {User} from "./model/User.js";
export const userRoute = express.Router()
userRoute.use(bodyParser.json)
userRoute.post(
'/register',
body('name')
.isString()
.isLength({min: 3, max: 32})
.matches('[a-zA-Z0-9_.\\- ]*'),
async (req, res) => {
try {
//region validate parameters
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
//endregion
userRoute.get('/:username/scores', async (req, res) => {
let data = await Database.db.oneOrNone(
'SELECT * FROM user_scores INNER JOIN "user" ON user_scores.user_id = "user".id WHERE "user".name = $1;',
[req.params.username])
.catch((error) => console.log(error.message)
)
let userDataManager: UserScoresManager = new UserScoresManager(data, new UserScoresPgPromiseSerializer);
res.json(userDataManager.content);
})
const username: string = req.body.name;
const userManager: UserManager = new UserPgPromiseManager();
userRoute.post('/register', async (req, res) => {
if (req.body.name == undefined) {
res.status(400).send("'name' was not defined");
return;
// check if username already exists
if (await userManager.withNameExists(username)) {
return res.status(400).json({ errors: [{msg: `User with name '${username}' already exists.`}] })
}
// insert & return user
const inserted: User = await userManager.insert({name: username});
res.json(inserted);
} catch (error) {
// handle errors
console.log(error)
res.status(500).json({ errors: [{msg: "Internal server error"}]})
}
}
await Database.db.none(
'INSERT INTO "user" (name) VALUES ($1);', [req.body.name]
);
res.status(200).send();
})
)
userRoute.get('/:userId/scores',
param('userId').isInt({min: 1}),
async (req, res) => {
//region validate parameters
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
//endregion
const userId: number = req.params.userId;
const userManager: UserManager = new UserPgPromiseManager;
try {
// check if user with given id exists
if (!await userManager.withIdExists(userId)) {
return res.status(400).json({ errors: [{msg: `User with id ${userId} does not exist.`}] })
}
// get & return data
const userScoresManager: UserScoresManager = new UserScoresPgPromiseManager;
const userScores = await userScoresManager.getById(userId);
res.json(userScores);
} catch (error) {
// handle errors
console.log(error)
res.status(500).json({ errors: [{msg: "Internal server error"}]})
}
}
)