import db from '../db.js' import customError from '../response/customError.js'; import responseCodes from '../response/responseCodes.js'; import bcrypt from 'bcrypt'; import errorHandler from '../utils/pgerrorhandler.js'; class UserService { async create(username, password) { await db.query("INSERT INTO users (username, password) VALUES ($1, $2)", [username, bcrypt.hashSync(password, 12)]).catch((e) => { errorHandler(e, "user"); }) } async getByUsername(username) { let user = (await db.query("SELECT * FROM Users WHERE username = $1", [username])); if (user.rowCount == 0) throw new customError(`getByUsername user not found`, responseCodes.responses.usernames.not_found); return user.rows[0]; } async getAll() { let res = await db.query("SELECT * FROM Users"); if (res.rowCount == 0) throw new customError(`getAll user not found`, responseCodes.responses.usernames.not_found); return res.rows[0] } 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))) throw new customError(`joinGroup user already in group`, responseCodes.responses.user.already_in_group); await db.query("UPDATE Users SET groups = array_append(groups, $1::integer) WHERE ID = $2", [groupId, userId]); } } export default new UserService();