Add registry, ingest, timeline, tickets features

This commit is contained in:
2026-02-05 22:49:11 +03:00
parent 1aba59fca5
commit fe9e08f1a6
44 changed files with 3514 additions and 31 deletions

View File

@@ -0,0 +1,7 @@
DROP TABLE IF EXISTS installations;
DROP TABLE IF EXISTS components;
DROP TABLE IF EXISTS assets;
DROP TABLE IF EXISTS lots;
DROP TABLE IF EXISTS locations;
DROP TABLE IF EXISTS projects;
DROP TABLE IF EXISTS customers;

View File

@@ -0,0 +1,95 @@
CREATE TABLE IF NOT EXISTS customers (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS projects (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
customer_id BIGINT NOT NULL,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_projects_customer
FOREIGN KEY (customer_id) REFERENCES customers(id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS locations (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
customer_id BIGINT NOT NULL,
name VARCHAR(255) NOT NULL,
kind VARCHAR(64) NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_locations_customer
FOREIGN KEY (customer_id) REFERENCES customers(id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS lots (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(255) NOT NULL,
description TEXT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uniq_lots_code (code)
);
CREATE TABLE IF NOT EXISTS assets (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id BIGINT NOT NULL,
location_id BIGINT NULL,
name VARCHAR(255) NOT NULL,
vendor VARCHAR(255) NULL,
model VARCHAR(255) NULL,
vendor_serial VARCHAR(255) NOT NULL,
asset_tag VARCHAR(255) NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_assets_project
FOREIGN KEY (project_id) REFERENCES projects(id)
ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_assets_location
FOREIGN KEY (location_id) REFERENCES locations(id)
ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS components (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
lot_id BIGINT NULL,
vendor VARCHAR(255) NULL,
model VARCHAR(255) NULL,
vendor_serial VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_components_lot
FOREIGN KEY (lot_id) REFERENCES lots(id)
ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS installations (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
asset_id BIGINT NOT NULL,
component_id BIGINT NOT NULL,
installed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
removed_at TIMESTAMP NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_installations_asset
FOREIGN KEY (asset_id) REFERENCES assets(id)
ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_installations_component
FOREIGN KEY (component_id) REFERENCES components(id)
ON DELETE RESTRICT ON UPDATE CASCADE
);
CREATE INDEX idx_assets_vendor_serial ON assets(vendor_serial);
CREATE INDEX idx_components_vendor_serial ON components(vendor_serial);
CREATE INDEX idx_installations_component_removed ON installations(component_id, removed_at);
CREATE INDEX idx_projects_customer ON projects(customer_id);
CREATE INDEX idx_assets_project ON assets(project_id);
CREATE INDEX idx_assets_location ON assets(location_id);
CREATE INDEX idx_components_lot ON components(lot_id);