95 lines
3.0 KiB
JavaScript
95 lines
3.0 KiB
JavaScript
import mysql from 'mysql2/promise';
|
|
|
|
const pool = mysql.createPool({
|
|
host: process.env.DB_HOST || 'localhost',
|
|
port: parseInt(process.env.DB_PORT || '3306'),
|
|
user: process.env.DB_USER || 'root',
|
|
password: process.env.DB_PASSWORD || 'scrumpass',
|
|
database: process.env.DB_NAME || 'scrum_manager',
|
|
waitForConnections: true,
|
|
connectionLimit: 10,
|
|
queueLimit: 0,
|
|
});
|
|
|
|
export async function initDB() {
|
|
const conn = await pool.getConnection();
|
|
try {
|
|
await conn.query(`
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
role VARCHAR(50) NOT NULL DEFAULT 'employee',
|
|
email VARCHAR(255) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
color VARCHAR(20) DEFAULT '#818cf8',
|
|
avatar VARCHAR(10) DEFAULT '',
|
|
dept VARCHAR(100) DEFAULT ''
|
|
)
|
|
`);
|
|
|
|
await conn.query(`
|
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
title VARCHAR(500) NOT NULL,
|
|
description TEXT,
|
|
status ENUM('todo','inprogress','review','done') NOT NULL DEFAULT 'todo',
|
|
priority ENUM('critical','high','medium','low') NOT NULL DEFAULT 'medium',
|
|
assignee_id VARCHAR(36),
|
|
reporter_id VARCHAR(36),
|
|
due_date DATE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (assignee_id) REFERENCES users(id) ON DELETE SET NULL,
|
|
FOREIGN KEY (reporter_id) REFERENCES users(id) ON DELETE SET NULL
|
|
)
|
|
`);
|
|
|
|
await conn.query(`
|
|
CREATE TABLE IF NOT EXISTS subtasks (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
task_id VARCHAR(36) NOT NULL,
|
|
title VARCHAR(500) NOT NULL,
|
|
done BOOLEAN DEFAULT FALSE,
|
|
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
|
|
)
|
|
`);
|
|
|
|
await conn.query(`
|
|
CREATE TABLE IF NOT EXISTS comments (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
task_id VARCHAR(36) NOT NULL,
|
|
user_id VARCHAR(36),
|
|
text TEXT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
|
|
)
|
|
`);
|
|
|
|
await conn.query(`
|
|
CREATE TABLE IF NOT EXISTS activities (
|
|
id VARCHAR(36) PRIMARY KEY,
|
|
task_id VARCHAR(36) NOT NULL,
|
|
text TEXT NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
|
|
)
|
|
`);
|
|
|
|
await conn.query(`
|
|
CREATE TABLE IF NOT EXISTS task_tags (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
task_id VARCHAR(36) NOT NULL,
|
|
tag VARCHAR(100) NOT NULL,
|
|
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
|
|
UNIQUE KEY unique_task_tag (task_id, tag)
|
|
)
|
|
`);
|
|
|
|
console.log('✅ Database tables initialized');
|
|
} finally {
|
|
conn.release();
|
|
}
|
|
}
|
|
|
|
export default pool;
|