/
Coderdev
/
web-nodejs-labs
Обзор
Документация
Войти
/
Coderdev
/
web-nodejs-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
backend/src/services/lab11/user.service.js
96 строк
3 KB
Coderdev
1
12 май 2026, 11:10
12 май 2026, 11:10
d528236
Код
Авторство
О чём код?
// backend/src/services/lab11/user.service.js export async function findUserByLogin(pg, login) { const result = await pg.query( `SELECT u.id, u.login, u.password_hash, r.name AS role FROM lab11.users u JOIN lab11.roles r ON u.role_id = r.id WHERE u.login = $1`, [login] ); return result.rowCount === 0 ? null : result.rows[0]; } export async function findUserById(pg, id) { const result = await pg.query( `SELECT u.id, u.login, r.name AS role, u.created_at FROM lab11.users u JOIN lab11.roles r ON u.role_id = r.id WHERE u.id = $1`, [id] ); return result.rowCount === 0 ? null : result.rows[0]; } export async function getRoleIdByName(pg, roleName) { const result = await pg.query( `SELECT id FROM lab11.roles WHERE name = $1`, [roleName] ); if (result.rowCount === 0) throw new Error(`Роль "${roleName}" не найдена`); return result.rows[0].id; } export async function isLoginTaken(pg, login) { const result = await pg.query( `SELECT 1 FROM lab11.users WHERE login = $1 LIMIT 1`, [login] ); return result.rowCount > 0; } export async function createUser(pg, { login, passwordHash, roleName = 'user' }) { const roleId = await getRoleIdByName(pg, roleName); const result = await pg.query( `INSERT INTO lab11.users (login, password_hash, role_id) VALUES ($1, $2, $3) RETURNING id, login, role_id, created_at`, [login, passwordHash, roleId] ); return result.rows[0]; } export async function getAllUsers(pg) { const result = await pg.query( `SELECT u.id, u.login, r.name AS role, u.created_at FROM lab11.users u JOIN lab11.roles r ON u.role_id = r.id ORDER BY u.id` ); return result.rows; } export async function updateUserRole(pg, userId, roleName) { const roleId = await getRoleIdByName(pg, roleName); const result = await pg.query( `UPDATE lab11.users SET role_id = $1 WHERE id = $2 RETURNING id, login, role_id`, [roleId, userId] ); return result.rows[0] || null; } export async function updateUserPassword(pg, userId, newPasswordHash) { await pg.query( `UPDATE lab11.users SET password_hash = $1 WHERE id = $2`, [newPasswordHash, userId] ); } export async function deleteUser(pg, userId) { const result = await pg.query( `DELETE FROM lab11.users WHERE id = $1 RETURNING id`, [userId] ); return result.rows[0] || null; } // Генерация случайного пароля export function generatePassword(length = 10) { const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789!@#$%'; let pwd = ''; for (let i = 0; i < length; i++) { pwd += chars[Math.floor(Math.random() * chars.length)]; } return pwd; }