update db models
This commit is contained in:
@@ -107,7 +107,7 @@ export const registerUser = async (req: Request, res: Response) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const duplicateUsers = await UserModel.find({ name, email });
|
const duplicateUsers = await UserModel.findByNameEmail({ name, email });
|
||||||
if (duplicateUsers && duplicateUsers.length) {
|
if (duplicateUsers && duplicateUsers.length) {
|
||||||
const dupl = duplicateUsers[0].name === name ? "Username" : "Email";
|
const dupl = duplicateUsers[0].name === name ? "Username" : "Email";
|
||||||
res.status(409).json({ message: `${dupl} is already in use.` });
|
res.status(409).json({ message: `${dupl} is already in use.` });
|
||||||
@@ -165,7 +165,10 @@ export const loginUser = async (req: Request, res: Response) => {
|
|||||||
const nameOrEmail = xss(req.body.name);
|
const nameOrEmail = xss(req.body.name);
|
||||||
const password = req.body.password;
|
const password = req.body.password;
|
||||||
|
|
||||||
const users = await UserModel.find({ name: nameOrEmail, email: nameOrEmail });
|
const users = await UserModel.findByNameEmail(
|
||||||
|
{ name: nameOrEmail, email: nameOrEmail },
|
||||||
|
true
|
||||||
|
);
|
||||||
if (!users || !users.length) {
|
if (!users || !users.length) {
|
||||||
res.status(404).json({ message: "Invalid username/email." });
|
res.status(404).json({ message: "Invalid username/email." });
|
||||||
return;
|
return;
|
||||||
@@ -238,7 +241,7 @@ export const updateUser = async (req: Request, res: Response) => {
|
|||||||
|
|
||||||
const email = xss(req.body.email || req.session.user.email);
|
const email = xss(req.body.email || req.session.user.email);
|
||||||
|
|
||||||
const duplicateUsers = await UserModel.find({ name, email });
|
const duplicateUsers = await UserModel.findByNameEmail({ name, email });
|
||||||
if (
|
if (
|
||||||
duplicateUsers &&
|
duplicateUsers &&
|
||||||
duplicateUsers.length &&
|
duplicateUsers.length &&
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ export const INIT_TABLES = /* sql */ `
|
|||||||
end_reason VARCHAR(16),
|
end_reason VARCHAR(16),
|
||||||
pgn TEXT,
|
pgn TEXT,
|
||||||
white_id INT REFERENCES "user",
|
white_id INT REFERENCES "user",
|
||||||
white_guest_name VARCHAR(32),
|
white_name VARCHAR(32),
|
||||||
black_id INT REFERENCES "user",
|
black_id INT REFERENCES "user",
|
||||||
black_guest_name VARCHAR(32)
|
black_name VARCHAR(32)
|
||||||
);
|
);
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -8,9 +8,8 @@ export const activeGames: Array<Game> = [];
|
|||||||
export const create = async (game: Game) => {
|
export const create = async (game: Game) => {
|
||||||
try {
|
try {
|
||||||
const res = await db.query(
|
const res = await db.query(
|
||||||
`INSERT INTO "game"(code, winner, end_reason, pgn, white_id, white_guest_name, black_id, black_guest_name) VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *`,
|
`INSERT INTO "game"(winner, end_reason, pgn, white_id, white_name, black_id, black_name) VALUES($1, $2, $3, $4, $5, $6, $7) RETURNING *`,
|
||||||
[
|
[
|
||||||
game.code || null,
|
|
||||||
game.winner || null,
|
game.winner || null,
|
||||||
game.endReason || null,
|
game.endReason || null,
|
||||||
game.pgn,
|
game.pgn,
|
||||||
@@ -22,18 +21,11 @@ export const create = async (game: Game) => {
|
|||||||
);
|
);
|
||||||
return {
|
return {
|
||||||
id: res.rows[0].id,
|
id: res.rows[0].id,
|
||||||
code: res.rows[0].code,
|
winner: res.rows[0].winner,
|
||||||
winner:
|
endReason: res.rows[0].reason,
|
||||||
res.rows[0].winner_id === res.rows[0].white_id
|
|
||||||
? "white"
|
|
||||||
: res.rows[0].winner_id === res.rows[0].black_id
|
|
||||||
? "black"
|
|
||||||
: "draw",
|
|
||||||
reason: res.rows[0].reason,
|
|
||||||
pgn: res.rows[0].pgn,
|
pgn: res.rows[0].pgn,
|
||||||
host: { id: res.rows[0].host_id },
|
white: { id: res.rows[0].white_id, name: res.rows[0].white_name },
|
||||||
white: { id: res.rows[0].white_id, name: res.rows[0].white_guest_name },
|
black: { id: res.rows[0].black_id, name: res.rows[0].black_name }
|
||||||
black: { id: res.rows[0].black_id, name: res.rows[0].black_guest_name }
|
|
||||||
} as Game;
|
} as Game;
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
@@ -41,23 +33,40 @@ export const create = async (game: Game) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const find = async (where?: string, limit = 1) => {
|
export const findById = async (id: number) => {
|
||||||
const query = where
|
|
||||||
? `SELECT * FROM "game"`
|
|
||||||
: {
|
|
||||||
text: `SELECT * FROM "game" WHERE $1 LIMIT $2`,
|
|
||||||
values: [where, limit]
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await db.query(query);
|
const res = await db.query(`SELECT * FROM "game" WHERE id=$1`, [id]);
|
||||||
|
return {
|
||||||
|
id: res.rows[0].id,
|
||||||
|
winner: res.rows[0].winner,
|
||||||
|
endReason: res.rows[0].end_reason,
|
||||||
|
pgn: res.rows[0].pgn,
|
||||||
|
white: { id: res.rows[0].white_id, name: res.rows[0].white_name },
|
||||||
|
black: { id: res.rows[0].black_id, name: res.rows[0].black_name }
|
||||||
|
} as Game;
|
||||||
|
} catch (err: unknown) {
|
||||||
|
console.log(err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const findByUserId = async (id: number, limit = 10) => {
|
||||||
|
if (id == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const res = await db.query(
|
||||||
|
`SELECT * FROM "game" WHERE white_id=$1 OR black_id=$1 LIMIT $2`,
|
||||||
|
[id, limit]
|
||||||
|
);
|
||||||
return res.rows.map((r) => {
|
return res.rows.map((r) => {
|
||||||
return {
|
return {
|
||||||
id: r.id,
|
id: r.id,
|
||||||
|
winner: r.winner,
|
||||||
|
endReason: r.end_reason,
|
||||||
pgn: r.pgn,
|
pgn: r.pgn,
|
||||||
white: { id: r.white_id },
|
white: { id: r.white_id, name: r.white_name },
|
||||||
black: { id: r.black_id },
|
black: { id: r.black_id, name: r.black_name }
|
||||||
winner: r.winner
|
|
||||||
} as Game;
|
} as Game;
|
||||||
});
|
});
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
@@ -66,15 +75,17 @@ export const find = async (where?: string, limit = 1) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: update fields specifically, "data" string doesnt work
|
||||||
export const update = async (id: number, data: string) => {
|
export const update = async (id: number, data: string) => {
|
||||||
try {
|
try {
|
||||||
const res = await db.query(`UPDATE "game" SET $1 WHERE id = $2 RETURNING *`, [data, id]);
|
const res = await db.query(`UPDATE "game" SET $1 WHERE id = $2 RETURNING *`, [data, id]);
|
||||||
return {
|
return {
|
||||||
id: res.rows[0].id,
|
id: res.rows[0].id,
|
||||||
|
winner: res.rows[0].winner,
|
||||||
|
endReason: res.rows[0].end_reason,
|
||||||
pgn: res.rows[0].pgn,
|
pgn: res.rows[0].pgn,
|
||||||
white: { id: res.rows[0].white_id },
|
white: { id: res.rows[0].white_id, name: res.rows[0].white_name },
|
||||||
black: { id: res.rows[0].black_id },
|
black: { id: res.rows[0].black_id, name: res.rows[0].black_name }
|
||||||
winner: res.rows[0].winner
|
|
||||||
} as Game;
|
} as Game;
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
@@ -87,10 +98,11 @@ export const remove = async (id: number) => {
|
|||||||
const res = await db.query(`DELETE FROM "game" WHERE id = $1 RETURNING *`, [id]);
|
const res = await db.query(`DELETE FROM "game" WHERE id = $1 RETURNING *`, [id]);
|
||||||
return {
|
return {
|
||||||
id: res.rows[0].id,
|
id: res.rows[0].id,
|
||||||
|
winner: res.rows[0].winner,
|
||||||
|
endReason: res.rows[0].end_reason,
|
||||||
pgn: res.rows[0].pgn,
|
pgn: res.rows[0].pgn,
|
||||||
white: { id: res.rows[0].white_id },
|
white: { id: res.rows[0].white_id, name: res.rows[0].white_name },
|
||||||
black: { id: res.rows[0].black_id },
|
black: { id: res.rows[0].black_id, name: res.rows[0].black_name }
|
||||||
winner: res.rows[0].winner
|
|
||||||
} as Game;
|
} as Game;
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
@@ -100,7 +112,8 @@ export const remove = async (id: number) => {
|
|||||||
|
|
||||||
const GameModel = {
|
const GameModel = {
|
||||||
create,
|
create,
|
||||||
find,
|
findById,
|
||||||
|
findByUserId,
|
||||||
update,
|
update,
|
||||||
remove
|
remove
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,7 +18,20 @@ export const create = async (user: User, password: string) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const find = async (user: User, limit?: number) => {
|
export const findById = async (id: number) => {
|
||||||
|
if (id === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const res = await db.query(`SELECT id, name, email FROM "user" WHERE id=$1`, [id]);
|
||||||
|
return res.rows as Array<User>;
|
||||||
|
} catch (err: unknown) {
|
||||||
|
console.log(err);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const findByNameEmail = async (user: User, includePassword = false, limit?: number) => {
|
||||||
// if user is not specified, get all users
|
// if user is not specified, get all users
|
||||||
if (!user) {
|
if (!user) {
|
||||||
try {
|
try {
|
||||||
@@ -34,7 +47,9 @@ export const find = async (user: User, limit?: number) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await db.query(
|
const res = await db.query(
|
||||||
`SELECT id, name, email, password FROM "user" WHERE name=$1 OR email=$2 LIMIT $3`,
|
`SELECT id, name, email${
|
||||||
|
includePassword ? `, password` : ""
|
||||||
|
} FROM "user" WHERE name=$1 OR email=$2 LIMIT $3`,
|
||||||
[user.name, user.email, limit ?? 1]
|
[user.name, user.email, limit ?? 1]
|
||||||
);
|
);
|
||||||
return res.rows as Array<User & { password?: string }>;
|
return res.rows as Array<User & { password?: string }>;
|
||||||
@@ -45,7 +60,7 @@ export const find = async (user: User, limit?: number) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const update = async (id: number, updatedUser: User & { password?: string }) => {
|
export const update = async (id: number, updatedUser: User & { password?: string }) => {
|
||||||
if (typeof id === "string" || id === 0) {
|
if (id === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +81,7 @@ export const update = async (id: number, updatedUser: User & { password?: string
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const remove = async (id: number) => {
|
export const remove = async (id: number) => {
|
||||||
if (typeof id === "string" || id === 0) {
|
if (id === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +98,8 @@ export const remove = async (id: number) => {
|
|||||||
|
|
||||||
const UserModel = {
|
const UserModel = {
|
||||||
create,
|
create,
|
||||||
find,
|
findById,
|
||||||
|
findByNameEmail,
|
||||||
update,
|
update,
|
||||||
remove
|
remove
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user