Initial commit - Migrated to Dev environment
This commit is contained in:
95
backend/_legacy_backup/build_complex_db.py
Executable file
95
backend/_legacy_backup/build_complex_db.py
Executable file
@@ -0,0 +1,95 @@
|
||||
import asyncio
|
||||
import os
|
||||
from sqlalchemy.ext.asyncio import create_async_engine
|
||||
from sqlalchemy import text
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
# Cím beállítása
|
||||
raw_url = os.getenv("DATABASE_URL")
|
||||
if not raw_url:
|
||||
raw_url = "postgresql://admin:PASSWORD_111@postgres-db:5432/service_finder"
|
||||
DATABASE_URL = raw_url.replace("postgresql://", "postgresql+asyncpg://").replace("/service_finder_db", "/service_finder")
|
||||
|
||||
async def build_db():
|
||||
print(f"🔌 Kapcsolódás a rendszerhez...")
|
||||
engine = create_async_engine(DATABASE_URL)
|
||||
|
||||
async with engine.begin() as conn:
|
||||
print("🏗️ 'DATA' séma előkészítése...")
|
||||
await conn.execute(text("CREATE SCHEMA IF NOT EXISTS data;"))
|
||||
|
||||
# 1. FELHASZNÁLÓK TÁBLA (Céges/Magán logika)
|
||||
print("👤 Users tábla létrehozása...")
|
||||
await conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS data.users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
role VARCHAR(20) DEFAULT 'PRIVATE', -- 'PRIVATE', 'COMPANY', 'ADMIN'
|
||||
company_name VARCHAR(255), -- Ha cég
|
||||
tax_number VARCHAR(50), -- Ha cég
|
||||
is_active BOOLEAN DEFAULT FALSE, -- Email megerősítésig
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
"""))
|
||||
|
||||
# 2. JÁRMŰ TÖRZS (A Fizikai Vas - Tulajdonos nélkül!)
|
||||
print("🚗 Vehicles tábla létrehozása (A Vas)...")
|
||||
await conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS data.vehicles (
|
||||
id SERIAL PRIMARY KEY,
|
||||
model_id INTEGER REFERENCES ref.vehicle_models(id),
|
||||
vin VARCHAR(50) UNIQUE NOT NULL, -- ALVÁZSZÁM (Az igazi kulcs)
|
||||
current_plate VARCHAR(20) NOT NULL, -- A mostani rendszám
|
||||
production_year INTEGER,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
"""))
|
||||
|
||||
# 3. ÉLETÚT ÉS JOGOSULTSÁG (A Történelem)
|
||||
print("📜 History tábla létrehozása (Kié mikor volt?)...")
|
||||
await conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS data.vehicle_history (
|
||||
id SERIAL PRIMARY KEY,
|
||||
vehicle_id INTEGER REFERENCES data.vehicles(id),
|
||||
user_id INTEGER REFERENCES data.users(id),
|
||||
|
||||
role VARCHAR(20) NOT NULL, -- 'OWNER' (Tulaj), 'DRIVER' (Sofőr), 'LEASE' (Lízingelő)
|
||||
|
||||
start_date DATE NOT NULL, -- Mikor vette át?
|
||||
end_date DATE, -- Mikor adta le? (Ha NULL, akkor nála van!)
|
||||
|
||||
start_mileage INTEGER, -- Óraállás átvételkor
|
||||
end_mileage INTEGER, -- Óraállás leadáskor
|
||||
|
||||
is_active BOOLEAN GENERATED ALWAYS AS (end_date IS NULL) STORED -- Segédmező a gyors kereséshez
|
||||
);
|
||||
"""))
|
||||
|
||||
# 4. KÖLTSÉGEK (Szeparált pénzügyek)
|
||||
print("💸 Costs tábla létrehozása...")
|
||||
await conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS data.costs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
vehicle_id INTEGER REFERENCES data.vehicles(id),
|
||||
user_id INTEGER REFERENCES data.users(id), -- Ki fizette? (Csak ő láthatja!)
|
||||
|
||||
cost_type VARCHAR(50) NOT NULL, -- FUEL, SERVICE, TAX, INSURANCE, LEASE...
|
||||
amount DECIMAL(10, 2) NOT NULL,
|
||||
date DATE NOT NULL,
|
||||
mileage_at_cost INTEGER,
|
||||
|
||||
description TEXT,
|
||||
document_url VARCHAR(255), -- Fotó linkje
|
||||
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
"""))
|
||||
|
||||
print("✅ KÉSZ! A Professzionális Adatmodell felépült.")
|
||||
await engine.dispose()
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(build_db())
|
||||
Reference in New Issue
Block a user