overhauled structure, leaderboardRoute.ts and userRoute.ts working
This commit is contained in:
parent
c2cd74ebe2
commit
fff55edf79
25 changed files with 315 additions and 212 deletions
|
|
@ -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"}]})
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue