import db from '../db.js' import statuses from '../utils/status.js'; import bcrypt from 'bcrypt'; class UserService { async create (username, password) { await db.query("INSERT INTO users (username, password) VALUES ($1, $2)", [username, bcrypt.hashSync(password, 12)]).catch (e => { if (e.code == 23505) { // already exists return statuses.duplicate } }) return statuses.ok } async getByUsername(username) { let user = (await db.query("SELECT * FROM Users WHERE username = $1", [username])).rows if (user == undefined) return statuses.not_found return (user[0]); } async getAll() { return (await db.query("SELECT * FROM Users")).rows; } async isInGroup(userId, groupId) { return (await db.query("SELECT * FROM Users WHERE ID = $1 AND $2 = ANY(groups)", [userId, groupId])).rowCount > 0; } async joinGroup(userId, groupId) { if (await (this.isInGroup(userId, groupId))) return statuses.duplicate; await db.query("UPDATE Users SET groups = array_append(groups, $1::integer) WHERE ID = $2", [groupId, userId]); return statuses.ok; } } export default new UserService();