Files
TMS/transportmanager/server/schema_sqlite.sql

198 lines
6.1 KiB
SQL

-- Reset schema: drop tables first (children → parents), then recreate.
BEGIN TRANSACTION;
PRAGMA foreign_keys=OFF;
-- Drop child tables first to avoid FK constraints
DROP TABLE IF EXISTS order_in_points;
DROP TABLE IF EXISTS order_out_points;
DROP TABLE IF EXISTS orders_in;
DROP TABLE IF EXISTS orders_out;
DROP TABLE IF EXISTS email;
DROP TABLE IF EXISTS subscriptions;
DROP TABLE IF EXISTS company_user_access;
DROP TABLE IF EXISTS destinations;
DROP TABLE IF EXISTS transporters;
DROP TABLE IF EXISTS clients;
DROP TABLE IF EXISTS currency;
DROP TABLE IF EXISTS users;
PRAGMA foreign_keys=ON;
COMMIT;
-- Users table
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
contact_name TEXT,
email TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
phone TEXT,
register_number TEXT,
vat TEXT,
address TEXT,
logo_filename TEXT,
terms TEXT,
first_order_number INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
otp_code TEXT,
otp_expiration TIMESTAMPTZ,
user_role TEXT NOT NULL DEFAULT 'user' CHECK (user_role IN ('user', 'admin', 'company_user')),
company_id INTEGER DEFAULT 0,
active INTEGER DEFAULT 1,
temporary_password INTEGER DEFAULT 0
);
-- Clients table
CREATE TABLE IF NOT EXISTS clients (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
name TEXT NOT NULL,
address TEXT,
register_number TEXT,
contact_person TEXT,
phone TEXT,
email TEXT,
vat TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Transporters table
CREATE TABLE IF NOT EXISTS transporters (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
name TEXT NOT NULL,
address TEXT,
register_number TEXT,
contact_person TEXT,
phone TEXT,
email TEXT,
vat TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Destinations table
CREATE TABLE IF NOT EXISTS destinations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
name TEXT NOT NULL,
address TEXT,
latitude TEXT,
longitude TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Orders out table
CREATE TABLE IF NOT EXISTS orders_out (
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_number TEXT NOT NULL,
user_id INTEGER NOT NULL,
client_id INTEGER NOT NULL,
transporter_id INTEGER NOT NULL,
products_description TEXT,
ldb_quantity DOUBLE PRECISION,
kg_quantity DOUBLE PRECISION,
track_reg_number TEXT,
trailer_reg_number TEXT,
received_price DOUBLE PRECISION,
paid_price DOUBLE PRECISION,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
order_status TEXT NOT NULL DEFAULT 'active' CHECK (order_status IN ('active', 'inactive', 'cancelled')),
order_in_number TEXT,
currency TEXT,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY(client_id) REFERENCES clients(id) ON DELETE CASCADE,
FOREIGN KEY(transporter_id) REFERENCES transporters(id) ON DELETE CASCADE
);
-- Orders in table
CREATE TABLE IF NOT EXISTS orders_in (
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_number TEXT NOT NULL,
user_id INTEGER NOT NULL,
client_id INTEGER NOT NULL,
products_description TEXT,
ldb_quantity DOUBLE PRECISION,
kg_quantity DOUBLE PRECISION,
track_reg_number TEXT,
trailer_reg_number TEXT,
received_price DOUBLE PRECISION,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
file_name TEXT,
expenses DOUBLE PRECISION,
currency TEXT,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY(client_id) REFERENCES clients(id) ON DELETE CASCADE
);
-- Order In Points (loading/unloading) table
CREATE TABLE IF NOT EXISTS order_in_points (
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id INTEGER NOT NULL,
destination_id INTEGER NOT NULL,
informatins TEXT,
point_data TEXT,
point_hour TEXT,
point_type TEXT NOT NULL CHECK (point_type IN ('loading', 'unloading')),
FOREIGN KEY(order_id) REFERENCES orders_in(id) ON DELETE CASCADE
);
-- Order In Points (loading/unloading) table
CREATE TABLE IF NOT EXISTS order_out_points (
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id INTEGER NOT NULL,
destination_id INTEGER NOT NULL,
informatins TEXT,
point_data TEXT,
point_hour TEXT,
point_type TEXT NOT NULL CHECK (point_type IN ('loading', 'unloading')),
FOREIGN KEY(order_id) REFERENCES orders_out(id) ON DELETE CASCADE
);
-- Subscriptions table
CREATE TABLE IF NOT EXISTS subscriptions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
plan TEXT NOT NULL CHECK (plan IN ('first_2_months', 'monthly', 'yearly')),
start_date TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
end_date TIMESTAMPTZ NOT NULL,
status TEXT NOT NULL CHECK (status IN ('active', 'expired', 'cancelled')),
register_number TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS email (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
smtp_host TEXT,
smtp_port TEXT,
smtp_user TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS company_user_access (
id INTEGER PRIMARY KEY AUTOINCREMENT,
company_user_id INTEGER NOT NULL,
clients INTEGER,
transporters INTEGER,
destinations INTEGER,
orders_in INTEGER,
orders_out INTEGER,
report INTEGER,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(company_user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS currency (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
name TEXT,
value DOUBLE PRECISION,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
);