Files
Aknaproff/migrations/0001_initial.sql
Deploy Bot 4898f5ec7f v4.1.9: Начальная производственная версия
- Полный backend на Hono + TypeScript
- SQLite база данных с 38 записями
- 3 пользователя: admin, aknaproff, kasutaja
- Модальное окно reportModal (4 шага)
- Docker конфигурация для Synology ARM
- Все миграции (0001-0017)
- Frontend: vanilla HTML/JS (original.html)
2025-12-31 12:00:00 +02:00

111 lines
3.6 KiB
SQL
Executable File

PRAGMA foreign_keys = ON;
-- Users table --------------------------------------------------------------
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
full_name TEXT NOT NULL DEFAULT '',
role TEXT NOT NULL DEFAULT 'user' CHECK (role IN ('admin', 'user')),
active INTEGER NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER IF NOT EXISTS trg_users_updated
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
UPDATE users SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;
-- Production records -------------------------------------------------------
CREATE TABLE IF NOT EXISTS production_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
month INTEGER NOT NULL CHECK (month BETWEEN 1 AND 12),
year INTEGER NOT NULL,
client_name TEXT NOT NULL,
type TEXT,
offer_number TEXT,
work_number TEXT,
quantity INTEGER NOT NULL DEFAULT 0,
color TEXT,
notes TEXT,
notes_date TEXT,
installer TEXT,
price REAL NOT NULL DEFAULT 0,
arve_checked INTEGER NOT NULL DEFAULT 0,
arve_makstud TEXT,
price_paid INTEGER NOT NULL DEFAULT 0,
deleted INTEGER NOT NULL DEFAULT 0,
created_by INTEGER,
updated_by INTEGER,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL,
FOREIGN KEY (updated_by) REFERENCES users(id) ON DELETE SET NULL
);
CREATE INDEX IF NOT EXISTS idx_production_records_year_month
ON production_records (year, month, deleted);
CREATE TRIGGER IF NOT EXISTS trg_production_records_updated
AFTER UPDATE ON production_records
FOR EACH ROW
BEGIN
UPDATE production_records SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;
-- Status checkboxes --------------------------------------------------------
CREATE TABLE IF NOT EXISTS status_checkboxes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
record_id INTEGER NOT NULL UNIQUE,
material_date TEXT,
material_confirmed INTEGER NOT NULL DEFAULT 0,
material2_date TEXT,
material2_confirmed INTEGER NOT NULL DEFAULT 0,
package_date TEXT,
worksheets_date TEXT,
worksheets_confirmed INTEGER NOT NULL DEFAULT 0,
worksheets_error INTEGER NOT NULL DEFAULT 0,
worksheets_cycle_step INTEGER NOT NULL DEFAULT 0,
cutting_date TEXT,
cutting_error INTEGER NOT NULL DEFAULT 0,
glazing_date TEXT,
glazing_error INTEGER NOT NULL DEFAULT 0,
ready_date TEXT,
ready_error INTEGER NOT NULL DEFAULT 0,
issued_date TEXT,
issued_error INTEGER NOT NULL DEFAULT 0,
problems TEXT,
problems_date TEXT,
problem_flag INTEGER NOT NULL DEFAULT 0,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (record_id) REFERENCES production_records(id) ON DELETE CASCADE
);
CREATE TRIGGER IF NOT EXISTS trg_status_checkboxes_updated
AFTER UPDATE ON status_checkboxes
FOR EACH ROW
BEGIN
UPDATE status_checkboxes SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;
-- Audit log ----------------------------------------------------------------
CREATE TABLE IF NOT EXISTS audit_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
record_id INTEGER,
user_id INTEGER,
action TEXT NOT NULL,
field TEXT,
old_value TEXT,
new_value TEXT,
metadata TEXT,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (record_id) REFERENCES production_records(id) ON DELETE SET NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
);
CREATE INDEX IF NOT EXISTS idx_audit_log_record_id
ON audit_log (record_id, created_at DESC);