From eabc193d8b64e38afc48a0cb5c9a62ef3a4651a2 Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 23 Oct 2025 23:01:22 +0300 Subject: [PATCH] feat(utils/InitalizeDB.py): PSQL initializing Add script with is connected to db and initialize it --- utils/InitalizeDB.py | 79 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 utils/InitalizeDB.py diff --git a/utils/InitalizeDB.py b/utils/InitalizeDB.py new file mode 100644 index 0000000..b70ab13 --- /dev/null +++ b/utils/InitalizeDB.py @@ -0,0 +1,79 @@ +import psycopg +from PostgressConnect import PSQLConnect, PSQLCursor +from loadDotEnv import initializeENV + +state = initializeENV() +conn = PSQLConnect() +cur = PSQLCursor(conn) + +cur.execute(''' + -- Пользователи системы +CREATE TABLE users ( + id SERIAL PRIMARY KEY, + email VARCHAR(255) UNIQUE NOT NULL, + password_hash VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + role VARCHAR(50) NOT NULL, -- 'operator', 'admin', 'viewer' + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Роботы +CREATE TABLE robots ( + id VARCHAR(50) PRIMARY KEY, -- 'RB-001' + status VARCHAR(50) DEFAULT 'active', + battery_level INTEGER, + last_update TIMESTAMP, + current_zone VARCHAR(10), + current_row INTEGER, + current_shelf INTEGER +); + + +-- Товары + +CREATE TABLE products ( + id VARCHAR(50) PRIMARY KEY, -- 'TEL-4567' + name VARCHAR(255) NOT NULL, + category VARCHAR(100), + min_stock INTEGER DEFAULT 10, + optimal_stock INTEGER DEFAULT 100 +); + + +-- История инвентаризации +CREATE TABLE inventory_history ( + id SERIAL PRIMARY KEY, + robot_id VARCHAR(50) REFERENCES robots(id), + product_id VARCHAR(50) REFERENCES productsuid), + quantity INTEGER NOT NULL, + zone VARCHAR(10) NOT NULL, + row_number INTEGER, + shelf_number INTEGER, + status VARCHAR(50), -- 'OK', 'LOW_STOCK', 'CRITICAL' + scanned_at TIMESTAMP NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + + +-- Прогнозы ИИ +CREATE TABLE ai_predictions ( + id SERIAL PRIMARY KEY, + product_id VARCHAR(50) REFERENCES products(id), + prediction_date DATE NOT NULL, + days_until_stockout INTEGER, + recommended_order INTEGER, + confidence_score DECIMAL(3,2), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Индексы для оптимизации +REATE INDEX idx_inventory_scanned ON inventory_history(scanned_at DESC); +CREATE INDEX idx_inventory_product ON inventory_history(product_id); +CREATE INDEX idx_inventory_zone ON inventory_history(zone); + ''') +conn.commit() + +cur.close() +conn.close() + +print("DB is Initialized")