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())