move to public repo

This commit is contained in:
Nathaniel Tampus
2023-01-03 15:47:30 +08:00
commit 17ce3cf4c4
58 changed files with 2430 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
import { db } from "..";
import { Game } from "@types";
export const activeGames: Array<Game> = [];
// todo: join user and game relationship
const create = async (game: Game) => {
try {
const res = await db.query(
`INSERT INTO "game"(pgn, white_id, black_id, winner) VALUES($1, $2, $3, $4) RETURNING *`,
[game.pgn || null, game.white?.id || null, game.black?.id || null, game.winner || null]
);
return {
id: res.rows[0].id,
pgn: res.rows[0].pgn,
white: { id: res.rows[0].white_id },
black: { id: res.rows[0].black_id },
winner: res.rows[0].winner
} as Game;
} catch (err: unknown) {
console.log(err);
return null;
}
};
const find = async (where?: string, limit = 1) => {
const query = where
? `SELECT * FROM "game"`
: {
text: `SELECT * FROM "game" WHERE $1 LIMIT $2`,
values: [where, limit]
};
try {
const res = await db.query(query);
return res.rows.map((r) => {
return {
id: r.id,
pgn: r.pgn,
white: { id: r.white_id },
black: { id: r.black_id },
winner: r.winner
} as Game;
});
} catch (err: unknown) {
console.log(err);
return null;
}
};
const update = async (id: number, data: string) => {
try {
const res = await db.query(`UPDATE "game" SET $1 WHERE id = $2 RETURNING *`, [data, id]);
return {
id: res.rows[0].id,
pgn: res.rows[0].pgn,
white: { id: res.rows[0].white_id },
black: { id: res.rows[0].black_id },
winner: res.rows[0].winner
} as Game;
} catch (err: unknown) {
console.log(err);
return null;
}
};
const remove = async (id: number) => {
try {
const res = await db.query(`DELETE FROM "game" WHERE id = $1 RETURNING *`, [id]);
return {
id: res.rows[0].id,
pgn: res.rows[0].pgn,
white: { id: res.rows[0].white_id },
black: { id: res.rows[0].black_id },
winner: res.rows[0].winner
} as Game;
} catch (err: unknown) {
console.log(err);
return null;
}
};
export const GameModel = {
create,
find,
update,
remove
};

View File

@@ -0,0 +1,87 @@
import { db } from "..";
import type { User } from "@types";
const create = async (user: User, password: string) => {
if (user.name === "Guest" || user.email === undefined) {
return null;
}
try {
const res = await db.query(
`INSERT INTO "user"(name, email, password) VALUES($1, $2, $3) RETURNING id, name, email`,
[user.name, user.email ?? null, password]
);
return res.rows[0] as User;
} catch (err: unknown) {
console.log(err);
return null;
}
};
const find = async (where?: string, limit = 1) => {
// if user is not specified, get all users
if (!where) {
try {
const res = await db.query(`SELECT id, name, email FROM "user"`);
return res.rows as Array<User>;
} catch (err: unknown) {
console.log(err);
return null;
}
}
try {
/* const res = await db.query(
`SELECT id, name, email FROM "user" WHERE ${typeof user.id === "number" ? "id" : typeof user.name === "string" ? "name" : "email" } = $1 LIMIT $2`,
[typeof user.id === "number" ? user.id : typeof user.name === "string" ? user.name : user.email, limit]
); */
const res = await db.query(`SELECT id, name, email FROM "user" WHERE $1 LIMIT $2`, [
where,
limit
]);
return res.rows as Array<User>;
} catch (err: unknown) {
console.log(err);
return null;
}
};
const update = async (id: number, data: string) => {
if (typeof id === "string" || id === 0) {
return null;
}
try {
const res = await db.query(`UPDATE "user" SET $1 WHERE id = $2 RETURNING id, name, email`, [
data,
id
]);
return res.rows[0] as User;
} catch (err: unknown) {
console.log(err);
return null;
}
};
const remove = async (id: number) => {
if (typeof id === "string" || id === 0) {
return null;
}
try {
const res = await db.query(`DELETE FROM "user" WHERE id = $1 RETURNING id, name, email`, [
id
]);
return res.rows[0] as User;
} catch (err: unknown) {
console.log(err);
return null;
}
};
export const UserModel = {
create,
find,
update,
remove
};