59 lines
2.5 KiB
Python
Executable File
59 lines
2.5 KiB
Python
Executable File
import asyncio
|
|
import os
|
|
from sqlalchemy.ext.asyncio import create_async_engine
|
|
from sqlalchemy import text
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
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 upgrade_invites():
|
|
print(f"🔌 Kapcsolódás...")
|
|
engine = create_async_engine(DATABASE_URL)
|
|
|
|
async with engine.begin() as conn:
|
|
print("📨 Invitations (Meghívók) tábla létrehozása...")
|
|
# Ez tárolja a függőben lévő meghívásokat
|
|
await conn.execute(text("""
|
|
CREATE TABLE IF NOT EXISTS data.invitations (
|
|
id SERIAL PRIMARY KEY,
|
|
email VARCHAR(255) NOT NULL,
|
|
inviter_id INTEGER REFERENCES data.users(id), -- Ki hívta meg? (Cég)
|
|
role VARCHAR(20) NOT NULL, -- Milyen szerepre? (MANAGER, DRIVER)
|
|
access_level VARCHAR(20) DEFAULT 'FULL', -- A/B Sofőr szint
|
|
token VARCHAR(100) UNIQUE NOT NULL, -- A titkos link kódja
|
|
status VARCHAR(20) DEFAULT 'PENDING', -- PENDING, ACCEPTED, EXPIRED
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
expires_at TIMESTAMP
|
|
);
|
|
"""))
|
|
|
|
print("🤝 Fleet Members (Többcéges tagság) tábla létrehozása...")
|
|
# Ez teszi lehetővé, hogy valaki több céghez is tartozzon
|
|
await conn.execute(text("""
|
|
CREATE TABLE IF NOT EXISTS data.fleet_members (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER REFERENCES data.users(id), -- A Dolgozó
|
|
owner_id INTEGER REFERENCES data.users(id), -- A Cég / Tulajdonos
|
|
role VARCHAR(20) NOT NULL, -- FLEET_MANAGER, DRIVER
|
|
joined_at TIMESTAMP DEFAULT NOW(),
|
|
|
|
-- Egy ember egy cégnél csak egyszer szerepelhet
|
|
UNIQUE(user_id, owner_id)
|
|
);
|
|
"""))
|
|
|
|
# Takarítás: A régi 'parent_id' már nem kell, mert a fleet_members kiváltja
|
|
# De biztonságból egyelőre csak NULL-ra állítjuk, nem töröljük az oszlopot
|
|
# await conn.execute(text("UPDATE data.users SET parent_id = NULL;"))
|
|
|
|
print("✅ KÉSZ! A rendszer készen áll a biztonságos meghívókra.")
|
|
await engine.dispose()
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(upgrade_invites())
|