Initial commit of Docker project
This commit is contained in:
19
db/database.js
Executable file
19
db/database.js
Executable file
@@ -0,0 +1,19 @@
|
||||
const Database = require('better-sqlite3');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
const DB_PATH = process.env.DB_PATH || '/data/cpas.db';
|
||||
const SCHEMA_PATH = path.join(__dirname, 'schema.sql');
|
||||
|
||||
const dbDir = path.dirname(DB_PATH);
|
||||
if (!fs.existsSync(dbDir)) fs.mkdirSync(dbDir, { recursive: true });
|
||||
|
||||
const db = new Database(DB_PATH);
|
||||
db.pragma('journal_mode = WAL');
|
||||
db.pragma('foreign_keys = ON');
|
||||
|
||||
const schema = fs.readFileSync(SCHEMA_PATH, 'utf8');
|
||||
db.exec(schema);
|
||||
|
||||
console.log(`[DB] Connected: ${DB_PATH}`);
|
||||
module.exports = db;
|
||||
36
db/schema.sql
Executable file
36
db/schema.sql
Executable file
@@ -0,0 +1,36 @@
|
||||
CREATE TABLE IF NOT EXISTS employees (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
department TEXT,
|
||||
supervisor TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS violations (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
employee_id INTEGER NOT NULL REFERENCES employees(id),
|
||||
violation_type TEXT NOT NULL,
|
||||
violation_name TEXT NOT NULL,
|
||||
category TEXT NOT NULL,
|
||||
points INTEGER NOT NULL,
|
||||
incident_date DATE NOT NULL,
|
||||
incident_time TEXT,
|
||||
location TEXT,
|
||||
details TEXT,
|
||||
submitted_by TEXT,
|
||||
witness_name TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE VIEW IF NOT EXISTS active_cpas_scores AS
|
||||
SELECT
|
||||
e.id AS employee_id,
|
||||
e.name AS employee_name,
|
||||
e.department,
|
||||
COALESCE(SUM(v.points), 0) AS active_points,
|
||||
COUNT(v.id) AS violation_count
|
||||
FROM employees e
|
||||
LEFT JOIN violations v
|
||||
ON v.employee_id = e.id
|
||||
AND v.incident_date >= DATE('now', '-90 days')
|
||||
GROUP BY e.id;
|
||||
Reference in New Issue
Block a user