route for fetching finished games
This commit is contained in:
@@ -1,11 +1,35 @@
|
|||||||
import type { Request, Response } from "express";
|
import type { Request, Response } from "express";
|
||||||
import { activeGames } from "../db/models/game.model.js";
|
import GameModel, { activeGames } from "../db/models/game.model.js";
|
||||||
import type { Game, User } from "@chessu/types";
|
import type { Game, User } from "@chessu/types";
|
||||||
import { nanoid } from "nanoid";
|
import { nanoid } from "nanoid";
|
||||||
|
|
||||||
export const getActivePublicGames = async (req: Request, res: Response) => {
|
export const getGames = async (req: Request, res: Response) => {
|
||||||
try {
|
try {
|
||||||
res.status(200).json(activeGames.filter((g) => !g.unlisted && !g.winner));
|
if (!req.query.id && !req.query.userid) {
|
||||||
|
// get all active games
|
||||||
|
res.status(200).json(activeGames.filter((g) => !g.unlisted && !g.winner));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.query.id) {
|
||||||
|
// get finished game by id
|
||||||
|
const game = await GameModel.findById(parseInt(req.query.id as string));
|
||||||
|
if (!game) {
|
||||||
|
res.status(404).end();
|
||||||
|
} else {
|
||||||
|
res.status(200).json(game);
|
||||||
|
}
|
||||||
|
} else if (req.query.userid) {
|
||||||
|
// get finished games by user id
|
||||||
|
const games = await GameModel.findByUserId(parseInt(req.query.userid as string));
|
||||||
|
if (!games) {
|
||||||
|
res.status(404).end();
|
||||||
|
} else {
|
||||||
|
res.status(200).json(games);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res.status(400).end();
|
||||||
|
}
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
res.status(500).end();
|
res.status(500).end();
|
||||||
|
|||||||
@@ -36,14 +36,16 @@ export const create = async (game: Game) => {
|
|||||||
export const findById = async (id: number) => {
|
export const findById = async (id: number) => {
|
||||||
try {
|
try {
|
||||||
const res = await db.query(`SELECT * FROM "game" WHERE id=$1`, [id]);
|
const res = await db.query(`SELECT * FROM "game" WHERE id=$1`, [id]);
|
||||||
return {
|
if (res.rowCount) {
|
||||||
id: res.rows[0].id,
|
return {
|
||||||
winner: res.rows[0].winner,
|
id: res.rows[0].id,
|
||||||
endReason: res.rows[0].end_reason,
|
winner: res.rows[0].winner,
|
||||||
pgn: res.rows[0].pgn,
|
endReason: res.rows[0].end_reason,
|
||||||
white: { id: res.rows[0].white_id, name: res.rows[0].white_name },
|
pgn: res.rows[0].pgn,
|
||||||
black: { id: res.rows[0].black_id, name: res.rows[0].black_name }
|
white: { id: res.rows[0].white_id, name: res.rows[0].white_name },
|
||||||
} as Game;
|
black: { id: res.rows[0].black_id, name: res.rows[0].black_name }
|
||||||
|
} as Game;
|
||||||
|
} else return null;
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import * as controller from "../controllers/games.controller.js";
|
|||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.route("/").get(controller.getActivePublicGames).post(controller.createGame);
|
router.route("/").get(controller.getGames).post(controller.createGame);
|
||||||
|
|
||||||
router.route("/:code").get(controller.getActiveGame);
|
router.route("/:code").get(controller.getActiveGame);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user