costco-grocery-list/backend/models/user.model.js

62 lines
1.4 KiB
JavaScript

const pool = require("../db/pool");
exports.ROLES = {
VIEWER: "viewer",
EDITOR: "editor",
ADMIN: "admin",
}
exports.findByUsername = async (username) => {
query = `SELECT * FROM users WHERE username = ${username}`;
const result = await pool.query("SELECT * FROM users WHERE username = $1", [username]);
console.log(query);
return result.rows[0];
};
exports.createUser = async (username, hashedPassword, name) => {
const result = await pool.query(
`INSERT INTO users (username, password, name, role)
VALUES ($1, $2, $3, $4)`,
[username, hashedPassword, name, this.ROLES.VIEWER]
);
return result.rows[0];
};
exports.getAllUsers = async () => {
const result = await pool.query("SELECT id, username, name, role FROM users ORDER BY id ASC");
return result.rows;
};
exports.updateUserRole = async (id, role) => {
const result = await pool.query(
`UPDATE users
SET role = $1
WHERE id = $2
RETURNING id, username, name, role`,
[role, id]
);
return result.rows[0];
};
exports.deleteUser = async (id) => {
const result = await pool.query(
`DELETE FROM users WHERE id = $1 RETURNING id`,
[id]
);
return result.rowCount;
};
exports.checkIfUserExists = async (username) => {
const result = await pool.query(
"SELECT COUNT(*) FROM users WHERE username = $1",
[username]
);
return result.rows[0].count > 0;
}