wa-dev-tools/lib/db.js
treamz f8616e32b4 Auth + Landing + Categories
- Local auth: registration/login with email+password (bcrypt, MariaDB)
- Landing page: marketing page at / with hero, categories, advantages, CTA
- Tool categories: Images (4), Code (3), Web (3), Utilities (2)
- Sidebar: category dividers, user avatar with logout
- Protected routes: all tools require auth, landing/login/register public
- New files: lib/db.js, routes/auth.js, login.html, register.html, landing.html
- Dependencies: bcrypt, mysql2
2026-03-21 22:54:31 +03:00

36 lines
1.1 KiB
JavaScript

const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: process.env.DB_HOST || 'localhost',
user: process.env.DB_USER || 'wa_tools',
password: process.env.DB_PASSWORD || '',
database: process.env.DB_NAME || 'wa_tools',
waitForConnections: true,
connectionLimit: 5,
charset: 'utf8mb4',
});
async function findUserByEmail(email) {
const [rows] = await pool.execute('SELECT * FROM users WHERE email = ?', [email]);
return rows[0] || null;
}
async function findUserById(id) {
const [rows] = await pool.execute('SELECT id, email, display_name, created_at FROM users WHERE id = ?', [id]);
return rows[0] || null;
}
async function createUser(email, passwordHash, displayName) {
const [result] = await pool.execute(
'INSERT INTO users (email, password_hash, display_name) VALUES (?, ?, ?)',
[email, passwordHash, displayName || null]
);
return result.insertId;
}
async function updateLastLogin(id) {
await pool.execute('UPDATE users SET last_login = NOW() WHERE id = ?', [id]);
}
module.exports = { pool, findUserByEmail, findUserById, createUser, updateLastLogin };