aboutsummaryrefslogtreecommitdiffstats
path: root/backend/ts/api/login.ts
blob: d5393ef6d335456c63778be60d9d707d3175362c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { Request, Response } from "express";
import { makeQuery, fiaTable, dbRes, dbResToFiaTable, Color, Colors } from "../../../helpers/helpers";

// export default async function apiLogin(req: Request, res: Response) {
export default async function (req: Request, res: Response) {
  if (req.session === undefined) {
    res.send(/* html */ `<script>alert("Something went wrong, try to reload the page")</script>`);
    return;
  }
  req.session.uid = req.session.id;
  req.session.name = req.body.name;

  let dbRes = (await makeQuery("SELECT * FROM `fia` WHERE `started`= 0 LIMIT 1", [])) as Array<dbRes>,
    row: fiaTable;
  if (dbRes.length === 0) {
    row = {} as fiaTable;
    row.data = [{ id: req.session.uid, color: Color.blue, name: req.body.name }];
    req.session.color = Color.blue;

    await makeQuery('INSERT INTO `fia`(`data`, `started`) VALUES (?, ?)', [JSON.stringify(row.data), 0]);
    req.session.gid = (await makeQuery('SELECT `id` FROM `fia` WHERE `data`=?', [JSON.stringify(row.data)]) as any)[0].id;
  } else {
    row = dbResToFiaTable(dbRes[0]);
    let color = Color[row.data.length as keyof Colors];
    row.data.push({
      id: req.session.uid,
      color: Color.blue,
      name: req.body.name
    });

    req.session.gid = row.id;
    req.session.color = color;
    makeQuery('UPDATE `fia` SET `data`=? WHERE `id`=?', [JSON.stringify(row.data), row.id]);

    if (row.data.length === 4) {
      makeQuery("UPDATE `fia` SET `started` = 1 WHERE `id`=?", [row.id]);
      // TODO: Start game from backend
    }
  }
  makeQuery("UPDATE `fia` SET `playersCount`=`playersCount`+1 WHERE `id`=?", [req.session.gid]);
  res.send(JSON.stringify(row.data));
}