import { Request, Response } from 'express'; import bcrypt from 'bcrypt'; import jwt from 'jsonwebtoken'; import { mainPool } from '../config/database'; import { config } from '../config/environment'; export const login = async (req: Request, res: Response) => { try { const { username, password } = req.body; if (!username || !password) { return res.status(400).json({ error: 'Не заполнены обязательные поля' }); } // Find user const result = await mainPool.query( 'SELECT id, username, password_hash, role, is_superadmin FROM users WHERE username = $1', [username] ); if (result.rows.length === 0) { return res.status(401).json({ error: 'Неверные учетные данные' }); } const user = result.rows[0]; // Verify password const isValidPassword = await bcrypt.compare(password, user.password_hash); if (!isValidPassword) { return res.status(401).json({ error: 'Неверные учетные данные' }); } // Generate token const token = jwt.sign( { userId: user.id }, config.jwt.secret, { expiresIn: config.jwt.expiresIn as any } ); res.json({ user: { id: user.id, username: user.username, role: user.role, is_superadmin: user.is_superadmin, }, token, }); } catch (error) { console.error('Login error:', error); res.status(500).json({ error: 'Ошибка сервера' }); } }; export const getMe = async (req: any, res: Response) => { try { const result = await mainPool.query( 'SELECT id, username, role, is_superadmin, created_at FROM users WHERE id = $1', [req.user.id] ); if (result.rows.length === 0) { return res.status(404).json({ error: 'Пользователь не найден' }); } res.json(result.rows[0]); } catch (error) { console.error('Get me error:', error); res.status(500).json({ error: 'Ошибка сервера' }); } };