-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.js
More file actions
104 lines (94 loc) · 3.69 KB
/
database.js
File metadata and controls
104 lines (94 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const mysql = require('mysql2');
require('dotenv').config();
// Create the connection pool
const pool = mysql.createPool({
host: process.env.DB_HOST || 'localhost',
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'root',
database: process.env.DB_NAME || 'nexus_dashboard',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// Helper to create DB if not exists (needs a separate connection without DB selected)
function initializeDatabase() {
const rawConnection = mysql.createConnection({
host: process.env.DB_HOST || 'localhost',
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'root',
});
rawConnection.query(`CREATE DATABASE IF NOT EXISTS \`${process.env.DB_NAME || 'nexus_dashboard'}\``, (err) => {
if (err) {
console.error("Error creating database:", err);
rawConnection.end();
return;
}
console.log("Database ensured.");
rawConnection.end();
// Now initialize tables
initTables();
});
}
function initTables() {
// Users Table
const userTableQuery = `
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
role VARCHAR(50) DEFAULT 'user',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`;
pool.query(userTableQuery, (err) => {
if (err) console.error("Error creating users table:", err);
else {
// Check for admin
pool.query("SELECT id FROM users WHERE username = ?", ['admin'], (err, results) => {
if (results && results.length === 0) {
const bcrypt = require('bcryptjs');
const hash = bcrypt.hashSync('admin123', 10);
pool.query("INSERT INTO users (username, password, role) VALUES (?, ?, ?)",
['admin', hash, 'admin'], (err) => {
if (!err) console.log("Default admin created.");
});
}
});
}
});
// Transactions Table
const txTableQuery = `
CREATE TABLE IF NOT EXISTS transactions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(255),
user_initial VARCHAR(10),
avatar_color VARCHAR(50),
amount DECIMAL(10, 2),
status VARCHAR(50),
date VARCHAR(50)
)
`;
pool.query(txTableQuery, (err) => {
if (err) console.error("Error creating transactions table:", err);
else {
pool.query("SELECT COUNT(*) as count FROM transactions", (err, results) => {
if (results && results[0].count === 0) {
const sql = "INSERT INTO transactions (user_name, user_initial, avatar_color, amount, status, date) VALUES ?";
const values = [
["Jason Lee", "J", "#8b5cf6", 450.00, "completed", "Oct 24, 2024"],
["Sarah Chen", "S", "#ec4899", 120.50, "pending", "Oct 23, 2024"],
["Mike Ross", "M", "#06b6d4", 890.00, "completed", "Oct 23, 2024"],
["Emma Watson", "E", "#10b981", 2300.00, "completed", "Oct 22, 2024"]
];
pool.query(sql, [values], (err) => {
if (err) console.error(err);
else console.log("Seeded transactions.");
});
}
});
}
});
}
// Start initialization
initializeDatabase();
module.exports = pool;