diff --git a/.env b/.env index 536ae28..9d78a65 100755 --- a/.env +++ b/.env @@ -92,9 +92,16 @@ MINIO_ROOT_PASSWORD='MiskociA74' MINIO_ACCESS_KEY=kincses MINIO_SECRET_KEY='MiskociA74' +# --- n8n CONFIG --- +N8N_DB_PASSWORD=MiskociA74 +# Az n8n-en belül a központi DB elérése: +# Host: shared-postgres +# User: service_finder_app # --- Frontend --- FRONTEND_BASE_URL=https://dev.profibot.hu/docs -GOOGLE_API_KEY=AIzaSyB3-Uo6qFBNi83hK01uoaUARtYHxERbtXg \ No newline at end of file +GOOGLE_API_KEY=AIzaSyB3-Uo6qFBNi83hK01uoaUARtYHxERbtXg + +RDW_APP_TOKEN=kSMUn0tvnmoM6TMSegLpFvKI8 \ No newline at end of file diff --git a/N8N/data/config b/N8N/data/config new file mode 100644 index 0000000..f334cc5 --- /dev/null +++ b/N8N/data/config @@ -0,0 +1,3 @@ +{ + "encryptionKey": "54T2Q0sTamS0GDOb8vyTtOQXBJxq3d0/" +} \ No newline at end of file diff --git a/N8N/data/n8nEventLog.log b/N8N/data/n8nEventLog.log new file mode 100644 index 0000000..e69de29 diff --git a/N8N/data/nodes/package.json b/N8N/data/nodes/package.json new file mode 100644 index 0000000..9e96546 --- /dev/null +++ b/N8N/data/nodes/package.json @@ -0,0 +1,5 @@ +{ + "name": "installed-nodes", + "private": true, + "dependencies": {} +} \ No newline at end of file diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index da43d41..b03dbb0 100755 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -14,7 +14,7 @@ from .asset import ( ) # Szerviz és Szakértelem (ÚJ) -from .service import ServiceProfile, ExpertiseTag, ServiceExpertise +from .service import ServiceProfile, ExpertiseTag, ServiceExpertise, ServiceStaging # Földrajzi adatok és Címek from .address import Address, GeoPostalCode, GeoStreet, GeoStreetType @@ -45,11 +45,13 @@ __all__ = [ "Organization", "OrganizationMember", "Asset", "AssetCatalog", "AssetCost", "AssetEvent", "AssetFinancials", "AssetTelemetry", "AssetReview", "ExchangeRate", - "ServiceProfile", "ExpertiseTag", "ServiceExpertise", # <--- HOZZÁADVA "Address", "GeoPostalCode", "GeoStreet", "GeoStreetType", "PointRule", "LevelConfig", "UserStats", "Badge", "UserBadge", "Rating", "PointsLedger", "SystemParameter", "Document", "Translation", "PendingAction", "SubscriptionTier", "OrganizationSubscription", "CreditTransaction", "ServiceSpecialty", "AuditLog", "VehicleOwnership", + # --- SZERVIZ MODUL (Tisztítva) --- + "ServiceProfile", "ExpertiseTag", "ServiceExpertise", "ServiceStaging", + # --- ALIASOK --- "Vehicle", "UserVehicle", "VehicleCatalog", "ServiceRecord" ] \ No newline at end of file diff --git a/backend/app/models/__pycache__/__init__.cpython-312.pyc b/backend/app/models/__pycache__/__init__.cpython-312.pyc index 37a7944..655b2d5 100644 Binary files a/backend/app/models/__pycache__/__init__.cpython-312.pyc and b/backend/app/models/__pycache__/__init__.cpython-312.pyc differ diff --git a/backend/app/models/__pycache__/service.cpython-312.pyc b/backend/app/models/__pycache__/service.cpython-312.pyc index d685221..8c68f66 100644 Binary files a/backend/app/models/__pycache__/service.cpython-312.pyc and b/backend/app/models/__pycache__/service.cpython-312.pyc differ diff --git a/backend/app/models/service.py b/backend/app/models/service.py index 83527bd..e286b6a 100644 --- a/backend/app/models/service.py +++ b/backend/app/models/service.py @@ -69,4 +69,46 @@ class ServiceExpertise(Base): validation_level = Column(Integer, default=0) service = relationship("ServiceProfile", back_populates="expertises") - expertise = relationship("ExpertiseTag") \ No newline at end of file + expertise = relationship("ExpertiseTag") + +class ServiceStaging(Base): + """ + Átmeneti tábla a Hunter (n8n/scraping) adatoknak. + A címek itt már darabolva (IRSZ, Város, Utca, Házszám) szerepelnek + a jobb kereshetőség és validálás érdekében. + """ + __tablename__ = "service_staging" + __table_args__ = {"schema": "data"} + + id = Column(Integer, primary_key=True, index=True) + + # --- Alapadatok --- + name = Column(String, nullable=False, index=True) + + # --- Strukturált cím adatok (A kérésedre bontva) --- + postal_code = Column(String(10), nullable=True, index=True) # Irányítószám + city = Column(String(100), nullable=True, index=True) # Település + street = Column(String(255), nullable=True) # Utca és közterület jellege (pl. Diófa utca) + house_number = Column(String(50), nullable=True) # Házszám, emelet, ajtó + full_address = Column(String, nullable=True) # Az eredeti, egybefüggő cím (ha van) + + # --- Elérhetőségek --- + contact_phone = Column(String, nullable=True) + email = Column(String, nullable=True) + website = Column(String, nullable=True) + + # --- Forrás és Azonosítás --- + source = Column(String(50), nullable=True, index=True) # Forrás: 'OSM', 'Facebook', stb. + external_id = Column(String(100), nullable=True, index=True) # Külső ID (pl. OSM node id) + + # --- Adatmentés --- + # Itt landol a teljes robot-zsákmány minden apró részlettel + raw_data = Column(JSONB, server_default=text("'{}'::jsonb")) + + # --- Státusz és Bizalom --- + # status lehet: pending (feldolgozás alatt), enriched (nyomozó által bővített), + # duplicate (már megvan), verified (élesítésre kész) + status = Column(String(20), server_default=text("'pending'"), index=True) + trust_score = Column(Integer, default=0) + + created_at = Column(DateTime(timezone=True), server_default=func.now()) \ No newline at end of file diff --git a/backend/app/workers/__pycache__/catalog_robot.cpython-312.pyc b/backend/app/workers/__pycache__/catalog_robot.cpython-312.pyc index 0dd22e3..1b2569b 100644 Binary files a/backend/app/workers/__pycache__/catalog_robot.cpython-312.pyc and b/backend/app/workers/__pycache__/catalog_robot.cpython-312.pyc differ diff --git a/backend/app/workers/catalog_robot.py b/backend/app/workers/catalog_robot.py index 7151f09..d86e232 100644 --- a/backend/app/workers/catalog_robot.py +++ b/backend/app/workers/catalog_robot.py @@ -3,196 +3,177 @@ import httpx import logging import json import re +import os +import datetime from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, func, or_, text from app.db.session import SessionLocal from app.models.asset import AssetCatalog logging.basicConfig(level=logging.INFO) -logger = logging.getLogger("Robot1-Master-Fleet-DeepDive") +logger = logging.getLogger("Robot1-Ghost-Commander-v1.1.9") class CatalogScout: """ - Robot 1: Univerzális Járműkatalógus Építő és Audit Robot. - Logika: EU-Elsődlegesség (CarQuery) -> US-Kiegészítés (NHTSA). - Kategóriák: Car, Motorcycle, Bus, Truck, Trailer, ATV, Marine, Aerial. - Szekvenciák: - 1. Deep Dive (Motorvariánsok gyűjtése) - 2. Audit (Hiányos adatok pótlása) + Robot 1.1.9: Environment Master. + - .env alapú hitelesítés (RDW App Token) + - Prioritás: RDW (EU) -> NHTSA (US) -> CarQuery (Ban-figyeléssel) + - 2.5s lekérési frissítés a biztonságért """ CQ_URL = "https://www.carqueryapi.com/api/0.3/" NHTSA_BASE = "https://vpic.nhtsa.dot.gov/api/vehicles/GetModelsForMakeYear/make/" - + RDW_URL = "https://opendata.rdw.nl/resource/ed7h-m8uz.json" + + # Adatok beolvasása környezeti változókból + RDW_TOKEN = os.getenv("RDW_APP_TOKEN") + HEADERS = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", - "Accept": "application/json" + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", + "Accept": "application/json", + "X-App-Token": RDW_TOKEN } + + # BAN FIGYELŐ ÁLLAPOT + cq_banned_until = None - # --- KATEGÓRIA DEFINÍCIÓK (Szigorú flotta-szétválasztás) --- + # --- KATEGÓRIA DEFINÍCIÓK (Szigorúan az eredeti lista szerint) --- MOTO_MAKES = ['ducati', 'ktm', 'triumph', 'aprilia', 'benelli', 'vespa', 'simson', 'mz', 'etz', 'jawa', 'husqvarna', 'gasgas', 'sherco'] MARINE_IDS = ['DF', 'DT', 'OUTBOARD', 'MARINE', 'JET SKI', 'SEA-DOO', 'WAVERUNNER', 'YACHT', 'BOAT'] AERIAL_IDS = ['CESSNA', 'PIPER', 'AIRBUS', 'BOEING', 'HELICOPTER', 'AIRCRAFT', 'BEECHCRAFT', 'EMBRAER', 'DRONE'] ATV_IDS = ['LT-', 'LTZ', 'LTR', 'KINGQUAD', 'QUAD', 'POLARIS', 'CAN-AM', 'MULE', 'RZR', 'ARCTIC CAT', 'UTV', 'SIDE-BY-SIDE'] - - # Versenygépek (Motorkerékpárként, üzemóra alapú szervizhez) RACING_IDS = ['RM-Z', 'KX', 'CRF', 'YZ', 'SX-F', 'XC-W', 'RM125', 'RM250', 'CR125', 'CR250', 'MC450'] MOTO_KEYWORDS = ['CBR', 'GSX', 'YZF', 'NINJA', 'Z1000', 'DR-Z', 'MT-0', 'V-STROM', 'ADVENTURE', 'SCRAMBLER', 'CBF', 'VFR', 'HAYABUSA'] - - # Flotta kategóriák szétválasztása BUS_KEYWORDS = ['BUS', 'COACH', 'INTERCITY', 'SHUTTLE', 'TRANSIT'] TRUCK_KEYWORDS = ['TRUCK', 'SEMI', 'TRACTOR', 'HAULER', 'ACTROS', 'MAN', 'SCANIA', 'IVECO', 'VOLVO FH', 'DAF', 'TGX', 'RENAULT T'] TRAILER_KEYWORDS = ['TRAILER', 'SEMITRAILER', 'PÓTKOCSI', 'UTÁNFUTÓ', 'SCHMITZ', 'KRONE', 'KÖGEL'] + FALLBACK_BRANDS = ['Audi', 'BMW', 'Mercedes-Benz', 'Volkswagen', 'Toyota', 'Ford', 'Honda', 'Hyundai', 'Kia', 'Mazda', 'Nissan', 'Volvo', 'Skoda', 'Opel', 'Tesla', 'Lexus', 'Porsche', 'Dacia', 'Suzuki'] + @classmethod def identify_class(cls, make: str, model: str) -> str: - """Kategória meghatározás flottakezelési szempontok alapján.""" - m_full = f"{make} {model}".upper() - + m_full = f"{str(make)} {str(model)}".upper() if any(x in m_full for x in cls.AERIAL_IDS): return "aerial" if any(x in m_full for x in cls.MARINE_IDS): return "marine" if any(x in m_full for x in cls.ATV_IDS): return "atv" - - # Motorkerékpárok (Versenygépekkel együtt) - if any(x in m_full for x in cls.RACING_IDS) or make.lower() in cls.MOTO_MAKES: + if any(x in m_full or str(make).lower() in cls.MOTO_MAKES for x in (cls.RACING_IDS + cls.MOTO_KEYWORDS)): return "motorcycle" - if any(x in m_full for x in cls.MOTO_KEYWORDS): - return "motorcycle" - - # Flotta (Busz vs Teherautó vs Pótkocsi) if any(x in m_full for x in cls.BUS_KEYWORDS): return "bus" if any(x in m_full for x in cls.TRUCK_KEYWORDS): return "truck" if any(x in m_full for x in cls.TRAILER_KEYWORDS): return "trailer" - return "car" @classmethod async def fetch_api(cls, url, params=None, is_cq=False): - """API hívó JSONP tisztítással és sebességkorlátozással.""" - async with httpx.AsyncClient(headers=cls.HEADERS) as client: + if is_cq and cls.cq_banned_until and datetime.datetime.now() < cls.cq_banned_until: + return "SILENT_SKIP" + + async with httpx.AsyncClient(headers=cls.HEADERS, follow_redirects=True) as client: try: - # 1.5s várakozás a Free API limitjei miatt - await asyncio.sleep(1.5) + # CarQuery: 5.0mp szünet (Hard Ban ellen), többi: 2.5mp (User kérése szerint) + await asyncio.sleep(5.0 if is_cq else 2.5) resp = await client.get(url, params=params, timeout=35) - if resp.status_code != 200: return None + if resp.status_code == 403 or "denied" in resp.text.lower(): + logger.error("🚫 CarQuery BAN! 2 óra kényszerpihenő aktiválva.") + cls.cq_banned_until = datetime.datetime.now() + datetime.timedelta(hours=2) + return "DENIED" + + if resp.status_code != 200: return None content = resp.text.strip() if is_cq: - # Robusztusabb JSONP tisztítás regexszel match = re.search(r'(\{.*\}|\[.*\])', content, re.DOTALL) - if match: - content = match.group(0) - elif "(" in content and ")" in content: - content = content[content.find("(") + 1 : content.rfind(")")] - + if match: content = match.group(0) return json.loads(content) except Exception as e: - logger.error(f"❌ API hiba: {e} | URL: {url}") + logger.error(f"❌ API hiba: {e}") return None @classmethod - async def enrich_missing_data(cls): - """ - SEQUENCE 2: Audit Robot. - Keresi a hiányos technikai adatokat és próbálja dúsítani őket. - """ - logger.info("🔍 Audit szekvencia indítása (hiányos adatok keresése)...") - async with SessionLocal() as db: - # Keressük azokat a rekordokat, ahol hiányzik a köbcenti vagy a teljesítmény - stmt = select(AssetCatalog).where( - or_( - AssetCatalog.factory_data == text("'{}'::jsonb"), - AssetCatalog.engine_variant == 'Standard', - AssetCatalog.fuel_type == None - ) - ).limit(100) # Egyszerre csak 100-at nézünk + async def is_model_processed(cls, db: AsyncSession, make: str, model: str, year: int): + stmt = select(AssetCatalog.id).where(AssetCatalog.make == make, AssetCatalog.model == model, AssetCatalog.year_from == year).limit(1) + result = await db.execute(stmt) + return result.scalars().first() is not None + + @classmethod + async def auto_heal(cls, db: AsyncSession, cq_active: bool): + logger.info("🛠️ Auto-Heal: Hiányos rekordok dúsítása...") + stmt = select(AssetCatalog).where(AssetCatalog.engine_variant == 'Standard', AssetCatalog.fuel_type == 'Unknown').limit(20) + results = await db.execute(stmt) + for r in results.scalars().all(): + # 1. RDW javítás (Holland Open Data + Token) + rdw = await cls.fetch_api(cls.RDW_URL, {"merk": r.make.upper(), "handelsbenaming": r.model.upper(), "$limit": 1}) + if rdw and isinstance(rdw, list) and len(rdw) > 0: + item = rdw[0] + r.fuel_type = item.get("brandstof_omschrijving", "Unknown") + r.factory_data.update({"hp": item.get("netto_maximum_vermogen"), "cc": item.get("cilinderinhoud"), "source": "heal_v1.9_rdw"}) + continue - results = await db.execute(stmt) - incomplete_records = results.scalars().all() - - for record in incomplete_records: - logger.info(f"🛠 Audit: {record.make} {record.model} ({record.year_from}) dúsítása...") - pass + # 2. CQ javítás (Ha nem vagyunk kitiltva) + if cq_active: + t_data = await cls.fetch_api(cls.CQ_URL, {"cmd": "getTrims", "make": r.make.lower(), "model": r.model, "year": r.year_from}, is_cq=True) + if t_data and t_data not in ["DENIED", "SILENT_SKIP"] and "Trims" in t_data: + t = t_data["Trims"][0] + r.engine_variant = t.get("model_trim") or "Standard" + r.factory_data.update({"hp": t.get("model_engine_power_ps"), "cc": t.get("model_engine_cc"), "source": "heal_v1.9_cq"}) + await db.commit() @classmethod async def run(cls): - logger.info("🤖 Robot 1: EU-Elsődlegességű Deep Dive szinkron indítása...") - - # 2026-tól visszafelé haladunk (Modern flották prioritása) - for year in range(2026, 1989, -1): - logger.info(f"📅 Feldolgozás alatt: {year} évjárat") - - makes_data = await cls.fetch_api(cls.CQ_URL, {"cmd": "getMakes", "year": year}, is_cq=True) - if not makes_data or "Makes" not in makes_data: continue + logger.info(f"🤖 Robot 1.9.2 indítása (RDW Token: {'Aktív' if cls.RDW_TOKEN else 'HIÁNYZIK!'})") - for make_entry in makes_data.get("Makes", []): - m_id = make_entry["make_id"] - m_display = make_entry["make_display"] - - # MODELL GYŰJTÉS: EU + US fúzió + for year in range(2026, 1989, -1): + logger.info(f"📅 --- CIKLUS: {year} ---") + + cq_now_active = not (cls.cq_banned_until and datetime.datetime.now() < cls.cq_banned_until) + + async with SessionLocal() as db: + await cls.auto_heal(db, cq_now_active) + + # 1. MÁRKALISTA (NHTSA + Fallback) + makes_to_process = [] + for b in cls.FALLBACK_BRANDS: + makes_to_process.append({"id": b.lower(), "display": b}) + + for make in makes_to_process: models_to_fetch = set() - # 🇪🇺 EU Forrás - cq_models = await cls.fetch_api(cls.CQ_URL, {"cmd": "getModels", "make": m_id, "year": year}, is_cq=True) - if cq_models and cq_models.get("Models"): - for m in cq_models["Models"]: models_to_fetch.add(m["model_name"]) - - # 🇺🇸 US Forrás kiegészítés - n_data = await cls.fetch_api(f"{cls.NHTSA_BASE}{m_display}/modelyear/{year}?format=json") + # A: NHTSA (US) + n_data = await cls.fetch_api(f"{cls.NHTSA_BASE}{make['display']}/modelyear/{year}?format=json") if n_data and n_data.get("Results"): for r in n_data["Results"]: models_to_fetch.add(r["Model_Name"]) + # B: RDW (Holland) - Tokennel védve + rdw_m = await cls.fetch_api(cls.RDW_URL, {"merk": make['display'].upper(), "$limit": 30}) + if rdw_m and isinstance(rdw_m, list): + for r in rdw_m: models_to_fetch.add(r.get("handelsbenaming")) + async with SessionLocal() as db: for model_name in models_to_fetch: - # DEEP DIVE: Motorvariánsok (Trims) lekérése - trims_data = await cls.fetch_api(cls.CQ_URL, { - "cmd": "getTrims", "make": m_id, "model": model_name, "year": year - }, is_cq=True) + if not model_name or await cls.is_model_processed(db, make["display"], model_name, year): + continue + + # C: CarQuery (Csak ha nincs ban) + found_trims = [] + t_data = await cls.fetch_api(cls.CQ_URL, {"cmd": "getTrims", "make": make["id"], "model": model_name, "year": year}, is_cq=True) + if t_data and t_data not in ["DENIED", "SILENT_SKIP"] and "Trims" in t_data: + found_trims = t_data["Trims"] - found_trims = trims_data.get("Trims", []) if trims_data else [] - - # Ha nincs trim adat, egy standard sor mindenképpen kell if not found_trims: - found_trims = [{"model_trim": "Standard", "model_engine_fuel": None}] + found_trims = [{"model_trim": "Standard", "model_engine_fuel": "Unknown"}] for t in found_trims: - variant = t.get("model_trim") or "Standard" - fuel = t.get("model_engine_fuel") or "Unknown" - v_class = cls.identify_class(m_display, model_name) - - # Szigorú duplikáció-ellenőrzés (UniqueConstraint alapú lekérdezés) - stmt = select(AssetCatalog).where( - AssetCatalog.make == m_display, - AssetCatalog.model == model_name, - AssetCatalog.year_from == year, - AssetCatalog.engine_variant == variant, - AssetCatalog.fuel_type == fuel - ) - result = await db.execute(stmt) - if not result.scalars().first(): - db.add(AssetCatalog( - make=m_display, - model=model_name, - year_from=year, - engine_variant=variant, - fuel_type=fuel, - vehicle_class=v_class, - factory_data={ - "cc": t.get("model_engine_cc"), - "hp": t.get("model_engine_power_ps"), - "cylinders": t.get("model_engine_cyl"), - "transmission": t.get("model_transmission_type"), - "source": "master_v7_deep_dive", - "sync_date": str(func.now()) - } - )) - - # JAVÍTÁS: Márkánkénti véglegesítés az adatbázisban a session-ön belül + db.add(AssetCatalog( + make=make["display"], model=model_name, year_from=year, + engine_variant=t.get("model_trim") or "Standard", + fuel_type=t.get("model_engine_fuel") or "Unknown", + vehicle_class=cls.identify_class(make["display"], model_name), + factory_data={ + "hp": t.get("model_engine_power_ps"), "cc": t.get("model_engine_cc"), + "source": "ghost_v1.9.2", "sync_date": str(datetime.datetime.now()) + } + )) await db.commit() - logger.info(f"✅ {m_display} ({year}) összes variánsa rögzítve.") - - # SEQUENCE 2: Miután végeztünk a fő listával, nézzük meg a hiányosakat - await cls.enrich_missing_data() if __name__ == "__main__": asyncio.run(CatalogScout.run()) \ No newline at end of file diff --git a/backend/migrations/versions/0adbe75a0b3f_complete_sync.py b/backend/migrations/versions/0adbe75a0b3f_complete_sync.py deleted file mode 100644 index 68163e6..0000000 --- a/backend/migrations/versions/0adbe75a0b3f_complete_sync.py +++ /dev/null @@ -1,554 +0,0 @@ -"""complete_sync - -Revision ID: 0adbe75a0b3f -Revises: -Create Date: 2026-02-09 17:49:12.955967 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision: str = '0adbe75a0b3f' -down_revision: Union[str, Sequence[str], None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('badges', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(), nullable=False), - sa.Column('description', sa.String(), nullable=False), - sa.Column('icon_url', sa.String(), nullable=True), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('name'), - schema='data' - ) - op.create_index(op.f('ix_data_badges_id'), 'badges', ['id'], unique=False, schema='data') - op.create_table('exchange_rates', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('base_currency', sa.String(length=3), nullable=True), - sa.Column('target_currency', sa.String(length=3), nullable=True), - sa.Column('rate', sa.Numeric(precision=18, scale=6), nullable=True), - sa.Column('rate_date', sa.DateTime(), nullable=True), - sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('geo_postal_codes', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('country_code', sa.String(length=5), nullable=True), - sa.Column('zip_code', sa.String(length=10), nullable=False), - sa.Column('city', sa.String(length=100), nullable=False), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('geo_street_types', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(length=50), nullable=False), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('name'), - schema='data' - ) - op.create_table('level_configs', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('level_number', sa.Integer(), nullable=False), - sa.Column('min_points', sa.Integer(), nullable=False), - sa.Column('rank_name', sa.String(), nullable=False), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('level_number'), - schema='data' - ) - op.create_index(op.f('ix_data_level_configs_id'), 'level_configs', ['id'], unique=False, schema='data') - op.create_table('point_rules', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('action_key', sa.String(), nullable=False), - sa.Column('points', sa.Integer(), nullable=False), - sa.Column('description', sa.String(), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_point_rules_action_key'), 'point_rules', ['action_key'], unique=True, schema='data') - op.create_index(op.f('ix_data_point_rules_id'), 'point_rules', ['id'], unique=False, schema='data') - op.create_table('regional_settings', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('country_code', sa.String(), nullable=False), - sa.Column('currency', sa.String(), nullable=False), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('country_code'), - schema='data' - ) - op.create_index(op.f('ix_data_regional_settings_id'), 'regional_settings', ['id'], unique=False, schema='data') - op.create_table('service_specialties', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('parent_id', sa.Integer(), nullable=True), - sa.Column('name', sa.String(), nullable=False), - sa.Column('slug', sa.String(), nullable=True), - sa.ForeignKeyConstraint(['parent_id'], ['data.service_specialties.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('slug'), - schema='data' - ) - op.create_table('subscription_tiers', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(), nullable=True), - sa.Column('rules', sa.JSON(), nullable=True), - sa.Column('is_custom', sa.Boolean(), nullable=True), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('name'), - schema='data' - ) - op.create_table('system_parameters', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('key', sa.String(length=50), nullable=True), - sa.Column('value', sa.JSON(), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=True), - sa.Column('description', sa.String(), nullable=True), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_system_parameters_id'), 'system_parameters', ['id'], unique=False, schema='data') - op.create_index(op.f('ix_data_system_parameters_key'), 'system_parameters', ['key'], unique=True, schema='data') - op.create_table('vehicle_catalog', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('make', sa.String(), nullable=False), - sa.Column('model', sa.String(), nullable=False), - sa.Column('generation', sa.String(), nullable=True), - sa.Column('year_from', sa.Integer(), nullable=True), - sa.Column('year_to', sa.Integer(), nullable=True), - sa.Column('vehicle_class', sa.String(), nullable=True), - sa.Column('fuel_type', sa.String(), nullable=True), - sa.Column('engine_code', sa.String(), nullable=True), - sa.Column('factory_data', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_vehicle_catalog_id'), 'vehicle_catalog', ['id'], unique=False, schema='data') - op.create_index(op.f('ix_data_vehicle_catalog_make'), 'vehicle_catalog', ['make'], unique=False, schema='data') - op.create_index(op.f('ix_data_vehicle_catalog_model'), 'vehicle_catalog', ['model'], unique=False, schema='data') - op.create_table('addresses', - sa.Column('id', sa.UUID(), nullable=False), - sa.Column('postal_code_id', sa.Integer(), nullable=True), - sa.Column('street_name', sa.String(length=200), nullable=False), - sa.Column('street_type', sa.String(length=50), nullable=False), - sa.Column('house_number', sa.String(length=50), nullable=False), - sa.Column('stairwell', sa.String(length=20), nullable=True), - sa.Column('floor', sa.String(length=20), nullable=True), - sa.Column('door', sa.String(length=20), nullable=True), - sa.Column('parcel_id', sa.String(length=50), nullable=True), - sa.Column('full_address_text', sa.Text(), nullable=True), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.ForeignKeyConstraint(['postal_code_id'], ['data.geo_postal_codes.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('assets', - sa.Column('id', sa.UUID(), nullable=False), - sa.Column('vin', sa.String(length=17), nullable=False), - sa.Column('license_plate', sa.String(length=20), nullable=True), - sa.Column('name', sa.String(), nullable=True), - sa.Column('year_of_manufacture', sa.Integer(), nullable=True), - sa.Column('catalog_id', sa.Integer(), nullable=True), - sa.Column('is_verified', sa.Boolean(), nullable=True), - sa.Column('status', sa.String(length=20), nullable=True), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True), - sa.ForeignKeyConstraint(['catalog_id'], ['data.vehicle_catalog.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_assets_license_plate'), 'assets', ['license_plate'], unique=False, schema='data') - op.create_index(op.f('ix_data_assets_vin'), 'assets', ['vin'], unique=True, schema='data') - op.create_table('geo_streets', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('postal_code_id', sa.Integer(), nullable=True), - sa.Column('name', sa.String(length=200), nullable=False), - sa.ForeignKeyConstraint(['postal_code_id'], ['data.geo_postal_codes.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('asset_events', - sa.Column('id', sa.UUID(), nullable=False), - sa.Column('asset_id', sa.UUID(), nullable=False), - sa.Column('event_type', sa.String(length=50), nullable=False), - sa.Column('recorded_mileage', sa.Integer(), nullable=True), - sa.Column('data', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.ForeignKeyConstraint(['asset_id'], ['data.assets.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('asset_financials', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('asset_id', sa.UUID(), nullable=True), - sa.Column('acquisition_price', sa.Numeric(precision=18, scale=2), nullable=True), - sa.Column('acquisition_date', sa.DateTime(), nullable=True), - sa.Column('financing_type', sa.String(), nullable=True), - sa.Column('residual_value_estimate', sa.Numeric(precision=18, scale=2), nullable=True), - sa.ForeignKeyConstraint(['asset_id'], ['data.assets.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('asset_id'), - schema='data' - ) - op.create_table('asset_telemetry', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('asset_id', sa.UUID(), nullable=True), - sa.Column('current_mileage', sa.Integer(), nullable=True), - sa.Column('mileage_unit', sa.String(length=10), nullable=True), - sa.Column('vqi_score', sa.Numeric(precision=5, scale=2), nullable=True), - sa.Column('dbs_score', sa.Numeric(precision=5, scale=2), nullable=True), - sa.ForeignKeyConstraint(['asset_id'], ['data.assets.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('asset_id'), - schema='data' - ) - op.create_table('persons', - sa.Column('id', sa.BigInteger(), nullable=False), - sa.Column('id_uuid', sa.UUID(), nullable=False), - sa.Column('address_id', sa.UUID(), nullable=True), - sa.Column('last_name', sa.String(), nullable=False), - sa.Column('first_name', sa.String(), nullable=False), - sa.Column('mothers_last_name', sa.String(), nullable=True), - sa.Column('mothers_first_name', sa.String(), nullable=True), - sa.Column('birth_place', sa.String(), nullable=True), - sa.Column('birth_date', sa.DateTime(), nullable=True), - sa.Column('phone', sa.String(), nullable=True), - sa.Column('identity_docs', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.Column('medical_emergency', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.Column('ice_contact', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=False), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True), - sa.ForeignKeyConstraint(['address_id'], ['data.addresses.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('id_uuid'), - schema='data' - ) - op.create_index(op.f('ix_data_persons_id'), 'persons', ['id'], unique=False, schema='data') - op.create_table('users', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('email', sa.String(), nullable=False), - sa.Column('hashed_password', sa.String(), nullable=True), - sa.Column('role', sa.Enum('admin', 'user', 'service', 'fleet_manager', 'driver', name='userrole'), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=True), - sa.Column('region_code', sa.String(), nullable=True), - sa.Column('is_deleted', sa.Boolean(), nullable=True), - sa.Column('person_id', sa.BigInteger(), nullable=True), - sa.Column('preferred_language', sa.String(length=5), nullable=True), - sa.Column('preferred_currency', sa.String(length=3), nullable=True), - sa.Column('timezone', sa.String(length=50), nullable=True), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.ForeignKeyConstraint(['person_id'], ['data.persons.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_users_email'), 'users', ['email'], unique=True, schema='data') - op.create_index(op.f('ix_data_users_id'), 'users', ['id'], unique=False, schema='data') - op.create_table('asset_reviews', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('asset_id', sa.UUID(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('overall_rating', sa.Integer(), nullable=True), - sa.Column('criteria_scores', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.Column('comment', sa.Text(), nullable=True), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.ForeignKeyConstraint(['asset_id'], ['data.assets.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('audit_logs', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('target_type', sa.String(), nullable=True), - sa.Column('target_id', sa.String(), nullable=True), - sa.Column('action', sa.String(), nullable=False), - sa.Column('changes', sa.JSON(), nullable=True), - sa.Column('timestamp', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_audit_logs_id'), 'audit_logs', ['id'], unique=False, schema='data') - op.create_index(op.f('ix_data_audit_logs_target_id'), 'audit_logs', ['target_id'], unique=False, schema='data') - op.create_index(op.f('ix_data_audit_logs_target_type'), 'audit_logs', ['target_type'], unique=False, schema='data') - op.create_table('documents', - sa.Column('id', sa.UUID(), nullable=False), - sa.Column('parent_type', sa.String(length=20), nullable=False), - sa.Column('parent_id', sa.String(length=50), nullable=False), - sa.Column('doc_type', sa.String(length=50), nullable=True), - sa.Column('original_name', sa.String(length=255), nullable=False), - sa.Column('file_hash', sa.String(length=64), nullable=False), - sa.Column('file_ext', sa.String(length=10), nullable=True), - sa.Column('mime_type', sa.String(length=100), nullable=True), - sa.Column('file_size', sa.Integer(), nullable=True), - sa.Column('has_thumbnail', sa.Boolean(), nullable=True), - sa.Column('thumbnail_path', sa.String(length=255), nullable=True), - sa.Column('uploaded_by', sa.Integer(), nullable=True), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.ForeignKeyConstraint(['uploaded_by'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('organizations', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('address_id', sa.UUID(), nullable=True), - sa.Column('full_name', sa.String(), nullable=False), - sa.Column('name', sa.String(), nullable=False), - sa.Column('display_name', sa.String(length=50), nullable=True), - sa.Column('default_currency', sa.String(length=3), nullable=True), - sa.Column('country_code', sa.String(length=2), nullable=True), - sa.Column('language', sa.String(length=5), nullable=True), - sa.Column('address_zip', sa.String(length=10), nullable=True), - sa.Column('address_city', sa.String(length=100), nullable=True), - sa.Column('address_street_name', sa.String(length=150), nullable=True), - sa.Column('address_street_type', sa.String(length=50), nullable=True), - sa.Column('address_house_number', sa.String(length=20), nullable=True), - sa.Column('address_hrsz', sa.String(length=50), nullable=True), - sa.Column('address_stairwell', sa.String(length=20), nullable=True), - sa.Column('address_floor', sa.String(length=20), nullable=True), - sa.Column('address_door', sa.String(length=20), nullable=True), - sa.Column('tax_number', sa.String(length=20), nullable=True), - sa.Column('reg_number', sa.String(length=50), nullable=True), - sa.Column('org_type', postgresql.ENUM('individual', 'service', 'service_provider', 'fleet_owner', 'club', 'business', name='orgtype', schema='data', inherit_schema=True), nullable=True), - sa.Column('status', sa.String(length=30), nullable=True), - sa.Column('is_deleted', sa.Boolean(), nullable=True), - sa.Column('notification_settings', sa.JSON(), server_default=sa.text('\'{ "notify_owner": true, "alert_days_before": [30, 15, 7, 1] }\'::jsonb'), nullable=True), - sa.Column('external_integration_config', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.Column('owner_id', sa.Integer(), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=True), - sa.Column('is_transferable', sa.Boolean(), nullable=True), - sa.Column('is_verified', sa.Boolean(), nullable=True), - sa.Column('verification_expires_at', sa.DateTime(timezone=True), nullable=True), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True), - sa.ForeignKeyConstraint(['address_id'], ['data.addresses.id'], ), - sa.ForeignKeyConstraint(['owner_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_organizations_id'), 'organizations', ['id'], unique=False, schema='data') - op.create_index(op.f('ix_data_organizations_tax_number'), 'organizations', ['tax_number'], unique=True, schema='data') - op.create_table('points_ledger', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('points', sa.Integer(), nullable=False), - sa.Column('reason', sa.String(), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_points_ledger_id'), 'points_ledger', ['id'], unique=False, schema='data') - op.create_table('ratings', - sa.Column('id', sa.UUID(), nullable=False), - sa.Column('author_id', sa.Integer(), nullable=False), - sa.Column('target_type', sa.String(length=20), nullable=False), - sa.Column('target_id', sa.UUID(), nullable=False), - sa.Column('score', sa.Integer(), nullable=False), - sa.Column('comment', sa.String(), nullable=True), - sa.ForeignKeyConstraint(['author_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('user_badges', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('badge_id', sa.Integer(), nullable=False), - sa.Column('earned_at', sa.DateTime(), nullable=False), - sa.ForeignKeyConstraint(['badge_id'], ['data.badges.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_user_badges_id'), 'user_badges', ['id'], unique=False, schema='data') - op.create_table('user_stats', - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('total_xp', sa.Integer(), nullable=False), - sa.Column('social_points', sa.Integer(), nullable=False), - sa.Column('current_level', sa.Integer(), nullable=False), - sa.Column('updated_at', sa.DateTime(), nullable=False), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('user_id'), - schema='data' - ) - op.create_table('vehicle_ownerships', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('vehicle_id', sa.UUID(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('start_date', sa.Date(), nullable=False), - sa.Column('end_date', sa.Date(), nullable=True), - sa.Column('notes', sa.Text(), nullable=True), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.ForeignKeyConstraint(['vehicle_id'], ['data.assets.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_vehicle_ownerships_id'), 'vehicle_ownerships', ['id'], unique=False, schema='data') - op.create_table('verification_tokens', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('token', sa.UUID(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('token_type', sa.String(length=20), nullable=False), - sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False), - sa.Column('is_used', sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ondelete='CASCADE'), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('token'), - schema='data' - ) - op.create_index(op.f('ix_data_verification_tokens_id'), 'verification_tokens', ['id'], unique=False, schema='data') - op.create_table('wallets', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('coin_balance', sa.Numeric(precision=18, scale=2), nullable=True), - sa.Column('credit_balance', sa.Numeric(precision=18, scale=2), nullable=True), - sa.Column('currency', sa.String(length=3), nullable=True), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('user_id'), - schema='data' - ) - op.create_index(op.f('ix_data_wallets_id'), 'wallets', ['id'], unique=False, schema='data') - op.create_table('asset_assignments', - sa.Column('id', sa.UUID(), nullable=False), - sa.Column('asset_id', sa.UUID(), nullable=False), - sa.Column('organization_id', sa.Integer(), nullable=False), - sa.Column('assigned_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('released_at', sa.DateTime(timezone=True), nullable=True), - sa.Column('status', sa.String(length=30), nullable=True), - sa.ForeignKeyConstraint(['asset_id'], ['data.assets.id'], ), - sa.ForeignKeyConstraint(['organization_id'], ['data.organizations.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('asset_costs', - sa.Column('id', sa.UUID(), nullable=False), - sa.Column('asset_id', sa.UUID(), nullable=False), - sa.Column('organization_id', sa.Integer(), nullable=False), - sa.Column('driver_id', sa.Integer(), nullable=True), - sa.Column('cost_type', sa.String(length=50), nullable=False), - sa.Column('amount', sa.Numeric(precision=18, scale=2), nullable=False), - sa.Column('currency', sa.String(length=3), nullable=True), - sa.Column('net_amount', sa.Numeric(precision=18, scale=2), nullable=True), - sa.Column('vat_rate', sa.Numeric(precision=5, scale=2), nullable=True), - sa.Column('exchange_rate_at_cost', sa.Numeric(precision=18, scale=6), nullable=True), - sa.Column('date', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('mileage_at_cost', sa.Integer(), nullable=True), - sa.Column('data', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.ForeignKeyConstraint(['asset_id'], ['data.assets.id'], ), - sa.ForeignKeyConstraint(['driver_id'], ['data.users.id'], ), - sa.ForeignKeyConstraint(['organization_id'], ['data.organizations.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('credit_logs', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('org_id', sa.Integer(), nullable=True), - sa.Column('amount', sa.Numeric(precision=10, scale=2), nullable=True), - sa.Column('description', sa.String(), nullable=True), - sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), - sa.ForeignKeyConstraint(['org_id'], ['data.organizations.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('org_subscriptions', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('org_id', sa.Integer(), nullable=True), - sa.Column('tier_id', sa.Integer(), nullable=True), - sa.Column('valid_from', sa.DateTime(), server_default=sa.text('now()'), nullable=True), - sa.Column('valid_until', sa.DateTime(), nullable=True), - sa.Column('is_active', sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint(['org_id'], ['data.organizations.id'], ), - sa.ForeignKeyConstraint(['tier_id'], ['data.subscription_tiers.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_table('organization_members', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('organization_id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('role', sa.String(), nullable=True), - sa.Column('permissions', sa.JSON(), server_default=sa.text("'{}'::jsonb"), nullable=True), - sa.ForeignKeyConstraint(['organization_id'], ['data.organizations.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['data.users.id'], ), - sa.PrimaryKeyConstraint('id'), - schema='data' - ) - op.create_index(op.f('ix_data_organization_members_id'), 'organization_members', ['id'], unique=False, schema='data') - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_index(op.f('ix_data_organization_members_id'), table_name='organization_members', schema='data') - op.drop_table('organization_members', schema='data') - op.drop_table('org_subscriptions', schema='data') - op.drop_table('credit_logs', schema='data') - op.drop_table('asset_costs', schema='data') - op.drop_table('asset_assignments', schema='data') - op.drop_index(op.f('ix_data_wallets_id'), table_name='wallets', schema='data') - op.drop_table('wallets', schema='data') - op.drop_index(op.f('ix_data_verification_tokens_id'), table_name='verification_tokens', schema='data') - op.drop_table('verification_tokens', schema='data') - op.drop_index(op.f('ix_data_vehicle_ownerships_id'), table_name='vehicle_ownerships', schema='data') - op.drop_table('vehicle_ownerships', schema='data') - op.drop_table('user_stats', schema='data') - op.drop_index(op.f('ix_data_user_badges_id'), table_name='user_badges', schema='data') - op.drop_table('user_badges', schema='data') - op.drop_table('ratings', schema='data') - op.drop_index(op.f('ix_data_points_ledger_id'), table_name='points_ledger', schema='data') - op.drop_table('points_ledger', schema='data') - op.drop_index(op.f('ix_data_organizations_tax_number'), table_name='organizations', schema='data') - op.drop_index(op.f('ix_data_organizations_id'), table_name='organizations', schema='data') - op.drop_table('organizations', schema='data') - op.drop_table('documents', schema='data') - op.drop_index(op.f('ix_data_audit_logs_target_type'), table_name='audit_logs', schema='data') - op.drop_index(op.f('ix_data_audit_logs_target_id'), table_name='audit_logs', schema='data') - op.drop_index(op.f('ix_data_audit_logs_id'), table_name='audit_logs', schema='data') - op.drop_table('audit_logs', schema='data') - op.drop_table('asset_reviews', schema='data') - op.drop_index(op.f('ix_data_users_id'), table_name='users', schema='data') - op.drop_index(op.f('ix_data_users_email'), table_name='users', schema='data') - op.drop_table('users', schema='data') - op.drop_index(op.f('ix_data_persons_id'), table_name='persons', schema='data') - op.drop_table('persons', schema='data') - op.drop_table('asset_telemetry', schema='data') - op.drop_table('asset_financials', schema='data') - op.drop_table('asset_events', schema='data') - op.drop_table('geo_streets', schema='data') - op.drop_index(op.f('ix_data_assets_vin'), table_name='assets', schema='data') - op.drop_index(op.f('ix_data_assets_license_plate'), table_name='assets', schema='data') - op.drop_table('assets', schema='data') - op.drop_table('addresses', schema='data') - op.drop_index(op.f('ix_data_vehicle_catalog_model'), table_name='vehicle_catalog', schema='data') - op.drop_index(op.f('ix_data_vehicle_catalog_make'), table_name='vehicle_catalog', schema='data') - op.drop_index(op.f('ix_data_vehicle_catalog_id'), table_name='vehicle_catalog', schema='data') - op.drop_table('vehicle_catalog', schema='data') - op.drop_index(op.f('ix_data_system_parameters_key'), table_name='system_parameters', schema='data') - op.drop_index(op.f('ix_data_system_parameters_id'), table_name='system_parameters', schema='data') - op.drop_table('system_parameters', schema='data') - op.drop_table('subscription_tiers', schema='data') - op.drop_table('service_specialties', schema='data') - op.drop_index(op.f('ix_data_regional_settings_id'), table_name='regional_settings', schema='data') - op.drop_table('regional_settings', schema='data') - op.drop_index(op.f('ix_data_point_rules_id'), table_name='point_rules', schema='data') - op.drop_index(op.f('ix_data_point_rules_action_key'), table_name='point_rules', schema='data') - op.drop_table('point_rules', schema='data') - op.drop_index(op.f('ix_data_level_configs_id'), table_name='level_configs', schema='data') - op.drop_table('level_configs', schema='data') - op.drop_table('geo_street_types', schema='data') - op.drop_table('geo_postal_codes', schema='data') - op.drop_table('exchange_rates', schema='data') - op.drop_index(op.f('ix_data_badges_id'), table_name='badges', schema='data') - op.drop_table('badges', schema='data') - # ### end Alembic commands ### diff --git a/backend/migrations/versions/92616f34cdd3_baseline_and_staging_init.py b/backend/migrations/versions/92616f34cdd3_baseline_and_staging_init.py new file mode 100644 index 0000000..d2e9768 --- /dev/null +++ b/backend/migrations/versions/92616f34cdd3_baseline_and_staging_init.py @@ -0,0 +1,253 @@ +"""baseline_and_staging_init + +Revision ID: 92616f34cdd3 +Revises: +Create Date: 2026-02-14 15:23:12.091715 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision: str = '92616f34cdd3' +down_revision: Union[str, Sequence[str], None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('service_staging', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('postal_code', sa.String(length=10), nullable=True), + sa.Column('city', sa.String(length=100), nullable=True), + sa.Column('street', sa.String(length=255), nullable=True), + sa.Column('house_number', sa.String(length=50), nullable=True), + sa.Column('full_address', sa.String(), nullable=True), + sa.Column('contact_phone', sa.String(), nullable=True), + sa.Column('email', sa.String(), nullable=True), + sa.Column('website', sa.String(), nullable=True), + sa.Column('source', sa.String(length=50), nullable=True), + sa.Column('external_id', sa.String(length=100), nullable=True), + sa.Column('raw_data', postgresql.JSONB(astext_type=sa.Text()), server_default=sa.text("'{}'::jsonb"), nullable=True), + sa.Column('status', sa.String(length=20), server_default=sa.text("'pending'"), nullable=True), + sa.Column('trust_score', sa.Integer(), nullable=True), + sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), + sa.PrimaryKeyConstraint('id'), + schema='data' + ) + op.create_index(op.f('ix_data_service_staging_city'), 'service_staging', ['city'], unique=False, schema='data') + op.create_index(op.f('ix_data_service_staging_external_id'), 'service_staging', ['external_id'], unique=False, schema='data') + op.create_index(op.f('ix_data_service_staging_id'), 'service_staging', ['id'], unique=False, schema='data') + op.create_index(op.f('ix_data_service_staging_name'), 'service_staging', ['name'], unique=False, schema='data') + op.create_index(op.f('ix_data_service_staging_postal_code'), 'service_staging', ['postal_code'], unique=False, schema='data') + op.create_index(op.f('ix_data_service_staging_source'), 'service_staging', ['source'], unique=False, schema='data') + op.create_index(op.f('ix_data_service_staging_status'), 'service_staging', ['status'], unique=False, schema='data') + op.drop_constraint(op.f('addresses_postal_code_id_fkey'), 'addresses', type_='foreignkey') + op.create_foreign_key(None, 'addresses', 'geo_postal_codes', ['postal_code_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('asset_assignments_asset_id_fkey'), 'asset_assignments', type_='foreignkey') + op.drop_constraint(op.f('asset_assignments_organization_id_fkey'), 'asset_assignments', type_='foreignkey') + op.create_foreign_key(None, 'asset_assignments', 'assets', ['asset_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'asset_assignments', 'organizations', ['organization_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('asset_costs_driver_id_fkey'), 'asset_costs', type_='foreignkey') + op.drop_constraint(op.f('asset_costs_asset_id_fkey'), 'asset_costs', type_='foreignkey') + op.drop_constraint(op.f('asset_costs_organization_id_fkey'), 'asset_costs', type_='foreignkey') + op.create_foreign_key(None, 'asset_costs', 'users', ['driver_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'asset_costs', 'organizations', ['organization_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'asset_costs', 'assets', ['asset_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('asset_events_asset_id_fkey'), 'asset_events', type_='foreignkey') + op.create_foreign_key(None, 'asset_events', 'assets', ['asset_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('asset_financials_asset_id_fkey'), 'asset_financials', type_='foreignkey') + op.create_foreign_key(None, 'asset_financials', 'assets', ['asset_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('asset_reviews_asset_id_fkey'), 'asset_reviews', type_='foreignkey') + op.drop_constraint(op.f('asset_reviews_user_id_fkey'), 'asset_reviews', type_='foreignkey') + op.create_foreign_key(None, 'asset_reviews', 'assets', ['asset_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'asset_reviews', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('asset_telemetry_asset_id_fkey'), 'asset_telemetry', type_='foreignkey') + op.create_foreign_key(None, 'asset_telemetry', 'assets', ['asset_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('assets_catalog_id_fkey'), 'assets', type_='foreignkey') + op.drop_constraint(op.f('assets_current_organization_id_fkey'), 'assets', type_='foreignkey') + op.create_foreign_key(None, 'assets', 'vehicle_catalog', ['catalog_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'assets', 'organizations', ['current_organization_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('audit_logs_user_id_fkey'), 'audit_logs', type_='foreignkey') + op.create_foreign_key(None, 'audit_logs', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('credit_logs_org_id_fkey'), 'credit_logs', type_='foreignkey') + op.create_foreign_key(None, 'credit_logs', 'organizations', ['org_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('documents_uploaded_by_fkey'), 'documents', type_='foreignkey') + op.create_foreign_key(None, 'documents', 'users', ['uploaded_by'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('geo_streets_postal_code_id_fkey'), 'geo_streets', type_='foreignkey') + op.create_foreign_key(None, 'geo_streets', 'geo_postal_codes', ['postal_code_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('org_subscriptions_org_id_fkey'), 'org_subscriptions', type_='foreignkey') + op.drop_constraint(op.f('org_subscriptions_tier_id_fkey'), 'org_subscriptions', type_='foreignkey') + op.create_foreign_key(None, 'org_subscriptions', 'subscription_tiers', ['tier_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'org_subscriptions', 'organizations', ['org_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('organization_financials_organization_id_fkey'), 'organization_financials', type_='foreignkey') + op.create_foreign_key(None, 'organization_financials', 'organizations', ['organization_id'], ['id'], source_schema='data', referent_schema='data') + op.alter_column('organization_members', 'role', + existing_type=postgresql.ENUM('OWNER', 'ADMIN', 'FLEET_MANAGER', 'DRIVER', 'MECHANIC', 'RECEPTIONIST', name='orguserrole'), + type_=postgresql.ENUM('OWNER', 'ADMIN', 'FLEET_MANAGER', 'DRIVER', 'MECHANIC', 'RECEPTIONIST', name='orguserrole', schema='data', inherit_schema=True), + existing_nullable=True) + op.drop_constraint(op.f('organization_members_user_id_fkey'), 'organization_members', type_='foreignkey') + op.drop_constraint(op.f('organization_members_person_id_fkey'), 'organization_members', type_='foreignkey') + op.drop_constraint(op.f('organization_members_organization_id_fkey'), 'organization_members', type_='foreignkey') + op.create_foreign_key(None, 'organization_members', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'organization_members', 'organizations', ['organization_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'organization_members', 'persons', ['person_id'], ['id'], source_schema='data', referent_schema='data') + op.alter_column('organizations', 'org_type', + existing_type=postgresql.ENUM('individual', 'service', 'service_provider', 'fleet_owner', 'club', 'business', name='orgtype'), + type_=postgresql.ENUM('individual', 'service', 'service_provider', 'fleet_owner', 'club', 'business', name='orgtype', schema='data', inherit_schema=True), + existing_nullable=True) + op.drop_constraint(op.f('organizations_address_id_fkey'), 'organizations', type_='foreignkey') + op.drop_constraint(op.f('organizations_owner_id_fkey'), 'organizations', type_='foreignkey') + op.create_foreign_key(None, 'organizations', 'users', ['owner_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'organizations', 'addresses', ['address_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('pending_actions_approver_id_fkey'), 'pending_actions', type_='foreignkey') + op.drop_constraint(op.f('pending_actions_requester_id_fkey'), 'pending_actions', type_='foreignkey') + op.create_foreign_key(None, 'pending_actions', 'users', ['approver_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'pending_actions', 'users', ['requester_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('persons_address_id_fkey'), 'persons', type_='foreignkey') + op.create_foreign_key(None, 'persons', 'addresses', ['address_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('points_ledger_user_id_fkey'), 'points_ledger', type_='foreignkey') + op.create_foreign_key(None, 'points_ledger', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('ratings_author_id_fkey'), 'ratings', type_='foreignkey') + op.create_foreign_key(None, 'ratings', 'users', ['author_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('service_expertises_expertise_id_fkey'), 'service_expertises', type_='foreignkey') + op.drop_constraint(op.f('service_expertises_service_id_fkey'), 'service_expertises', type_='foreignkey') + op.create_foreign_key(None, 'service_expertises', 'expertise_tags', ['expertise_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'service_expertises', 'service_profiles', ['service_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('service_profiles_organization_id_fkey'), 'service_profiles', type_='foreignkey') + op.create_foreign_key(None, 'service_profiles', 'organizations', ['organization_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('service_specialties_parent_id_fkey'), 'service_specialties', type_='foreignkey') + op.create_foreign_key(None, 'service_specialties', 'service_specialties', ['parent_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('social_accounts_user_id_fkey'), 'social_accounts', type_='foreignkey') + op.create_foreign_key(None, 'social_accounts', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data', ondelete='CASCADE') + op.drop_constraint(op.f('user_badges_user_id_fkey'), 'user_badges', type_='foreignkey') + op.drop_constraint(op.f('user_badges_badge_id_fkey'), 'user_badges', type_='foreignkey') + op.create_foreign_key(None, 'user_badges', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'user_badges', 'badges', ['badge_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('user_stats_user_id_fkey'), 'user_stats', type_='foreignkey') + op.create_foreign_key(None, 'user_stats', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('users_person_id_fkey'), 'users', type_='foreignkey') + op.create_foreign_key(None, 'users', 'persons', ['person_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('vehicle_ownerships_user_id_fkey'), 'vehicle_ownerships', type_='foreignkey') + op.drop_constraint(op.f('vehicle_ownerships_vehicle_id_fkey'), 'vehicle_ownerships', type_='foreignkey') + op.create_foreign_key(None, 'vehicle_ownerships', 'assets', ['vehicle_id'], ['id'], source_schema='data', referent_schema='data') + op.create_foreign_key(None, 'vehicle_ownerships', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + op.drop_constraint(op.f('verification_tokens_user_id_fkey'), 'verification_tokens', type_='foreignkey') + op.create_foreign_key(None, 'verification_tokens', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data', ondelete='CASCADE') + op.drop_constraint(op.f('wallets_user_id_fkey'), 'wallets', type_='foreignkey') + op.create_foreign_key(None, 'wallets', 'users', ['user_id'], ['id'], source_schema='data', referent_schema='data') + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint(None, 'wallets', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('wallets_user_id_fkey'), 'wallets', 'users', ['user_id'], ['id']) + op.drop_constraint(None, 'verification_tokens', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('verification_tokens_user_id_fkey'), 'verification_tokens', 'users', ['user_id'], ['id'], ondelete='CASCADE') + op.drop_constraint(None, 'vehicle_ownerships', schema='data', type_='foreignkey') + op.drop_constraint(None, 'vehicle_ownerships', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('vehicle_ownerships_vehicle_id_fkey'), 'vehicle_ownerships', 'assets', ['vehicle_id'], ['id']) + op.create_foreign_key(op.f('vehicle_ownerships_user_id_fkey'), 'vehicle_ownerships', 'users', ['user_id'], ['id']) + op.drop_constraint(None, 'users', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('users_person_id_fkey'), 'users', 'persons', ['person_id'], ['id']) + op.drop_constraint(None, 'user_stats', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('user_stats_user_id_fkey'), 'user_stats', 'users', ['user_id'], ['id']) + op.drop_constraint(None, 'user_badges', schema='data', type_='foreignkey') + op.drop_constraint(None, 'user_badges', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('user_badges_badge_id_fkey'), 'user_badges', 'badges', ['badge_id'], ['id']) + op.create_foreign_key(op.f('user_badges_user_id_fkey'), 'user_badges', 'users', ['user_id'], ['id']) + op.drop_constraint(None, 'social_accounts', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('social_accounts_user_id_fkey'), 'social_accounts', 'users', ['user_id'], ['id'], ondelete='CASCADE') + op.drop_constraint(None, 'service_specialties', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('service_specialties_parent_id_fkey'), 'service_specialties', 'service_specialties', ['parent_id'], ['id']) + op.drop_constraint(None, 'service_profiles', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('service_profiles_organization_id_fkey'), 'service_profiles', 'organizations', ['organization_id'], ['id']) + op.drop_constraint(None, 'service_expertises', schema='data', type_='foreignkey') + op.drop_constraint(None, 'service_expertises', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('service_expertises_service_id_fkey'), 'service_expertises', 'service_profiles', ['service_id'], ['id']) + op.create_foreign_key(op.f('service_expertises_expertise_id_fkey'), 'service_expertises', 'expertise_tags', ['expertise_id'], ['id']) + op.drop_constraint(None, 'ratings', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('ratings_author_id_fkey'), 'ratings', 'users', ['author_id'], ['id']) + op.drop_constraint(None, 'points_ledger', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('points_ledger_user_id_fkey'), 'points_ledger', 'users', ['user_id'], ['id']) + op.drop_constraint(None, 'persons', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('persons_address_id_fkey'), 'persons', 'addresses', ['address_id'], ['id']) + op.drop_constraint(None, 'pending_actions', schema='data', type_='foreignkey') + op.drop_constraint(None, 'pending_actions', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('pending_actions_requester_id_fkey'), 'pending_actions', 'users', ['requester_id'], ['id']) + op.create_foreign_key(op.f('pending_actions_approver_id_fkey'), 'pending_actions', 'users', ['approver_id'], ['id']) + op.drop_constraint(None, 'organizations', schema='data', type_='foreignkey') + op.drop_constraint(None, 'organizations', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('organizations_owner_id_fkey'), 'organizations', 'users', ['owner_id'], ['id']) + op.create_foreign_key(op.f('organizations_address_id_fkey'), 'organizations', 'addresses', ['address_id'], ['id']) + op.alter_column('organizations', 'org_type', + existing_type=postgresql.ENUM('individual', 'service', 'service_provider', 'fleet_owner', 'club', 'business', name='orgtype', schema='data', inherit_schema=True), + type_=postgresql.ENUM('individual', 'service', 'service_provider', 'fleet_owner', 'club', 'business', name='orgtype'), + existing_nullable=True) + op.drop_constraint(None, 'organization_members', schema='data', type_='foreignkey') + op.drop_constraint(None, 'organization_members', schema='data', type_='foreignkey') + op.drop_constraint(None, 'organization_members', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('organization_members_organization_id_fkey'), 'organization_members', 'organizations', ['organization_id'], ['id']) + op.create_foreign_key(op.f('organization_members_person_id_fkey'), 'organization_members', 'persons', ['person_id'], ['id']) + op.create_foreign_key(op.f('organization_members_user_id_fkey'), 'organization_members', 'users', ['user_id'], ['id']) + op.alter_column('organization_members', 'role', + existing_type=postgresql.ENUM('OWNER', 'ADMIN', 'FLEET_MANAGER', 'DRIVER', 'MECHANIC', 'RECEPTIONIST', name='orguserrole', schema='data', inherit_schema=True), + type_=postgresql.ENUM('OWNER', 'ADMIN', 'FLEET_MANAGER', 'DRIVER', 'MECHANIC', 'RECEPTIONIST', name='orguserrole'), + existing_nullable=True) + op.drop_constraint(None, 'organization_financials', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('organization_financials_organization_id_fkey'), 'organization_financials', 'organizations', ['organization_id'], ['id']) + op.drop_constraint(None, 'org_subscriptions', schema='data', type_='foreignkey') + op.drop_constraint(None, 'org_subscriptions', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('org_subscriptions_tier_id_fkey'), 'org_subscriptions', 'subscription_tiers', ['tier_id'], ['id']) + op.create_foreign_key(op.f('org_subscriptions_org_id_fkey'), 'org_subscriptions', 'organizations', ['org_id'], ['id']) + op.drop_constraint(None, 'geo_streets', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('geo_streets_postal_code_id_fkey'), 'geo_streets', 'geo_postal_codes', ['postal_code_id'], ['id']) + op.drop_constraint(None, 'documents', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('documents_uploaded_by_fkey'), 'documents', 'users', ['uploaded_by'], ['id']) + op.drop_constraint(None, 'credit_logs', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('credit_logs_org_id_fkey'), 'credit_logs', 'organizations', ['org_id'], ['id']) + op.drop_constraint(None, 'audit_logs', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('audit_logs_user_id_fkey'), 'audit_logs', 'users', ['user_id'], ['id']) + op.drop_constraint(None, 'assets', schema='data', type_='foreignkey') + op.drop_constraint(None, 'assets', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('assets_current_organization_id_fkey'), 'assets', 'organizations', ['current_organization_id'], ['id']) + op.create_foreign_key(op.f('assets_catalog_id_fkey'), 'assets', 'vehicle_catalog', ['catalog_id'], ['id']) + op.drop_constraint(None, 'asset_telemetry', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('asset_telemetry_asset_id_fkey'), 'asset_telemetry', 'assets', ['asset_id'], ['id']) + op.drop_constraint(None, 'asset_reviews', schema='data', type_='foreignkey') + op.drop_constraint(None, 'asset_reviews', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('asset_reviews_user_id_fkey'), 'asset_reviews', 'users', ['user_id'], ['id']) + op.create_foreign_key(op.f('asset_reviews_asset_id_fkey'), 'asset_reviews', 'assets', ['asset_id'], ['id']) + op.drop_constraint(None, 'asset_financials', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('asset_financials_asset_id_fkey'), 'asset_financials', 'assets', ['asset_id'], ['id']) + op.drop_constraint(None, 'asset_events', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('asset_events_asset_id_fkey'), 'asset_events', 'assets', ['asset_id'], ['id']) + op.drop_constraint(None, 'asset_costs', schema='data', type_='foreignkey') + op.drop_constraint(None, 'asset_costs', schema='data', type_='foreignkey') + op.drop_constraint(None, 'asset_costs', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('asset_costs_organization_id_fkey'), 'asset_costs', 'organizations', ['organization_id'], ['id']) + op.create_foreign_key(op.f('asset_costs_asset_id_fkey'), 'asset_costs', 'assets', ['asset_id'], ['id']) + op.create_foreign_key(op.f('asset_costs_driver_id_fkey'), 'asset_costs', 'users', ['driver_id'], ['id']) + op.drop_constraint(None, 'asset_assignments', schema='data', type_='foreignkey') + op.drop_constraint(None, 'asset_assignments', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('asset_assignments_organization_id_fkey'), 'asset_assignments', 'organizations', ['organization_id'], ['id']) + op.create_foreign_key(op.f('asset_assignments_asset_id_fkey'), 'asset_assignments', 'assets', ['asset_id'], ['id']) + op.drop_constraint(None, 'addresses', schema='data', type_='foreignkey') + op.create_foreign_key(op.f('addresses_postal_code_id_fkey'), 'addresses', 'geo_postal_codes', ['postal_code_id'], ['id']) + op.drop_index(op.f('ix_data_service_staging_status'), table_name='service_staging', schema='data') + op.drop_index(op.f('ix_data_service_staging_source'), table_name='service_staging', schema='data') + op.drop_index(op.f('ix_data_service_staging_postal_code'), table_name='service_staging', schema='data') + op.drop_index(op.f('ix_data_service_staging_name'), table_name='service_staging', schema='data') + op.drop_index(op.f('ix_data_service_staging_id'), table_name='service_staging', schema='data') + op.drop_index(op.f('ix_data_service_staging_external_id'), table_name='service_staging', schema='data') + op.drop_index(op.f('ix_data_service_staging_city'), table_name='service_staging', schema='data') + op.drop_table('service_staging', schema='data') + # ### end Alembic commands ### diff --git a/backend/migrations/versions/__pycache__/0adbe75a0b3f_complete_sync.cpython-312.pyc b/backend/migrations/versions/__pycache__/0adbe75a0b3f_complete_sync.cpython-312.pyc deleted file mode 100644 index c5e1118..0000000 Binary files a/backend/migrations/versions/__pycache__/0adbe75a0b3f_complete_sync.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/0fa011f29e35_enforce_system_parameters_primary_key.cpython-312.pyc b/backend/migrations/versions/__pycache__/0fa011f29e35_enforce_system_parameters_primary_key.cpython-312.pyc deleted file mode 100644 index 1ddb846..0000000 Binary files a/backend/migrations/versions/__pycache__/0fa011f29e35_enforce_system_parameters_primary_key.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/12607787ed0b_security_hardening_v2_slugs_and_tokens.cpython-312.pyc b/backend/migrations/versions/__pycache__/12607787ed0b_security_hardening_v2_slugs_and_tokens.cpython-312.pyc deleted file mode 100644 index 3abd041..0000000 Binary files a/backend/migrations/versions/__pycache__/12607787ed0b_security_hardening_v2_slugs_and_tokens.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/134d92edd430_create_translation_and_security_tables.cpython-312.pyc b/backend/migrations/versions/__pycache__/134d92edd430_create_translation_and_security_tables.cpython-312.pyc deleted file mode 100644 index 82c5ab7..0000000 Binary files a/backend/migrations/versions/__pycache__/134d92edd430_create_translation_and_security_tables.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/143763d5d6fe_fix_member_is_verified.cpython-312.pyc b/backend/migrations/versions/__pycache__/143763d5d6fe_fix_member_is_verified.cpython-312.pyc deleted file mode 100644 index b73d370..0000000 Binary files a/backend/migrations/versions/__pycache__/143763d5d6fe_fix_member_is_verified.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/25afe6f4f063_identity_and_hybrid_org_update.cpython-312.pyc b/backend/migrations/versions/__pycache__/25afe6f4f063_identity_and_hybrid_org_update.cpython-312.pyc deleted file mode 100644 index d404623..0000000 Binary files a/backend/migrations/versions/__pycache__/25afe6f4f063_identity_and_hybrid_org_update.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/2cfe9285eb9d_fix_identity_scope_and_finalize_asset_.cpython-312.pyc b/backend/migrations/versions/__pycache__/2cfe9285eb9d_fix_identity_scope_and_finalize_asset_.cpython-312.pyc deleted file mode 100644 index 83cdc7a..0000000 Binary files a/backend/migrations/versions/__pycache__/2cfe9285eb9d_fix_identity_scope_and_finalize_asset_.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/398e76c2fa36_audit_and_moderation_fields.cpython-312.pyc b/backend/migrations/versions/__pycache__/398e76c2fa36_audit_and_moderation_fields.cpython-312.pyc deleted file mode 100644 index 98fcbdb..0000000 Binary files a/backend/migrations/versions/__pycache__/398e76c2fa36_audit_and_moderation_fields.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/492849ee0b3a_add_is_verified_to_members.cpython-312.pyc b/backend/migrations/versions/__pycache__/492849ee0b3a_add_is_verified_to_members.cpython-312.pyc deleted file mode 100644 index c806a1e..0000000 Binary files a/backend/migrations/versions/__pycache__/492849ee0b3a_add_is_verified_to_members.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/5ca03588ce28_add_penalty_system_and_wallet_.cpython-312.pyc b/backend/migrations/versions/__pycache__/5ca03588ce28_add_penalty_system_and_wallet_.cpython-312.pyc deleted file mode 100644 index 874f99b..0000000 Binary files a/backend/migrations/versions/__pycache__/5ca03588ce28_add_penalty_system_and_wallet_.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/6197bfddfb4f_add_lang_and_region_to_user.cpython-312.pyc b/backend/migrations/versions/__pycache__/6197bfddfb4f_add_lang_and_region_to_user.cpython-312.pyc deleted file mode 100644 index c2e6e97..0000000 Binary files a/backend/migrations/versions/__pycache__/6197bfddfb4f_add_lang_and_region_to_user.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/8370c73114b6_add_audit_log.cpython-312.pyc b/backend/migrations/versions/__pycache__/8370c73114b6_add_audit_log.cpython-312.pyc deleted file mode 100644 index a6cb8ca..0000000 Binary files a/backend/migrations/versions/__pycache__/8370c73114b6_add_audit_log.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/85b2a560e599_asset_system_v2_and_catalog.cpython-312.pyc b/backend/migrations/versions/__pycache__/85b2a560e599_asset_system_v2_and_catalog.cpython-312.pyc deleted file mode 100644 index 2684ad7..0000000 Binary files a/backend/migrations/versions/__pycache__/85b2a560e599_asset_system_v2_and_catalog.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/8e06c5386cba_finalize_gamification_v1_5_clean.cpython-312.pyc b/backend/migrations/versions/__pycache__/8e06c5386cba_finalize_gamification_v1_5_clean.cpython-312.pyc deleted file mode 100644 index 1804c83..0000000 Binary files a/backend/migrations/versions/__pycache__/8e06c5386cba_finalize_gamification_v1_5_clean.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/92616f34cdd3_baseline_and_staging_init.cpython-312.pyc b/backend/migrations/versions/__pycache__/92616f34cdd3_baseline_and_staging_init.cpython-312.pyc new file mode 100644 index 0000000..957d642 Binary files /dev/null and b/backend/migrations/versions/__pycache__/92616f34cdd3_baseline_and_staging_init.cpython-312.pyc differ diff --git a/backend/migrations/versions/__pycache__/9b20430f0ebb_add_service_specialization_and_postgis.cpython-312.pyc b/backend/migrations/versions/__pycache__/9b20430f0ebb_add_service_specialization_and_postgis.cpython-312.pyc deleted file mode 100644 index 1942e8c..0000000 Binary files a/backend/migrations/versions/__pycache__/9b20430f0ebb_add_service_specialization_and_postgis.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/b14d05fd8ac8_add_social_accounts.cpython-312.pyc b/backend/migrations/versions/__pycache__/b14d05fd8ac8_add_social_accounts.cpython-312.pyc deleted file mode 100644 index c499574..0000000 Binary files a/backend/migrations/versions/__pycache__/b14d05fd8ac8_add_social_accounts.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/b69f11d8b825_add_current_org_to_asset_and_fix_slugs.cpython-312.pyc b/backend/migrations/versions/__pycache__/b69f11d8b825_add_current_org_to_asset_and_fix_slugs.cpython-312.pyc deleted file mode 100644 index e1c9629..0000000 Binary files a/backend/migrations/versions/__pycache__/b69f11d8b825_add_current_org_to_asset_and_fix_slugs.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/bc5669f12ffd_add_pending_actions_for_dual_control.cpython-312.pyc b/backend/migrations/versions/__pycache__/bc5669f12ffd_add_pending_actions_for_dual_control.cpython-312.pyc deleted file mode 100644 index b891b20..0000000 Binary files a/backend/migrations/versions/__pycache__/bc5669f12ffd_add_pending_actions_for_dual_control.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/f2d8996357ac_create_system_parameters_table.cpython-312.pyc b/backend/migrations/versions/__pycache__/f2d8996357ac_create_system_parameters_table.cpython-312.pyc deleted file mode 100644 index bd357bd..0000000 Binary files a/backend/migrations/versions/__pycache__/f2d8996357ac_create_system_parameters_table.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/__pycache__/ffffad1dbe37_upgrade_audit_log_for_security.cpython-312.pyc b/backend/migrations/versions/__pycache__/ffffad1dbe37_upgrade_audit_log_for_security.cpython-312.pyc deleted file mode 100644 index 497dad5..0000000 Binary files a/backend/migrations/versions/__pycache__/ffffad1dbe37_upgrade_audit_log_for_security.cpython-312.pyc and /dev/null differ diff --git a/backend/migrations/versions/full_schema_backup.sql b/backend/migrations/versions/full_schema_backup.sql new file mode 100644 index 0000000..e69de29 diff --git a/backend/migrations/versions/0fa011f29e35_enforce_system_parameters_primary_key.py b/backend/migrations/versions_backup/0fa011f29e35_enforce_system_parameters_primary_key.py similarity index 100% rename from backend/migrations/versions/0fa011f29e35_enforce_system_parameters_primary_key.py rename to backend/migrations/versions_backup/0fa011f29e35_enforce_system_parameters_primary_key.py diff --git a/backend/migrations/versions/12607787ed0b_security_hardening_v2_slugs_and_tokens.py b/backend/migrations/versions_backup/12607787ed0b_security_hardening_v2_slugs_and_tokens.py similarity index 100% rename from backend/migrations/versions/12607787ed0b_security_hardening_v2_slugs_and_tokens.py rename to backend/migrations/versions_backup/12607787ed0b_security_hardening_v2_slugs_and_tokens.py diff --git a/backend/migrations/versions/134d92edd430_create_translation_and_security_tables.py b/backend/migrations/versions_backup/134d92edd430_create_translation_and_security_tables.py similarity index 100% rename from backend/migrations/versions/134d92edd430_create_translation_and_security_tables.py rename to backend/migrations/versions_backup/134d92edd430_create_translation_and_security_tables.py diff --git a/backend/migrations/versions/143763d5d6fe_fix_member_is_verified.py b/backend/migrations/versions_backup/143763d5d6fe_fix_member_is_verified.py similarity index 100% rename from backend/migrations/versions/143763d5d6fe_fix_member_is_verified.py rename to backend/migrations/versions_backup/143763d5d6fe_fix_member_is_verified.py diff --git a/backend/migrations/versions/25afe6f4f063_identity_and_hybrid_org_update.py b/backend/migrations/versions_backup/25afe6f4f063_identity_and_hybrid_org_update.py similarity index 100% rename from backend/migrations/versions/25afe6f4f063_identity_and_hybrid_org_update.py rename to backend/migrations/versions_backup/25afe6f4f063_identity_and_hybrid_org_update.py diff --git a/backend/migrations/versions/2cfe9285eb9d_fix_identity_scope_and_finalize_asset_.py b/backend/migrations/versions_backup/2cfe9285eb9d_fix_identity_scope_and_finalize_asset_.py similarity index 100% rename from backend/migrations/versions/2cfe9285eb9d_fix_identity_scope_and_finalize_asset_.py rename to backend/migrations/versions_backup/2cfe9285eb9d_fix_identity_scope_and_finalize_asset_.py diff --git a/backend/migrations/versions/398e76c2fa36_audit_and_moderation_fields.py b/backend/migrations/versions_backup/398e76c2fa36_audit_and_moderation_fields.py similarity index 100% rename from backend/migrations/versions/398e76c2fa36_audit_and_moderation_fields.py rename to backend/migrations/versions_backup/398e76c2fa36_audit_and_moderation_fields.py diff --git a/backend/migrations/versions/492849ee0b3a_add_is_verified_to_members.py b/backend/migrations/versions_backup/492849ee0b3a_add_is_verified_to_members.py similarity index 100% rename from backend/migrations/versions/492849ee0b3a_add_is_verified_to_members.py rename to backend/migrations/versions_backup/492849ee0b3a_add_is_verified_to_members.py diff --git a/backend/migrations/versions/6197bfddfb4f_add_lang_and_region_to_user.py b/backend/migrations/versions_backup/6197bfddfb4f_add_lang_and_region_to_user.py similarity index 100% rename from backend/migrations/versions/6197bfddfb4f_add_lang_and_region_to_user.py rename to backend/migrations/versions_backup/6197bfddfb4f_add_lang_and_region_to_user.py diff --git a/backend/migrations/versions/8370c73114b6_add_audit_log.py b/backend/migrations/versions_backup/8370c73114b6_add_audit_log.py similarity index 100% rename from backend/migrations/versions/8370c73114b6_add_audit_log.py rename to backend/migrations/versions_backup/8370c73114b6_add_audit_log.py diff --git a/backend/migrations/versions/85b2a560e599_asset_system_v2_and_catalog.py b/backend/migrations/versions_backup/85b2a560e599_asset_system_v2_and_catalog.py similarity index 100% rename from backend/migrations/versions/85b2a560e599_asset_system_v2_and_catalog.py rename to backend/migrations/versions_backup/85b2a560e599_asset_system_v2_and_catalog.py diff --git a/backend/migrations/versions/8e06c5386cba_finalize_gamification_v1_5_clean.py b/backend/migrations/versions_backup/8e06c5386cba_finalize_gamification_v1_5_clean.py similarity index 100% rename from backend/migrations/versions/8e06c5386cba_finalize_gamification_v1_5_clean.py rename to backend/migrations/versions_backup/8e06c5386cba_finalize_gamification_v1_5_clean.py diff --git a/backend/migrations/versions/9b20430f0ebb_add_service_specialization_and_postgis.py b/backend/migrations/versions_backup/9b20430f0ebb_add_service_specialization_and_postgis.py similarity index 100% rename from backend/migrations/versions/9b20430f0ebb_add_service_specialization_and_postgis.py rename to backend/migrations/versions_backup/9b20430f0ebb_add_service_specialization_and_postgis.py diff --git a/backend/migrations/versions/b14d05fd8ac8_add_social_accounts.py b/backend/migrations/versions_backup/b14d05fd8ac8_add_social_accounts.py similarity index 100% rename from backend/migrations/versions/b14d05fd8ac8_add_social_accounts.py rename to backend/migrations/versions_backup/b14d05fd8ac8_add_social_accounts.py diff --git a/backend/migrations/versions/b69f11d8b825_add_current_org_to_asset_and_fix_slugs.py b/backend/migrations/versions_backup/b69f11d8b825_add_current_org_to_asset_and_fix_slugs.py similarity index 100% rename from backend/migrations/versions/b69f11d8b825_add_current_org_to_asset_and_fix_slugs.py rename to backend/migrations/versions_backup/b69f11d8b825_add_current_org_to_asset_and_fix_slugs.py diff --git a/backend/migrations/versions/bc5669f12ffd_add_pending_actions_for_dual_control.py b/backend/migrations/versions_backup/bc5669f12ffd_add_pending_actions_for_dual_control.py similarity index 100% rename from backend/migrations/versions/bc5669f12ffd_add_pending_actions_for_dual_control.py rename to backend/migrations/versions_backup/bc5669f12ffd_add_pending_actions_for_dual_control.py diff --git a/backend/migrations/versions/f2d8996357ac_create_system_parameters_table.py b/backend/migrations/versions_backup/f2d8996357ac_create_system_parameters_table.py similarity index 100% rename from backend/migrations/versions/f2d8996357ac_create_system_parameters_table.py rename to backend/migrations/versions_backup/f2d8996357ac_create_system_parameters_table.py diff --git a/backend/migrations/versions/ffffad1dbe37_upgrade_audit_log_for_security.py b/backend/migrations/versions_backup/ffffad1dbe37_upgrade_audit_log_for_security.py similarity index 100% rename from backend/migrations/versions/ffffad1dbe37_upgrade_audit_log_for_security.py rename to backend/migrations/versions_backup/ffffad1dbe37_upgrade_audit_log_for_security.py diff --git a/docker-compose.yml b/docker-compose.yml index 9de34b8..860b421 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -137,6 +137,59 @@ services: - shared_db_net restart: always + # --- ÚJ: n8n AUTOMATIZÁCIÓ --- + n8n: + image: n8nio/n8n:latest + container_name: service_finder_n8n + restart: unless-stopped + ports: + - "5678:5678" + env_file: .env + environment: + - N8N_HOST=0.0.0.0 + - N8N_PORT=5678 + - N8N_PROTOCOL=http + - N8N_SECURE_COOKIE=false # <--- EZ JAVÍTJA A BELÉPÉSI HIBÁT! + - DB_TYPE=postgresdb + - DB_POSTGRESDB_DATABASE=n8n_internal + - DB_POSTGRESDB_HOST=n8n_db + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_USER=n8n_admin + - DB_POSTGRESDB_PASSWORD=${N8N_DB_PASSWORD} + volumes: + - ./n8n/data:/home/node/.n8n + networks: + - default + - shared_db_net + depends_on: + - n8n_db + + # n8n belső meta-adatbázisa + n8n_db: + image: postgres:15-alpine + container_name: service_finder_n8n_db + restart: unless-stopped + environment: + - POSTGRES_USER=n8n_admin + - POSTGRES_PASSWORD=${N8N_DB_PASSWORD} + - POSTGRES_DB=n8n_internal + volumes: + - ./n8n/db_data:/var/lib/postgresql/data + networks: + - default + + # Browserless - A robot "szeme" (Központi 3005-ös porton) + browserless: + image: browserless/chrome:latest + container_name: service_finder_browserless + restart: unless-stopped + ports: + - "3005:3000" + environment: + - MAX_CONCURRENT_SESSIONS=10 + networks: + - default + networks: default: driver: bridge diff --git a/docs/V01_gemini/00_README.md b/docs/V01_gemini/00_README.md index 0647e53..a0822da 100644 --- a/docs/V01_gemini/00_README.md +++ b/docs/V01_gemini/00_README.md @@ -14,4 +14,16 @@ Ez a dokumentáció a rendszer "Egyetlen Igazságforrása" (Single Source of Tru - **Infrastruktúra:** Profibot SW1 (80 Core) - ÉLES. - **Frontend:** Vue3 + Tailwind (Port 3000). - **Backend:** FastAPI v2 (Port 8000). -- **Adatbázis:** PostgreSQL 15 (55 tábla, Seed adatokkal). \ No newline at end of file +- **Adatbázis:** PostgreSQL 15 (55 tábla, Seed adatokkal). + +# Master Book - Automotive Intelligence Ecosystem +Ez a dokumentáció a projekt technikai és üzleti felépítését tartalmazza. + +## Projekt Célkitűzés +Egy európai szintű, intelligens járműipari ökoszisztéma kiépítése, amely egyesíti a mély járműkatalógus-adatokat (Deep Asset Catalog) és a hitelesített szervizkeresőt (Service Finder). + +## Főbb Komponensek +- **Data Core:** 21,000+ rekordos járműadatbázis (Holland, USA, EU forrásokból). +- **Service Hunter:** n8n alapú, automatizált szerviz-felderítő rendszer. +- **Trust Engine:** Pontszám alapú validációs algoritmus az adatok hitelességének biztosítására. +- **Robot Ökoszisztéma:** Python alapú adatgyűjtő és öngyógyító (Auto-Heal) ágensek. \ No newline at end of file diff --git a/docs/V01_gemini/02_Architecture_System_Context.md b/docs/V01_gemini/02_Architecture_System_Context.md index 403228f..fa5dac7 100644 --- a/docs/V01_gemini/02_Architecture_System_Context.md +++ b/docs/V01_gemini/02_Architecture_System_Context.md @@ -9,4 +9,15 @@ ## 🛡️ Hálózati Határok - **Internal Net (`shared_db_net`):** A Backend és az Adatbázis közötti dedikált, zárt csatorna. -- **Public Net:** Csak a 80/443 (NPM) nyitott a világ felé. A DB port (5432) és Admin portok (5050, 8888) csak VPN-en vagy localhoston érhetők el. \ No newline at end of file +- **Public Net:** Csak a 80/443 (NPM) nyitott a világ felé. A DB port (5432) és Admin portok (5050, 8888) csak VPN-en vagy localhoston érhetők el. + +# 02. Architecture & System Context + +## Rendszerarchitektúra v2.0 +A rendszer egy eseményvezérelt, mikroszolgáltatás-alapú architektúrára épül, ahol az **n8n** tölti be a központi idegrendszer (Orchestrator) szerepét. + +### Adatáramlási Folyamat +1. **Discovery Layer:** n8n által vezérelt robotok (Robot A) pásztázzák a hálót (OSM, DDG, FB, e-Cégközlöny). +2. **Staging Layer:** A nyers adatok egy átmeneti (Stage) táblába kerülnek további elemzésre. +3. **Audit Layer:** A validátor robot (Robot B) ellenőrzi az adószámokat, TEAOR kódokat és a digitális lábnyomot. +4. **Core Database:** Csak a Trust Engine által hitelesített adatok kerülnek az éles jármű- és szervizkatalógusba. \ No newline at end of file diff --git a/docs/V01_gemini/04_Infrastructure_Docker_Stack.md b/docs/V01_gemini/04_Infrastructure_Docker_Stack.md index 55cbdf2..1d2a107 100644 --- a/docs/V01_gemini/04_Infrastructure_Docker_Stack.md +++ b/docs/V01_gemini/04_Infrastructure_Docker_Stack.md @@ -10,4 +10,18 @@ | **Redis** | `redis:alpine` | 6379 | - | - | ## Hardening Terv -A `Host Port` oszlopban lévő portokat éles üzemben le kell venni (kivéve 80/443), és csak a \ No newline at end of file +A `Host Port` oszlopban lévő portokat éles üzemben le kell venni (kivéve 80/443), és csak a + +# 04. Infrastructure & Docker Stack + +## Hardver Erőforrás +- **Szerver:** 128 GB RAM (High-Performance Node). +- **Kihasználtság cél:** Moduláris konténerek futtatása alacsony (5-10%) alapterhelés mellett, magas skálázhatósági tartalékkal. + +## Docker Ökoszisztéma (Bővített) +A stack a következő konténereket tartalmazza: +1. **n8n (Orchestrator):** Vizuális munkafolyamat-kezelő. +2. **PostgreSQL:** Központi adattár (Járművek + Szervizek). +3. **Browserless (Chrome):** "Fej nélküli" böngésző az n8n számára a komplex scraping feladatokhoz. +4. **Python Robots:** Konténerizált adatgyűjtő és dúsító ágensek (v1.9.2+). +5. **Proxy/VPN Node:** IP-rotációt biztosító modul a globális felderítéshez. \ No newline at end of file diff --git a/docs/V01_gemini/20_Service_Finder_&_Trust_Engine.md b/docs/V01_gemini/20_Service_Finder_&_Trust_Engine.md index ba33b71..7853f86 100644 --- a/docs/V01_gemini/20_Service_Finder_&_Trust_Engine.md +++ b/docs/V01_gemini/20_Service_Finder_&_Trust_Engine.md @@ -50,4 +50,27 @@ A keresőmotor prioritási rendszere: ## 4.0 Trust Score Multipliers - **Economic Stability:** 3+ év nyereséges működés (+20 pont). - **Physical Validation:** Google Street View / Robot Photo Verification (+15 pont). -- **Verified Staff:** Ha a szerelőregisztrációk száma > 2 (+10 pont). \ No newline at end of file +- **Verified Staff:** Ha a szerelőregisztrációk száma > 2 (+10 pont). + +# 20. Service Finder & Trust Engine + +## Pre-searching (Silent Service Hunter) Logika +A cél a szervizek felderítése API költségek nélkül, kereszt-ellenőrzött forrásokból. + +### 1. Felderítési Fázis (Hunter A) +Többmotoros keresés (DuckDuckGo Lite, Bing, Yandex, OSM) segítségével: +- **Kulcsszó-dorking:** `site:facebook.com "Dunakeszi" "szerviz"`. +- **Informális adatok:** Fórumok, blogok és helyi közösségi posztok elemzése. +- **TEAOR Mátrix:** Az e-Cégközlöny napi frissítéseinek szűrése (4520, 4540, 2920 kódok). + +### 2. Validációs Pontrendszer (Trust Engine) +Minden talált entitás pontszámot kap: +- **+40 pont:** Aktív adószám és megfelelő TEAOR (4520/4540). +- **+20 pont:** Friss digitális jelenlét (Facebook/Instagram poszt < 30 nap). +- **+20 pont:** Fizikailag validált cím (OSM vagy lakossági megerősítés). +- **+10 pont:** Hívható, formátum-helyes telefonszám. + +### 3. Döntési Szintek +- **80+ pont:** Ellenőrzött (Verified) - Automatikus publikálás. +- **40-79 pont:** Moderációra vár - Manuális adminisztrátori jóváhagyás szükséges. +- **<40 pont:** Elutasítva/Inaktív - Marad a Stage táblában. \ No newline at end of file diff --git a/docs/V01_gemini/22_ROBOT ÖKOSZISZTÉMA b/docs/V01_gemini/22_ROBOT ÖKOSZISZTÉMA index d1ad5de..dad615c 100644 --- a/docs/V01_gemini/22_ROBOT ÖKOSZISZTÉMA +++ b/docs/V01_gemini/22_ROBOT ÖKOSZISZTÉMA @@ -99,4 +99,15 @@ A Robot 2 három fázisban dolgozik: - **Phase 2 (Deep Enrichment):** Google Places, Web Scraping (Email, telefon, tulajdonos neve). - **Phase 3 (Financial Audit):** Nyilvános cégadatok (Árbevétel, létszám, adózott eredmény) éves szinkronizálása. +# 22. ROBOT ÖKOSZISZTÉMA + +## Robot v1.9.2 (Ghost Commander) & n8n +A robotok és az n8n szoros együttműködésben dolgoznak. + +### Funkciók +- **Auto-Heal:** A járműkatalógus hiányos (null) adatainak automatikus pótlása Holland (RDW) és US (NHTSA) forrásokból. +- **Ban-Detection:** Automatikus "Circuit Breaker" logika. Ha a CarQuery vagy más forrás tilt, a robot átvált "Silent Mode"-ba. +- **Event Hunter:** n8n workflow figyeli a motoros/autós találkozókat és eseményeket, majd összeköti őket a helyi szervizpartnerekkel. +- **Gamification Link:** A robot regisztrálja a felhasználói validálásokat és kiosztja a pontokat/krediteket. + \ No newline at end of file diff --git a/docs/V01_gemini/_00_gemini_gem_kód b/docs/V01_gemini/_00_gemini_gem_kód index 629e222..2e0659f 100644 --- a/docs/V01_gemini/_00_gemini_gem_kód +++ b/docs/V01_gemini/_00_gemini_gem_kód @@ -271,4 +271,4 @@ A rendszer egy magas biztonságú, mikroszolgáltatás-jellegű monolit (Modular könyvtárszerkezetét Bash tree -I "node_modules|vendor|.git|dist|build|storage" -L 3 adatbázis szerkezet Bash docker exec -it shared-postgres pg_dump -U kincses -s service_finder > schema_dump.sq - \ No newline at end of file + \ No newline at end of file diff --git a/full_schema_backup.sql b/full_schema_backup.sql new file mode 100644 index 0000000..e69de29 diff --git a/full_schema_backup_2026-02-14.sql b/full_schema_backup_2026-02-14.sql new file mode 100644 index 0000000..bd7b8e2 --- /dev/null +++ b/full_schema_backup_2026-02-14.sql @@ -0,0 +1,3437 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 15.8 +-- Dumped by pg_dump version 15.8 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: data; Type: SCHEMA; Schema: -; Owner: service_finder_app +-- + +CREATE SCHEMA data; + + +ALTER SCHEMA data OWNER TO service_finder_app; + +-- +-- Name: public; Type: SCHEMA; Schema: -; Owner: service_finder_app +-- + +-- *not* creating schema, since initdb creates it + + +ALTER SCHEMA public OWNER TO service_finder_app; + +-- +-- Name: postgis; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA data; + + +-- +-- Name: EXTENSION postgis; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION postgis IS 'PostGIS geometry and geography spatial types and functions'; + + +-- +-- Name: actionstatus; Type: TYPE; Schema: data; Owner: service_finder_app +-- + +CREATE TYPE data.actionstatus AS ENUM ( + 'pending', + 'approved', + 'rejected', + 'expired' +); + + +ALTER TYPE data.actionstatus OWNER TO service_finder_app; + +-- +-- Name: logseverity; Type: TYPE; Schema: data; Owner: kincses +-- + +CREATE TYPE data.logseverity AS ENUM ( + 'info', + 'warning', + 'critical', + 'emergency' +); + + +ALTER TYPE data.logseverity OWNER TO kincses; + +-- +-- Name: orgtype; Type: TYPE; Schema: data; Owner: service_finder_app +-- + +CREATE TYPE data.orgtype AS ENUM ( + 'individual', + 'service', + 'service_provider', + 'fleet_owner', + 'club', + 'business' +); + + +ALTER TYPE data.orgtype OWNER TO service_finder_app; + +-- +-- Name: orguserrole; Type: TYPE; Schema: data; Owner: service_finder_app +-- + +CREATE TYPE data.orguserrole AS ENUM ( + 'OWNER', + 'ADMIN', + 'FLEET_MANAGER', + 'DRIVER', + 'MECHANIC', + 'RECEPTIONIST' +); + + +ALTER TYPE data.orguserrole OWNER TO service_finder_app; + +-- +-- Name: userrole; Type: TYPE; Schema: data; Owner: service_finder_app +-- + +CREATE TYPE data.userrole AS ENUM ( + 'admin', + 'user', + 'service', + 'fleet_manager', + 'driver', + 'superadmin' +); + + +ALTER TYPE data.userrole OWNER TO service_finder_app; + +-- +-- Name: emailtype; Type: TYPE; Schema: public; Owner: kincses +-- + +CREATE TYPE public.emailtype AS ENUM ( + 'REGISTRATION', + 'PASSWORD_RESET', + 'GDPR_NOTICE' +); + + +ALTER TYPE public.emailtype OWNER TO kincses; + +-- +-- Name: orgtype; Type: TYPE; Schema: public; Owner: kincses +-- + +CREATE TYPE public.orgtype AS ENUM ( + 'PRIVATE', + 'COMPANY', + 'SERVICE' +); + + +ALTER TYPE public.orgtype OWNER TO kincses; + +-- +-- Name: orguserrole; Type: TYPE; Schema: public; Owner: kincses +-- + +CREATE TYPE public.orguserrole AS ENUM ( + 'OWNER', + 'ADMIN', + 'FLEET_MANAGER', + 'DRIVER', + 'owner', + 'manager', + 'driver', + 'service' +); + + +ALTER TYPE public.orguserrole OWNER TO kincses; + +-- +-- Name: uitheme; Type: TYPE; Schema: public; Owner: kincses +-- + +CREATE TYPE public.uitheme AS ENUM ( + 'LIGHT', + 'DARK', + 'SYSTEM' +); + + +ALTER TYPE public.uitheme OWNER TO kincses; + +-- +-- Name: userrole; Type: TYPE; Schema: public; Owner: kincses +-- + +CREATE TYPE public.userrole AS ENUM ( + 'owner_old', + 'ADMIN', + 'FLEET_MANAGER', + 'DRIVER', + 'owner', + 'admin', + 'user' +); + + +ALTER TYPE public.userrole OWNER TO kincses; + +-- +-- Name: validationstatus; Type: TYPE; Schema: public; Owner: kincses +-- + +CREATE TYPE public.validationstatus AS ENUM ( + 'NOT_VALIDATED', + 'PENDING', + 'VALIDATED', + 'REJECTED' +); + + +ALTER TYPE public.validationstatus OWNER TO kincses; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: addresses; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.addresses ( + id uuid NOT NULL, + postal_code_id integer, + street_name character varying(200) NOT NULL, + street_type character varying(50) NOT NULL, + house_number character varying(50) NOT NULL, + stairwell character varying(20), + floor character varying(20), + door character varying(20), + parcel_id character varying(50), + full_address_text text, + created_at timestamp with time zone DEFAULT now(), + latitude double precision, + longitude double precision +); + + +ALTER TABLE data.addresses OWNER TO service_finder_app; + +-- +-- Name: asset_assignments; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.asset_assignments ( + id uuid NOT NULL, + asset_id uuid NOT NULL, + organization_id integer NOT NULL, + assigned_at timestamp with time zone DEFAULT now(), + released_at timestamp with time zone, + status character varying(30) +); + + +ALTER TABLE data.asset_assignments OWNER TO service_finder_app; + +-- +-- Name: asset_costs; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.asset_costs ( + id uuid NOT NULL, + asset_id uuid NOT NULL, + organization_id integer NOT NULL, + driver_id integer, + cost_type character varying(50) NOT NULL, + date timestamp with time zone DEFAULT now(), + mileage_at_cost integer, + data jsonb DEFAULT '{}'::jsonb, + amount_local numeric(18,2) NOT NULL, + currency_local character varying(3) NOT NULL, + amount_eur numeric(18,2), + net_amount_local numeric(18,2), + vat_rate numeric(5,2), + exchange_rate_used numeric(18,6) +); + + +ALTER TABLE data.asset_costs OWNER TO service_finder_app; + +-- +-- Name: asset_events; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.asset_events ( + id uuid NOT NULL, + asset_id uuid NOT NULL, + event_type character varying(50) NOT NULL, + recorded_mileage integer, + data jsonb DEFAULT '{}'::jsonb +); + + +ALTER TABLE data.asset_events OWNER TO service_finder_app; + +-- +-- Name: asset_financials; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.asset_financials ( + id integer NOT NULL, + asset_id uuid, + acquisition_price numeric(18,2), + acquisition_date timestamp without time zone, + financing_type character varying, + residual_value_estimate numeric(18,2) +); + + +ALTER TABLE data.asset_financials OWNER TO service_finder_app; + +-- +-- Name: asset_financials_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.asset_financials_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.asset_financials_id_seq OWNER TO service_finder_app; + +-- +-- Name: asset_financials_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.asset_financials_id_seq OWNED BY data.asset_financials.id; + + +-- +-- Name: asset_reviews; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.asset_reviews ( + id integer NOT NULL, + asset_id uuid NOT NULL, + user_id integer NOT NULL, + overall_rating integer, + criteria_scores jsonb DEFAULT '{}'::jsonb, + comment text, + created_at timestamp with time zone DEFAULT now() +); + + +ALTER TABLE data.asset_reviews OWNER TO service_finder_app; + +-- +-- Name: asset_reviews_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.asset_reviews_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.asset_reviews_id_seq OWNER TO service_finder_app; + +-- +-- Name: asset_reviews_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.asset_reviews_id_seq OWNED BY data.asset_reviews.id; + + +-- +-- Name: asset_telemetry; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.asset_telemetry ( + id integer NOT NULL, + asset_id uuid, + current_mileage integer, + mileage_unit character varying(10), + vqi_score numeric(5,2), + dbs_score numeric(5,2) +); + + +ALTER TABLE data.asset_telemetry OWNER TO service_finder_app; + +-- +-- Name: asset_telemetry_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.asset_telemetry_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.asset_telemetry_id_seq OWNER TO service_finder_app; + +-- +-- Name: asset_telemetry_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.asset_telemetry_id_seq OWNED BY data.asset_telemetry.id; + + +-- +-- Name: assets; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.assets ( + id uuid NOT NULL, + vin character varying(17) NOT NULL, + license_plate character varying(20), + name character varying, + year_of_manufacture integer, + catalog_id integer, + is_verified boolean, + status character varying(20), + created_at timestamp with time zone DEFAULT now(), + updated_at timestamp with time zone, + current_organization_id integer, + verification_method character varying(20), + verification_notes text, + catalog_match_score numeric(5,2) +); + + +ALTER TABLE data.assets OWNER TO service_finder_app; + +-- +-- Name: audit_logs; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.audit_logs ( + id integer NOT NULL, + user_id integer, + target_type character varying, + target_id character varying, + action character varying NOT NULL, + "timestamp" timestamp with time zone DEFAULT now(), + severity data.logseverity NOT NULL, + old_data json, + new_data json, + ip_address character varying(45), + user_agent text +); + + +ALTER TABLE data.audit_logs OWNER TO service_finder_app; + +-- +-- Name: audit_logs_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.audit_logs_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.audit_logs_id_seq OWNER TO service_finder_app; + +-- +-- Name: audit_logs_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.audit_logs_id_seq OWNED BY data.audit_logs.id; + + +-- +-- Name: badges; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.badges ( + id integer NOT NULL, + name character varying NOT NULL, + description character varying NOT NULL, + icon_url character varying +); + + +ALTER TABLE data.badges OWNER TO service_finder_app; + +-- +-- Name: badges_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.badges_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.badges_id_seq OWNER TO service_finder_app; + +-- +-- Name: badges_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.badges_id_seq OWNED BY data.badges.id; + + +-- +-- Name: credit_logs; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.credit_logs ( + id integer NOT NULL, + org_id integer, + amount numeric(10,2), + description character varying, + created_at timestamp without time zone DEFAULT now() +); + + +ALTER TABLE data.credit_logs OWNER TO service_finder_app; + +-- +-- Name: credit_logs_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.credit_logs_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.credit_logs_id_seq OWNER TO service_finder_app; + +-- +-- Name: credit_logs_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.credit_logs_id_seq OWNED BY data.credit_logs.id; + + +-- +-- Name: documents; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.documents ( + id uuid NOT NULL, + parent_type character varying(20) NOT NULL, + parent_id character varying(50) NOT NULL, + doc_type character varying(50), + original_name character varying(255) NOT NULL, + file_hash character varying(64) NOT NULL, + file_ext character varying(10), + mime_type character varying(100), + file_size integer, + has_thumbnail boolean, + thumbnail_path character varying(255), + uploaded_by integer, + created_at timestamp with time zone DEFAULT now() +); + + +ALTER TABLE data.documents OWNER TO service_finder_app; + +-- +-- Name: exchange_rates; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.exchange_rates ( + id integer NOT NULL, + base_currency character varying(3), + target_currency character varying(3), + rate numeric(18,6) NOT NULL +); + + +ALTER TABLE data.exchange_rates OWNER TO service_finder_app; + +-- +-- Name: exchange_rates_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.exchange_rates_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.exchange_rates_id_seq OWNER TO service_finder_app; + +-- +-- Name: exchange_rates_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.exchange_rates_id_seq OWNED BY data.exchange_rates.id; + + +-- +-- Name: expertise_tags; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.expertise_tags ( + id integer NOT NULL, + key character varying(50), + name_hu character varying(100), + category character varying(30) +); + + +ALTER TABLE data.expertise_tags OWNER TO service_finder_app; + +-- +-- Name: expertise_tags_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.expertise_tags_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.expertise_tags_id_seq OWNER TO service_finder_app; + +-- +-- Name: expertise_tags_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.expertise_tags_id_seq OWNED BY data.expertise_tags.id; + + +-- +-- Name: geo_postal_codes; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.geo_postal_codes ( + id integer NOT NULL, + country_code character varying(5), + zip_code character varying(10) NOT NULL, + city character varying(100) NOT NULL +); + + +ALTER TABLE data.geo_postal_codes OWNER TO service_finder_app; + +-- +-- Name: geo_postal_codes_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.geo_postal_codes_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.geo_postal_codes_id_seq OWNER TO service_finder_app; + +-- +-- Name: geo_postal_codes_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.geo_postal_codes_id_seq OWNED BY data.geo_postal_codes.id; + + +-- +-- Name: geo_street_types; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.geo_street_types ( + id integer NOT NULL, + name character varying(50) NOT NULL +); + + +ALTER TABLE data.geo_street_types OWNER TO service_finder_app; + +-- +-- Name: geo_street_types_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.geo_street_types_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.geo_street_types_id_seq OWNER TO service_finder_app; + +-- +-- Name: geo_street_types_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.geo_street_types_id_seq OWNED BY data.geo_street_types.id; + + +-- +-- Name: geo_streets; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.geo_streets ( + id integer NOT NULL, + postal_code_id integer, + name character varying(200) NOT NULL +); + + +ALTER TABLE data.geo_streets OWNER TO service_finder_app; + +-- +-- Name: geo_streets_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.geo_streets_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.geo_streets_id_seq OWNER TO service_finder_app; + +-- +-- Name: geo_streets_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.geo_streets_id_seq OWNED BY data.geo_streets.id; + + +-- +-- Name: level_configs; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.level_configs ( + id integer NOT NULL, + level_number integer NOT NULL, + min_points integer NOT NULL, + rank_name character varying NOT NULL +); + + +ALTER TABLE data.level_configs OWNER TO service_finder_app; + +-- +-- Name: level_configs_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.level_configs_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.level_configs_id_seq OWNER TO service_finder_app; + +-- +-- Name: level_configs_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.level_configs_id_seq OWNED BY data.level_configs.id; + + +-- +-- Name: org_subscriptions; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.org_subscriptions ( + id integer NOT NULL, + org_id integer, + tier_id integer, + valid_from timestamp without time zone DEFAULT now(), + valid_until timestamp without time zone, + is_active boolean +); + + +ALTER TABLE data.org_subscriptions OWNER TO service_finder_app; + +-- +-- Name: org_subscriptions_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.org_subscriptions_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.org_subscriptions_id_seq OWNER TO service_finder_app; + +-- +-- Name: org_subscriptions_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.org_subscriptions_id_seq OWNED BY data.org_subscriptions.id; + + +-- +-- Name: organization_financials; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.organization_financials ( + id integer NOT NULL, + organization_id integer NOT NULL, + year integer NOT NULL, + turnover numeric(18,2), + profit numeric(18,2), + employee_count integer, + source character varying(50), + updated_at timestamp with time zone DEFAULT now() +); + + +ALTER TABLE data.organization_financials OWNER TO service_finder_app; + +-- +-- Name: organization_financials_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.organization_financials_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.organization_financials_id_seq OWNER TO service_finder_app; + +-- +-- Name: organization_financials_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.organization_financials_id_seq OWNED BY data.organization_financials.id; + + +-- +-- Name: organization_members; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.organization_members ( + id integer NOT NULL, + organization_id integer NOT NULL, + user_id integer, + role data.orguserrole, + permissions json DEFAULT '{}'::jsonb, + person_id bigint, + is_permanent boolean, + is_verified boolean +); + + +ALTER TABLE data.organization_members OWNER TO service_finder_app; + +-- +-- Name: organization_members_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.organization_members_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.organization_members_id_seq OWNER TO service_finder_app; + +-- +-- Name: organization_members_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.organization_members_id_seq OWNED BY data.organization_members.id; + + +-- +-- Name: organizations; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.organizations ( + id integer NOT NULL, + address_id uuid, + full_name character varying NOT NULL, + name character varying NOT NULL, + display_name character varying(50), + default_currency character varying(3), + country_code character varying(2), + language character varying(5), + address_zip character varying(10), + address_city character varying(100), + address_street_name character varying(150), + address_street_type character varying(50), + address_house_number character varying(20), + address_hrsz character varying(50), + tax_number character varying(20), + reg_number character varying(50), + org_type data.orgtype, + status character varying(30), + is_deleted boolean, + notification_settings json DEFAULT '{"notify_owner": true, "alert_days_before": [30, 15, 7, 1]}'::jsonb, + external_integration_config json DEFAULT '{}'::jsonb, + owner_id integer, + is_active boolean, + is_verified boolean, + created_at timestamp with time zone DEFAULT now(), + updated_at timestamp with time zone, + folder_slug character varying(12) +); + + +ALTER TABLE data.organizations OWNER TO service_finder_app; + +-- +-- Name: organizations_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.organizations_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.organizations_id_seq OWNER TO service_finder_app; + +-- +-- Name: organizations_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.organizations_id_seq OWNED BY data.organizations.id; + + +-- +-- Name: pending_actions; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.pending_actions ( + id integer NOT NULL, + requester_id integer NOT NULL, + approver_id integer, + status data.actionstatus NOT NULL, + action_type character varying(50) NOT NULL, + payload json NOT NULL, + reason character varying(255) NOT NULL, + created_at timestamp with time zone DEFAULT now(), + expires_at timestamp with time zone, + processed_at timestamp with time zone +); + + +ALTER TABLE data.pending_actions OWNER TO service_finder_app; + +-- +-- Name: pending_actions_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.pending_actions_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.pending_actions_id_seq OWNER TO service_finder_app; + +-- +-- Name: pending_actions_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.pending_actions_id_seq OWNED BY data.pending_actions.id; + + +-- +-- Name: persons; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.persons ( + id bigint NOT NULL, + id_uuid uuid NOT NULL, + address_id uuid, + last_name character varying NOT NULL, + first_name character varying NOT NULL, + phone character varying, + identity_docs json DEFAULT '{}'::jsonb, + is_active boolean NOT NULL, + created_at timestamp with time zone DEFAULT now(), + updated_at timestamp with time zone, + mothers_last_name character varying, + mothers_first_name character varying, + birth_place character varying, + birth_date timestamp without time zone, + ice_contact json DEFAULT '{}'::jsonb, + is_ghost boolean DEFAULT true NOT NULL +); + + +ALTER TABLE data.persons OWNER TO service_finder_app; + +-- +-- Name: persons_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.persons_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.persons_id_seq OWNER TO service_finder_app; + +-- +-- Name: persons_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.persons_id_seq OWNED BY data.persons.id; + + +-- +-- Name: point_rules; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.point_rules ( + id integer NOT NULL, + action_key character varying NOT NULL, + points integer NOT NULL, + description character varying, + is_active boolean NOT NULL +); + + +ALTER TABLE data.point_rules OWNER TO service_finder_app; + +-- +-- Name: point_rules_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.point_rules_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.point_rules_id_seq OWNER TO service_finder_app; + +-- +-- Name: point_rules_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.point_rules_id_seq OWNED BY data.point_rules.id; + + +-- +-- Name: points_ledger; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.points_ledger ( + id integer NOT NULL, + user_id integer NOT NULL, + points integer NOT NULL, + reason character varying NOT NULL, + created_at timestamp without time zone NOT NULL, + penalty_change integer DEFAULT 0 NOT NULL +); + + +ALTER TABLE data.points_ledger OWNER TO service_finder_app; + +-- +-- Name: points_ledger_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.points_ledger_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.points_ledger_id_seq OWNER TO service_finder_app; + +-- +-- Name: points_ledger_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.points_ledger_id_seq OWNED BY data.points_ledger.id; + + +-- +-- Name: ratings; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.ratings ( + id uuid NOT NULL, + author_id integer NOT NULL, + target_type character varying(20) NOT NULL, + target_id uuid NOT NULL, + score integer NOT NULL, + comment character varying +); + + +ALTER TABLE data.ratings OWNER TO service_finder_app; + +-- +-- Name: regional_settings; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.regional_settings ( + id integer NOT NULL, + country_code character varying NOT NULL, + currency character varying NOT NULL, + is_active boolean NOT NULL +); + + +ALTER TABLE data.regional_settings OWNER TO service_finder_app; + +-- +-- Name: regional_settings_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.regional_settings_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.regional_settings_id_seq OWNER TO service_finder_app; + +-- +-- Name: regional_settings_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.regional_settings_id_seq OWNED BY data.regional_settings.id; + + +-- +-- Name: service_expertises; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.service_expertises ( + service_id integer NOT NULL, + expertise_id integer NOT NULL, + validation_level integer DEFAULT 0 +); + + +ALTER TABLE data.service_expertises OWNER TO service_finder_app; + +-- +-- Name: service_profiles; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.service_profiles ( + id integer NOT NULL, + organization_id integer, + location data.geometry(Point,4326), + trust_score integer DEFAULT 30, + is_verified boolean DEFAULT false, + verification_log json DEFAULT '{}'::jsonb, + opening_hours json DEFAULT '{}'::jsonb, + contact_phone character varying, + website character varying, + bio text, + status character varying(20) DEFAULT 'ghost'::character varying, + last_audit_at timestamp with time zone DEFAULT now(), + google_place_id character varying(100), + rating double precision, + user_ratings_total integer, + specialization_tags jsonb DEFAULT '{}'::jsonb +); + + +ALTER TABLE data.service_profiles OWNER TO service_finder_app; + +-- +-- Name: service_profiles_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.service_profiles_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.service_profiles_id_seq OWNER TO service_finder_app; + +-- +-- Name: service_profiles_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.service_profiles_id_seq OWNED BY data.service_profiles.id; + + +-- +-- Name: service_specialties; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.service_specialties ( + id integer NOT NULL, + parent_id integer, + name character varying NOT NULL, + slug character varying +); + + +ALTER TABLE data.service_specialties OWNER TO service_finder_app; + +-- +-- Name: service_specialties_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.service_specialties_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.service_specialties_id_seq OWNER TO service_finder_app; + +-- +-- Name: service_specialties_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.service_specialties_id_seq OWNED BY data.service_specialties.id; + + +-- +-- Name: social_accounts; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.social_accounts ( + id integer NOT NULL, + user_id integer NOT NULL, + provider character varying(50) NOT NULL, + social_id character varying(255) NOT NULL, + email character varying(255) NOT NULL, + extra_data json DEFAULT '{}'::jsonb, + created_at timestamp with time zone DEFAULT now() +); + + +ALTER TABLE data.social_accounts OWNER TO service_finder_app; + +-- +-- Name: social_accounts_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.social_accounts_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.social_accounts_id_seq OWNER TO service_finder_app; + +-- +-- Name: social_accounts_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.social_accounts_id_seq OWNED BY data.social_accounts.id; + + +-- +-- Name: subscription_tiers; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.subscription_tiers ( + id integer NOT NULL, + name character varying, + rules json, + is_custom boolean +); + + +ALTER TABLE data.subscription_tiers OWNER TO service_finder_app; + +-- +-- Name: subscription_tiers_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.subscription_tiers_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.subscription_tiers_id_seq OWNER TO service_finder_app; + +-- +-- Name: subscription_tiers_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.subscription_tiers_id_seq OWNED BY data.subscription_tiers.id; + + +-- +-- Name: system_parameters; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.system_parameters ( + key character varying(50) NOT NULL, + value json NOT NULL, + is_active boolean, + description character varying, + updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP +); + + +ALTER TABLE data.system_parameters OWNER TO service_finder_app; + +-- +-- Name: translations; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.translations ( + id integer NOT NULL, + key character varying(100) NOT NULL, + lang_code character varying(5) NOT NULL, + value text NOT NULL, + is_published boolean +); + + +ALTER TABLE data.translations OWNER TO service_finder_app; + +-- +-- Name: translations_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.translations_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.translations_id_seq OWNER TO service_finder_app; + +-- +-- Name: translations_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.translations_id_seq OWNED BY data.translations.id; + + +-- +-- Name: user_badges; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.user_badges ( + id integer NOT NULL, + user_id integer NOT NULL, + badge_id integer NOT NULL, + earned_at timestamp without time zone NOT NULL +); + + +ALTER TABLE data.user_badges OWNER TO service_finder_app; + +-- +-- Name: user_badges_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.user_badges_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.user_badges_id_seq OWNER TO service_finder_app; + +-- +-- Name: user_badges_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.user_badges_id_seq OWNED BY data.user_badges.id; + + +-- +-- Name: user_stats; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.user_stats ( + user_id integer NOT NULL, + total_xp integer NOT NULL, + social_points integer NOT NULL, + current_level integer NOT NULL, + updated_at timestamp without time zone NOT NULL, + penalty_points integer DEFAULT 0 NOT NULL, + restriction_level integer DEFAULT 0 NOT NULL +); + + +ALTER TABLE data.user_stats OWNER TO service_finder_app; + +-- +-- Name: users; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.users ( + id integer NOT NULL, + email character varying NOT NULL, + hashed_password character varying, + role data.userrole, + is_active boolean, + is_deleted boolean, + person_id bigint, + created_at timestamp with time zone DEFAULT now(), + scope_level character varying(30) DEFAULT 'individual'::character varying, + scope_id character varying(50), + custom_permissions json DEFAULT '{}'::jsonb, + preferred_language character varying(5) DEFAULT 'hu'::character varying, + region_code character varying(5) DEFAULT 'HU'::character varying, + folder_slug character varying(12), + refresh_token_hash character varying(255), + two_factor_secret character varying(100), + two_factor_enabled boolean, + preferred_currency character varying(3) DEFAULT 'HUF'::character varying +); + + +ALTER TABLE data.users OWNER TO service_finder_app; + +-- +-- Name: users_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.users_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.users_id_seq OWNER TO service_finder_app; + +-- +-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.users_id_seq OWNED BY data.users.id; + + +-- +-- Name: vehicle_catalog; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.vehicle_catalog ( + id integer NOT NULL, + make character varying NOT NULL, + model character varying NOT NULL, + generation character varying, + year_from integer, + year_to integer, + vehicle_class character varying, + fuel_type character varying, + engine_code character varying, + factory_data jsonb DEFAULT '{}'::jsonb, + engine_variant character varying +); + + +ALTER TABLE data.vehicle_catalog OWNER TO service_finder_app; + +-- +-- Name: vehicle_catalog_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.vehicle_catalog_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.vehicle_catalog_id_seq OWNER TO service_finder_app; + +-- +-- Name: vehicle_catalog_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.vehicle_catalog_id_seq OWNED BY data.vehicle_catalog.id; + + +-- +-- Name: vehicle_ownerships; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.vehicle_ownerships ( + id integer NOT NULL, + vehicle_id uuid NOT NULL, + user_id integer NOT NULL, + start_date date NOT NULL, + end_date date, + notes text +); + + +ALTER TABLE data.vehicle_ownerships OWNER TO service_finder_app; + +-- +-- Name: vehicle_ownerships_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.vehicle_ownerships_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.vehicle_ownerships_id_seq OWNER TO service_finder_app; + +-- +-- Name: vehicle_ownerships_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.vehicle_ownerships_id_seq OWNED BY data.vehicle_ownerships.id; + + +-- +-- Name: verification_tokens; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.verification_tokens ( + id integer NOT NULL, + token uuid NOT NULL, + user_id integer NOT NULL, + token_type character varying(20) NOT NULL, + created_at timestamp with time zone DEFAULT now(), + expires_at timestamp with time zone NOT NULL, + is_used boolean +); + + +ALTER TABLE data.verification_tokens OWNER TO service_finder_app; + +-- +-- Name: verification_tokens_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.verification_tokens_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.verification_tokens_id_seq OWNER TO service_finder_app; + +-- +-- Name: verification_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.verification_tokens_id_seq OWNED BY data.verification_tokens.id; + + +-- +-- Name: wallets; Type: TABLE; Schema: data; Owner: service_finder_app +-- + +CREATE TABLE data.wallets ( + id integer NOT NULL, + user_id integer, + coin_balance numeric(18,2), + credit_balance numeric(18,2), + currency character varying(3) +); + + +ALTER TABLE data.wallets OWNER TO service_finder_app; + +-- +-- Name: wallets_id_seq; Type: SEQUENCE; Schema: data; Owner: service_finder_app +-- + +CREATE SEQUENCE data.wallets_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE data.wallets_id_seq OWNER TO service_finder_app; + +-- +-- Name: wallets_id_seq; Type: SEQUENCE OWNED BY; Schema: data; Owner: service_finder_app +-- + +ALTER SEQUENCE data.wallets_id_seq OWNED BY data.wallets.id; + + +-- +-- Name: alembic_version; Type: TABLE; Schema: public; Owner: service_finder_app +-- + +CREATE TABLE public.alembic_version ( + version_num character varying(32) NOT NULL +); + + +ALTER TABLE public.alembic_version OWNER TO service_finder_app; + +-- +-- Name: asset_financials id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_financials ALTER COLUMN id SET DEFAULT nextval('data.asset_financials_id_seq'::regclass); + + +-- +-- Name: asset_reviews id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_reviews ALTER COLUMN id SET DEFAULT nextval('data.asset_reviews_id_seq'::regclass); + + +-- +-- Name: asset_telemetry id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_telemetry ALTER COLUMN id SET DEFAULT nextval('data.asset_telemetry_id_seq'::regclass); + + +-- +-- Name: audit_logs id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.audit_logs ALTER COLUMN id SET DEFAULT nextval('data.audit_logs_id_seq'::regclass); + + +-- +-- Name: badges id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.badges ALTER COLUMN id SET DEFAULT nextval('data.badges_id_seq'::regclass); + + +-- +-- Name: credit_logs id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.credit_logs ALTER COLUMN id SET DEFAULT nextval('data.credit_logs_id_seq'::regclass); + + +-- +-- Name: exchange_rates id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.exchange_rates ALTER COLUMN id SET DEFAULT nextval('data.exchange_rates_id_seq'::regclass); + + +-- +-- Name: expertise_tags id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.expertise_tags ALTER COLUMN id SET DEFAULT nextval('data.expertise_tags_id_seq'::regclass); + + +-- +-- Name: geo_postal_codes id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_postal_codes ALTER COLUMN id SET DEFAULT nextval('data.geo_postal_codes_id_seq'::regclass); + + +-- +-- Name: geo_street_types id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_street_types ALTER COLUMN id SET DEFAULT nextval('data.geo_street_types_id_seq'::regclass); + + +-- +-- Name: geo_streets id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_streets ALTER COLUMN id SET DEFAULT nextval('data.geo_streets_id_seq'::regclass); + + +-- +-- Name: level_configs id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.level_configs ALTER COLUMN id SET DEFAULT nextval('data.level_configs_id_seq'::regclass); + + +-- +-- Name: org_subscriptions id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.org_subscriptions ALTER COLUMN id SET DEFAULT nextval('data.org_subscriptions_id_seq'::regclass); + + +-- +-- Name: organization_financials id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_financials ALTER COLUMN id SET DEFAULT nextval('data.organization_financials_id_seq'::regclass); + + +-- +-- Name: organization_members id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_members ALTER COLUMN id SET DEFAULT nextval('data.organization_members_id_seq'::regclass); + + +-- +-- Name: organizations id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organizations ALTER COLUMN id SET DEFAULT nextval('data.organizations_id_seq'::regclass); + + +-- +-- Name: pending_actions id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.pending_actions ALTER COLUMN id SET DEFAULT nextval('data.pending_actions_id_seq'::regclass); + + +-- +-- Name: persons id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.persons ALTER COLUMN id SET DEFAULT nextval('data.persons_id_seq'::regclass); + + +-- +-- Name: point_rules id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.point_rules ALTER COLUMN id SET DEFAULT nextval('data.point_rules_id_seq'::regclass); + + +-- +-- Name: points_ledger id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.points_ledger ALTER COLUMN id SET DEFAULT nextval('data.points_ledger_id_seq'::regclass); + + +-- +-- Name: regional_settings id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.regional_settings ALTER COLUMN id SET DEFAULT nextval('data.regional_settings_id_seq'::regclass); + + +-- +-- Name: service_profiles id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_profiles ALTER COLUMN id SET DEFAULT nextval('data.service_profiles_id_seq'::regclass); + + +-- +-- Name: service_specialties id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_specialties ALTER COLUMN id SET DEFAULT nextval('data.service_specialties_id_seq'::regclass); + + +-- +-- Name: social_accounts id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.social_accounts ALTER COLUMN id SET DEFAULT nextval('data.social_accounts_id_seq'::regclass); + + +-- +-- Name: subscription_tiers id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.subscription_tiers ALTER COLUMN id SET DEFAULT nextval('data.subscription_tiers_id_seq'::regclass); + + +-- +-- Name: translations id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.translations ALTER COLUMN id SET DEFAULT nextval('data.translations_id_seq'::regclass); + + +-- +-- Name: user_badges id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.user_badges ALTER COLUMN id SET DEFAULT nextval('data.user_badges_id_seq'::regclass); + + +-- +-- Name: users id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.users ALTER COLUMN id SET DEFAULT nextval('data.users_id_seq'::regclass); + + +-- +-- Name: vehicle_catalog id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.vehicle_catalog ALTER COLUMN id SET DEFAULT nextval('data.vehicle_catalog_id_seq'::regclass); + + +-- +-- Name: vehicle_ownerships id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.vehicle_ownerships ALTER COLUMN id SET DEFAULT nextval('data.vehicle_ownerships_id_seq'::regclass); + + +-- +-- Name: verification_tokens id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.verification_tokens ALTER COLUMN id SET DEFAULT nextval('data.verification_tokens_id_seq'::regclass); + + +-- +-- Name: wallets id; Type: DEFAULT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.wallets ALTER COLUMN id SET DEFAULT nextval('data.wallets_id_seq'::regclass); + + +-- +-- Name: addresses addresses_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.addresses + ADD CONSTRAINT addresses_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_assignments asset_assignments_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_assignments + ADD CONSTRAINT asset_assignments_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_costs asset_costs_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_costs + ADD CONSTRAINT asset_costs_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_events asset_events_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_events + ADD CONSTRAINT asset_events_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_financials asset_financials_asset_id_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_financials + ADD CONSTRAINT asset_financials_asset_id_key UNIQUE (asset_id); + + +-- +-- Name: asset_financials asset_financials_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_financials + ADD CONSTRAINT asset_financials_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_reviews asset_reviews_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_reviews + ADD CONSTRAINT asset_reviews_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_telemetry asset_telemetry_asset_id_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_telemetry + ADD CONSTRAINT asset_telemetry_asset_id_key UNIQUE (asset_id); + + +-- +-- Name: asset_telemetry asset_telemetry_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_telemetry + ADD CONSTRAINT asset_telemetry_pkey PRIMARY KEY (id); + + +-- +-- Name: assets assets_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.assets + ADD CONSTRAINT assets_pkey PRIMARY KEY (id); + + +-- +-- Name: audit_logs audit_logs_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.audit_logs + ADD CONSTRAINT audit_logs_pkey PRIMARY KEY (id); + + +-- +-- Name: badges badges_name_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.badges + ADD CONSTRAINT badges_name_key UNIQUE (name); + + +-- +-- Name: badges badges_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.badges + ADD CONSTRAINT badges_pkey PRIMARY KEY (id); + + +-- +-- Name: credit_logs credit_logs_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.credit_logs + ADD CONSTRAINT credit_logs_pkey PRIMARY KEY (id); + + +-- +-- Name: documents documents_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.documents + ADD CONSTRAINT documents_pkey PRIMARY KEY (id); + + +-- +-- Name: exchange_rates exchange_rates_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.exchange_rates + ADD CONSTRAINT exchange_rates_pkey PRIMARY KEY (id); + + +-- +-- Name: exchange_rates exchange_rates_target_currency_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.exchange_rates + ADD CONSTRAINT exchange_rates_target_currency_key UNIQUE (target_currency); + + +-- +-- Name: expertise_tags expertise_tags_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.expertise_tags + ADD CONSTRAINT expertise_tags_pkey PRIMARY KEY (id); + + +-- +-- Name: geo_postal_codes geo_postal_codes_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_postal_codes + ADD CONSTRAINT geo_postal_codes_pkey PRIMARY KEY (id); + + +-- +-- Name: geo_street_types geo_street_types_name_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_street_types + ADD CONSTRAINT geo_street_types_name_key UNIQUE (name); + + +-- +-- Name: geo_street_types geo_street_types_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_street_types + ADD CONSTRAINT geo_street_types_pkey PRIMARY KEY (id); + + +-- +-- Name: geo_streets geo_streets_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_streets + ADD CONSTRAINT geo_streets_pkey PRIMARY KEY (id); + + +-- +-- Name: level_configs level_configs_level_number_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.level_configs + ADD CONSTRAINT level_configs_level_number_key UNIQUE (level_number); + + +-- +-- Name: level_configs level_configs_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.level_configs + ADD CONSTRAINT level_configs_pkey PRIMARY KEY (id); + + +-- +-- Name: org_subscriptions org_subscriptions_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.org_subscriptions + ADD CONSTRAINT org_subscriptions_pkey PRIMARY KEY (id); + + +-- +-- Name: organization_financials organization_financials_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_financials + ADD CONSTRAINT organization_financials_pkey PRIMARY KEY (id); + + +-- +-- Name: organization_members organization_members_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_members + ADD CONSTRAINT organization_members_pkey PRIMARY KEY (id); + + +-- +-- Name: organizations organizations_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organizations + ADD CONSTRAINT organizations_pkey PRIMARY KEY (id); + + +-- +-- Name: pending_actions pending_actions_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.pending_actions + ADD CONSTRAINT pending_actions_pkey PRIMARY KEY (id); + + +-- +-- Name: persons persons_id_uuid_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.persons + ADD CONSTRAINT persons_id_uuid_key UNIQUE (id_uuid); + + +-- +-- Name: persons persons_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.persons + ADD CONSTRAINT persons_pkey PRIMARY KEY (id); + + +-- +-- Name: point_rules point_rules_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.point_rules + ADD CONSTRAINT point_rules_pkey PRIMARY KEY (id); + + +-- +-- Name: points_ledger points_ledger_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.points_ledger + ADD CONSTRAINT points_ledger_pkey PRIMARY KEY (id); + + +-- +-- Name: ratings ratings_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.ratings + ADD CONSTRAINT ratings_pkey PRIMARY KEY (id); + + +-- +-- Name: regional_settings regional_settings_country_code_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.regional_settings + ADD CONSTRAINT regional_settings_country_code_key UNIQUE (country_code); + + +-- +-- Name: regional_settings regional_settings_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.regional_settings + ADD CONSTRAINT regional_settings_pkey PRIMARY KEY (id); + + +-- +-- Name: service_expertises service_expertises_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_expertises + ADD CONSTRAINT service_expertises_pkey PRIMARY KEY (service_id, expertise_id); + + +-- +-- Name: service_profiles service_profiles_google_place_id_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_profiles + ADD CONSTRAINT service_profiles_google_place_id_key UNIQUE (google_place_id); + + +-- +-- Name: service_profiles service_profiles_organization_id_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_profiles + ADD CONSTRAINT service_profiles_organization_id_key UNIQUE (organization_id); + + +-- +-- Name: service_profiles service_profiles_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_profiles + ADD CONSTRAINT service_profiles_pkey PRIMARY KEY (id); + + +-- +-- Name: service_specialties service_specialties_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_specialties + ADD CONSTRAINT service_specialties_pkey PRIMARY KEY (id); + + +-- +-- Name: service_specialties service_specialties_slug_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_specialties + ADD CONSTRAINT service_specialties_slug_key UNIQUE (slug); + + +-- +-- Name: social_accounts social_accounts_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.social_accounts + ADD CONSTRAINT social_accounts_pkey PRIMARY KEY (id); + + +-- +-- Name: subscription_tiers subscription_tiers_name_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.subscription_tiers + ADD CONSTRAINT subscription_tiers_name_key UNIQUE (name); + + +-- +-- Name: subscription_tiers subscription_tiers_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.subscription_tiers + ADD CONSTRAINT subscription_tiers_pkey PRIMARY KEY (id); + + +-- +-- Name: system_parameters system_parameters_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.system_parameters + ADD CONSTRAINT system_parameters_pkey PRIMARY KEY (key); + + +-- +-- Name: translations translations_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.translations + ADD CONSTRAINT translations_pkey PRIMARY KEY (id); + + +-- +-- Name: social_accounts uix_social_provider_id; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.social_accounts + ADD CONSTRAINT uix_social_provider_id UNIQUE (provider, social_id); + + +-- +-- Name: vehicle_catalog uix_vehicle_catalog_full; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.vehicle_catalog + ADD CONSTRAINT uix_vehicle_catalog_full UNIQUE (make, model, year_from, engine_variant, fuel_type); + + +-- +-- Name: translations uq_translation_key_lang; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.translations + ADD CONSTRAINT uq_translation_key_lang UNIQUE (key, lang_code); + + +-- +-- Name: user_badges user_badges_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.user_badges + ADD CONSTRAINT user_badges_pkey PRIMARY KEY (id); + + +-- +-- Name: user_stats user_stats_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.user_stats + ADD CONSTRAINT user_stats_pkey PRIMARY KEY (user_id); + + +-- +-- Name: users users_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: vehicle_catalog vehicle_catalog_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.vehicle_catalog + ADD CONSTRAINT vehicle_catalog_pkey PRIMARY KEY (id); + + +-- +-- Name: vehicle_ownerships vehicle_ownerships_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.vehicle_ownerships + ADD CONSTRAINT vehicle_ownerships_pkey PRIMARY KEY (id); + + +-- +-- Name: verification_tokens verification_tokens_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.verification_tokens + ADD CONSTRAINT verification_tokens_pkey PRIMARY KEY (id); + + +-- +-- Name: verification_tokens verification_tokens_token_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.verification_tokens + ADD CONSTRAINT verification_tokens_token_key UNIQUE (token); + + +-- +-- Name: wallets wallets_pkey; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.wallets + ADD CONSTRAINT wallets_pkey PRIMARY KEY (id); + + +-- +-- Name: wallets wallets_user_id_key; Type: CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.wallets + ADD CONSTRAINT wallets_user_id_key UNIQUE (user_id); + + +-- +-- Name: alembic_version alembic_version_pkc; Type: CONSTRAINT; Schema: public; Owner: service_finder_app +-- + +ALTER TABLE ONLY public.alembic_version + ADD CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num); + + +-- +-- Name: idx_service_profiles_location; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX idx_service_profiles_location ON data.service_profiles USING gist (location); + + +-- +-- Name: ix_data_assets_license_plate; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_assets_license_plate ON data.assets USING btree (license_plate); + + +-- +-- Name: ix_data_assets_vin; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE UNIQUE INDEX ix_data_assets_vin ON data.assets USING btree (vin); + + +-- +-- Name: ix_data_audit_logs_action; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_audit_logs_action ON data.audit_logs USING btree (action); + + +-- +-- Name: ix_data_audit_logs_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_audit_logs_id ON data.audit_logs USING btree (id); + + +-- +-- Name: ix_data_audit_logs_ip_address; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_audit_logs_ip_address ON data.audit_logs USING btree (ip_address); + + +-- +-- Name: ix_data_audit_logs_target_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_audit_logs_target_id ON data.audit_logs USING btree (target_id); + + +-- +-- Name: ix_data_audit_logs_target_type; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_audit_logs_target_type ON data.audit_logs USING btree (target_type); + + +-- +-- Name: ix_data_audit_logs_timestamp; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_audit_logs_timestamp ON data.audit_logs USING btree ("timestamp"); + + +-- +-- Name: ix_data_badges_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_badges_id ON data.badges USING btree (id); + + +-- +-- Name: ix_data_expertise_tags_key; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE UNIQUE INDEX ix_data_expertise_tags_key ON data.expertise_tags USING btree (key); + + +-- +-- Name: ix_data_level_configs_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_level_configs_id ON data.level_configs USING btree (id); + + +-- +-- Name: ix_data_organization_financials_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_organization_financials_id ON data.organization_financials USING btree (id); + + +-- +-- Name: ix_data_organization_members_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_organization_members_id ON data.organization_members USING btree (id); + + +-- +-- Name: ix_data_organizations_folder_slug; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE UNIQUE INDEX ix_data_organizations_folder_slug ON data.organizations USING btree (folder_slug); + + +-- +-- Name: ix_data_organizations_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_organizations_id ON data.organizations USING btree (id); + + +-- +-- Name: ix_data_organizations_tax_number; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE UNIQUE INDEX ix_data_organizations_tax_number ON data.organizations USING btree (tax_number); + + +-- +-- Name: ix_data_pending_actions_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_pending_actions_id ON data.pending_actions USING btree (id); + + +-- +-- Name: ix_data_persons_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_persons_id ON data.persons USING btree (id); + + +-- +-- Name: ix_data_point_rules_action_key; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE UNIQUE INDEX ix_data_point_rules_action_key ON data.point_rules USING btree (action_key); + + +-- +-- Name: ix_data_point_rules_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_point_rules_id ON data.point_rules USING btree (id); + + +-- +-- Name: ix_data_points_ledger_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_points_ledger_id ON data.points_ledger USING btree (id); + + +-- +-- Name: ix_data_regional_settings_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_regional_settings_id ON data.regional_settings USING btree (id); + + +-- +-- Name: ix_data_service_profiles_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_service_profiles_id ON data.service_profiles USING btree (id); + + +-- +-- Name: ix_data_service_profiles_location; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_service_profiles_location ON data.service_profiles USING btree (location); + + +-- +-- Name: ix_data_service_profiles_status; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_service_profiles_status ON data.service_profiles USING btree (status); + + +-- +-- Name: ix_data_social_accounts_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_social_accounts_id ON data.social_accounts USING btree (id); + + +-- +-- Name: ix_data_social_accounts_social_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_social_accounts_social_id ON data.social_accounts USING btree (social_id); + + +-- +-- Name: ix_data_system_parameters_key; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_system_parameters_key ON data.system_parameters USING btree (key); + + +-- +-- Name: ix_data_translations_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_translations_id ON data.translations USING btree (id); + + +-- +-- Name: ix_data_translations_key; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_translations_key ON data.translations USING btree (key); + + +-- +-- Name: ix_data_translations_lang_code; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_translations_lang_code ON data.translations USING btree (lang_code); + + +-- +-- Name: ix_data_user_badges_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_user_badges_id ON data.user_badges USING btree (id); + + +-- +-- Name: ix_data_users_email; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE UNIQUE INDEX ix_data_users_email ON data.users USING btree (email); + + +-- +-- Name: ix_data_users_folder_slug; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE UNIQUE INDEX ix_data_users_folder_slug ON data.users USING btree (folder_slug); + + +-- +-- Name: ix_data_users_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_users_id ON data.users USING btree (id); + + +-- +-- Name: ix_data_vehicle_catalog_engine_variant; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_vehicle_catalog_engine_variant ON data.vehicle_catalog USING btree (engine_variant); + + +-- +-- Name: ix_data_vehicle_catalog_fuel_type; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_vehicle_catalog_fuel_type ON data.vehicle_catalog USING btree (fuel_type); + + +-- +-- Name: ix_data_vehicle_catalog_generation; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_vehicle_catalog_generation ON data.vehicle_catalog USING btree (generation); + + +-- +-- Name: ix_data_vehicle_catalog_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_vehicle_catalog_id ON data.vehicle_catalog USING btree (id); + + +-- +-- Name: ix_data_vehicle_catalog_make; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_vehicle_catalog_make ON data.vehicle_catalog USING btree (make); + + +-- +-- Name: ix_data_vehicle_catalog_model; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_vehicle_catalog_model ON data.vehicle_catalog USING btree (model); + + +-- +-- Name: ix_data_vehicle_ownerships_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_vehicle_ownerships_id ON data.vehicle_ownerships USING btree (id); + + +-- +-- Name: ix_data_verification_tokens_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_verification_tokens_id ON data.verification_tokens USING btree (id); + + +-- +-- Name: ix_data_wallets_id; Type: INDEX; Schema: data; Owner: service_finder_app +-- + +CREATE INDEX ix_data_wallets_id ON data.wallets USING btree (id); + + +-- +-- Name: addresses addresses_postal_code_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.addresses + ADD CONSTRAINT addresses_postal_code_id_fkey FOREIGN KEY (postal_code_id) REFERENCES data.geo_postal_codes(id); + + +-- +-- Name: asset_assignments asset_assignments_asset_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_assignments + ADD CONSTRAINT asset_assignments_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES data.assets(id); + + +-- +-- Name: asset_assignments asset_assignments_organization_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_assignments + ADD CONSTRAINT asset_assignments_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES data.organizations(id); + + +-- +-- Name: asset_costs asset_costs_asset_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_costs + ADD CONSTRAINT asset_costs_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES data.assets(id); + + +-- +-- Name: asset_costs asset_costs_driver_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_costs + ADD CONSTRAINT asset_costs_driver_id_fkey FOREIGN KEY (driver_id) REFERENCES data.users(id); + + +-- +-- Name: asset_costs asset_costs_organization_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_costs + ADD CONSTRAINT asset_costs_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES data.organizations(id); + + +-- +-- Name: asset_events asset_events_asset_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_events + ADD CONSTRAINT asset_events_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES data.assets(id); + + +-- +-- Name: asset_financials asset_financials_asset_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_financials + ADD CONSTRAINT asset_financials_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES data.assets(id); + + +-- +-- Name: asset_reviews asset_reviews_asset_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_reviews + ADD CONSTRAINT asset_reviews_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES data.assets(id); + + +-- +-- Name: asset_reviews asset_reviews_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_reviews + ADD CONSTRAINT asset_reviews_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: asset_telemetry asset_telemetry_asset_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.asset_telemetry + ADD CONSTRAINT asset_telemetry_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES data.assets(id); + + +-- +-- Name: assets assets_catalog_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.assets + ADD CONSTRAINT assets_catalog_id_fkey FOREIGN KEY (catalog_id) REFERENCES data.vehicle_catalog(id); + + +-- +-- Name: assets assets_current_organization_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.assets + ADD CONSTRAINT assets_current_organization_id_fkey FOREIGN KEY (current_organization_id) REFERENCES data.organizations(id); + + +-- +-- Name: audit_logs audit_logs_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.audit_logs + ADD CONSTRAINT audit_logs_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: credit_logs credit_logs_org_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.credit_logs + ADD CONSTRAINT credit_logs_org_id_fkey FOREIGN KEY (org_id) REFERENCES data.organizations(id); + + +-- +-- Name: documents documents_uploaded_by_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.documents + ADD CONSTRAINT documents_uploaded_by_fkey FOREIGN KEY (uploaded_by) REFERENCES data.users(id); + + +-- +-- Name: geo_streets geo_streets_postal_code_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.geo_streets + ADD CONSTRAINT geo_streets_postal_code_id_fkey FOREIGN KEY (postal_code_id) REFERENCES data.geo_postal_codes(id); + + +-- +-- Name: org_subscriptions org_subscriptions_org_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.org_subscriptions + ADD CONSTRAINT org_subscriptions_org_id_fkey FOREIGN KEY (org_id) REFERENCES data.organizations(id); + + +-- +-- Name: org_subscriptions org_subscriptions_tier_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.org_subscriptions + ADD CONSTRAINT org_subscriptions_tier_id_fkey FOREIGN KEY (tier_id) REFERENCES data.subscription_tiers(id); + + +-- +-- Name: organization_financials organization_financials_organization_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_financials + ADD CONSTRAINT organization_financials_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES data.organizations(id); + + +-- +-- Name: organization_members organization_members_organization_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_members + ADD CONSTRAINT organization_members_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES data.organizations(id); + + +-- +-- Name: organization_members organization_members_person_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_members + ADD CONSTRAINT organization_members_person_id_fkey FOREIGN KEY (person_id) REFERENCES data.persons(id); + + +-- +-- Name: organization_members organization_members_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organization_members + ADD CONSTRAINT organization_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: organizations organizations_address_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organizations + ADD CONSTRAINT organizations_address_id_fkey FOREIGN KEY (address_id) REFERENCES data.addresses(id); + + +-- +-- Name: organizations organizations_owner_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.organizations + ADD CONSTRAINT organizations_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES data.users(id); + + +-- +-- Name: pending_actions pending_actions_approver_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.pending_actions + ADD CONSTRAINT pending_actions_approver_id_fkey FOREIGN KEY (approver_id) REFERENCES data.users(id); + + +-- +-- Name: pending_actions pending_actions_requester_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.pending_actions + ADD CONSTRAINT pending_actions_requester_id_fkey FOREIGN KEY (requester_id) REFERENCES data.users(id); + + +-- +-- Name: persons persons_address_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.persons + ADD CONSTRAINT persons_address_id_fkey FOREIGN KEY (address_id) REFERENCES data.addresses(id); + + +-- +-- Name: points_ledger points_ledger_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.points_ledger + ADD CONSTRAINT points_ledger_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: ratings ratings_author_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.ratings + ADD CONSTRAINT ratings_author_id_fkey FOREIGN KEY (author_id) REFERENCES data.users(id); + + +-- +-- Name: service_expertises service_expertises_expertise_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_expertises + ADD CONSTRAINT service_expertises_expertise_id_fkey FOREIGN KEY (expertise_id) REFERENCES data.expertise_tags(id); + + +-- +-- Name: service_expertises service_expertises_service_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_expertises + ADD CONSTRAINT service_expertises_service_id_fkey FOREIGN KEY (service_id) REFERENCES data.service_profiles(id); + + +-- +-- Name: service_profiles service_profiles_organization_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_profiles + ADD CONSTRAINT service_profiles_organization_id_fkey FOREIGN KEY (organization_id) REFERENCES data.organizations(id); + + +-- +-- Name: service_specialties service_specialties_parent_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.service_specialties + ADD CONSTRAINT service_specialties_parent_id_fkey FOREIGN KEY (parent_id) REFERENCES data.service_specialties(id); + + +-- +-- Name: social_accounts social_accounts_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.social_accounts + ADD CONSTRAINT social_accounts_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id) ON DELETE CASCADE; + + +-- +-- Name: user_badges user_badges_badge_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.user_badges + ADD CONSTRAINT user_badges_badge_id_fkey FOREIGN KEY (badge_id) REFERENCES data.badges(id); + + +-- +-- Name: user_badges user_badges_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.user_badges + ADD CONSTRAINT user_badges_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: user_stats user_stats_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.user_stats + ADD CONSTRAINT user_stats_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: users users_person_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.users + ADD CONSTRAINT users_person_id_fkey FOREIGN KEY (person_id) REFERENCES data.persons(id); + + +-- +-- Name: vehicle_ownerships vehicle_ownerships_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.vehicle_ownerships + ADD CONSTRAINT vehicle_ownerships_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: vehicle_ownerships vehicle_ownerships_vehicle_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.vehicle_ownerships + ADD CONSTRAINT vehicle_ownerships_vehicle_id_fkey FOREIGN KEY (vehicle_id) REFERENCES data.assets(id); + + +-- +-- Name: verification_tokens verification_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.verification_tokens + ADD CONSTRAINT verification_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id) ON DELETE CASCADE; + + +-- +-- Name: wallets wallets_user_id_fkey; Type: FK CONSTRAINT; Schema: data; Owner: service_finder_app +-- + +ALTER TABLE ONLY data.wallets + ADD CONSTRAINT wallets_user_id_fkey FOREIGN KEY (user_id) REFERENCES data.users(id); + + +-- +-- Name: SCHEMA data; Type: ACL; Schema: -; Owner: service_finder_app +-- + +GRANT USAGE ON SCHEMA data TO n8n_hunter; +GRANT USAGE ON SCHEMA data TO PUBLIC; + + +-- +-- Name: TABLE addresses; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.addresses TO n8n_hunter; +GRANT ALL ON TABLE data.addresses TO PUBLIC; + + +-- +-- Name: TABLE asset_assignments; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.asset_assignments TO n8n_hunter; +GRANT ALL ON TABLE data.asset_assignments TO PUBLIC; + + +-- +-- Name: TABLE asset_costs; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.asset_costs TO n8n_hunter; +GRANT ALL ON TABLE data.asset_costs TO PUBLIC; + + +-- +-- Name: TABLE asset_events; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.asset_events TO n8n_hunter; +GRANT ALL ON TABLE data.asset_events TO PUBLIC; + + +-- +-- Name: TABLE asset_financials; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.asset_financials TO n8n_hunter; +GRANT ALL ON TABLE data.asset_financials TO PUBLIC; + + +-- +-- Name: TABLE asset_reviews; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.asset_reviews TO n8n_hunter; +GRANT ALL ON TABLE data.asset_reviews TO PUBLIC; + + +-- +-- Name: TABLE asset_telemetry; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.asset_telemetry TO n8n_hunter; +GRANT ALL ON TABLE data.asset_telemetry TO PUBLIC; + + +-- +-- Name: TABLE assets; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.assets TO n8n_hunter; +GRANT ALL ON TABLE data.assets TO PUBLIC; + + +-- +-- Name: TABLE audit_logs; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.audit_logs TO n8n_hunter; +GRANT ALL ON TABLE data.audit_logs TO PUBLIC; + + +-- +-- Name: TABLE badges; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.badges TO n8n_hunter; +GRANT ALL ON TABLE data.badges TO PUBLIC; + + +-- +-- Name: TABLE credit_logs; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.credit_logs TO n8n_hunter; +GRANT ALL ON TABLE data.credit_logs TO PUBLIC; + + +-- +-- Name: TABLE documents; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.documents TO n8n_hunter; +GRANT ALL ON TABLE data.documents TO PUBLIC; + + +-- +-- Name: TABLE exchange_rates; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.exchange_rates TO n8n_hunter; +GRANT ALL ON TABLE data.exchange_rates TO PUBLIC; + + +-- +-- Name: TABLE expertise_tags; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.expertise_tags TO n8n_hunter; +GRANT ALL ON TABLE data.expertise_tags TO PUBLIC; + + +-- +-- Name: TABLE geo_postal_codes; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.geo_postal_codes TO n8n_hunter; +GRANT ALL ON TABLE data.geo_postal_codes TO PUBLIC; + + +-- +-- Name: TABLE geo_street_types; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.geo_street_types TO n8n_hunter; +GRANT ALL ON TABLE data.geo_street_types TO PUBLIC; + + +-- +-- Name: TABLE geo_streets; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.geo_streets TO n8n_hunter; +GRANT ALL ON TABLE data.geo_streets TO PUBLIC; + + +-- +-- Name: TABLE geography_columns; Type: ACL; Schema: data; Owner: service_finder_app +-- + +REVOKE ALL ON TABLE data.geography_columns FROM kincses; +REVOKE ALL ON TABLE data.geography_columns FROM service_finder_app; +REVOKE SELECT ON TABLE data.geography_columns FROM PUBLIC; +GRANT ALL ON TABLE data.geography_columns TO service_finder_app; +GRANT ALL ON TABLE data.geography_columns TO PUBLIC; +GRANT ALL ON TABLE data.geography_columns TO n8n_hunter; + + +-- +-- Name: TABLE geometry_columns; Type: ACL; Schema: data; Owner: service_finder_app +-- + +REVOKE ALL ON TABLE data.geometry_columns FROM kincses; +REVOKE ALL ON TABLE data.geometry_columns FROM service_finder_app; +REVOKE SELECT ON TABLE data.geometry_columns FROM PUBLIC; +GRANT ALL ON TABLE data.geometry_columns TO service_finder_app; +GRANT ALL ON TABLE data.geometry_columns TO PUBLIC; +GRANT ALL ON TABLE data.geometry_columns TO n8n_hunter; + + +-- +-- Name: TABLE level_configs; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.level_configs TO n8n_hunter; +GRANT ALL ON TABLE data.level_configs TO PUBLIC; + + +-- +-- Name: TABLE org_subscriptions; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.org_subscriptions TO n8n_hunter; +GRANT ALL ON TABLE data.org_subscriptions TO PUBLIC; + + +-- +-- Name: TABLE organization_financials; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.organization_financials TO n8n_hunter; +GRANT ALL ON TABLE data.organization_financials TO PUBLIC; + + +-- +-- Name: TABLE organization_members; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.organization_members TO n8n_hunter; +GRANT ALL ON TABLE data.organization_members TO PUBLIC; + + +-- +-- Name: TABLE organizations; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.organizations TO n8n_hunter; +GRANT ALL ON TABLE data.organizations TO PUBLIC; + + +-- +-- Name: TABLE pending_actions; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.pending_actions TO n8n_hunter; +GRANT ALL ON TABLE data.pending_actions TO PUBLIC; + + +-- +-- Name: TABLE persons; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.persons TO n8n_hunter; +GRANT ALL ON TABLE data.persons TO PUBLIC; + + +-- +-- Name: TABLE point_rules; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.point_rules TO n8n_hunter; +GRANT ALL ON TABLE data.point_rules TO PUBLIC; + + +-- +-- Name: TABLE points_ledger; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.points_ledger TO n8n_hunter; +GRANT ALL ON TABLE data.points_ledger TO PUBLIC; + + +-- +-- Name: TABLE ratings; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.ratings TO n8n_hunter; +GRANT ALL ON TABLE data.ratings TO PUBLIC; + + +-- +-- Name: TABLE regional_settings; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.regional_settings TO n8n_hunter; +GRANT ALL ON TABLE data.regional_settings TO PUBLIC; + + +-- +-- Name: TABLE service_expertises; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.service_expertises TO n8n_hunter; +GRANT ALL ON TABLE data.service_expertises TO PUBLIC; + + +-- +-- Name: TABLE service_profiles; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.service_profiles TO n8n_hunter; +GRANT ALL ON TABLE data.service_profiles TO PUBLIC; + + +-- +-- Name: TABLE service_specialties; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.service_specialties TO n8n_hunter; +GRANT ALL ON TABLE data.service_specialties TO PUBLIC; + + +-- +-- Name: TABLE social_accounts; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.social_accounts TO n8n_hunter; +GRANT ALL ON TABLE data.social_accounts TO PUBLIC; + + +-- +-- Name: TABLE spatial_ref_sys; Type: ACL; Schema: data; Owner: service_finder_app +-- + +REVOKE ALL ON TABLE data.spatial_ref_sys FROM kincses; +REVOKE ALL ON TABLE data.spatial_ref_sys FROM service_finder_app; +REVOKE SELECT ON TABLE data.spatial_ref_sys FROM PUBLIC; +GRANT ALL ON TABLE data.spatial_ref_sys TO service_finder_app; +GRANT ALL ON TABLE data.spatial_ref_sys TO PUBLIC; +GRANT ALL ON TABLE data.spatial_ref_sys TO n8n_hunter; + + +-- +-- Name: TABLE subscription_tiers; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.subscription_tiers TO n8n_hunter; +GRANT ALL ON TABLE data.subscription_tiers TO PUBLIC; + + +-- +-- Name: TABLE system_parameters; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.system_parameters TO n8n_hunter; +GRANT ALL ON TABLE data.system_parameters TO PUBLIC; + + +-- +-- Name: TABLE translations; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.translations TO n8n_hunter; +GRANT ALL ON TABLE data.translations TO PUBLIC; + + +-- +-- Name: TABLE user_badges; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.user_badges TO n8n_hunter; +GRANT ALL ON TABLE data.user_badges TO PUBLIC; + + +-- +-- Name: TABLE user_stats; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.user_stats TO n8n_hunter; +GRANT ALL ON TABLE data.user_stats TO PUBLIC; + + +-- +-- Name: TABLE users; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.users TO n8n_hunter; +GRANT ALL ON TABLE data.users TO PUBLIC; + + +-- +-- Name: TABLE vehicle_catalog; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.vehicle_catalog TO n8n_hunter; +GRANT ALL ON TABLE data.vehicle_catalog TO PUBLIC; + + +-- +-- Name: TABLE vehicle_ownerships; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.vehicle_ownerships TO n8n_hunter; +GRANT ALL ON TABLE data.vehicle_ownerships TO PUBLIC; + + +-- +-- Name: TABLE verification_tokens; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.verification_tokens TO n8n_hunter; +GRANT ALL ON TABLE data.verification_tokens TO PUBLIC; + + +-- +-- Name: TABLE wallets; Type: ACL; Schema: data; Owner: service_finder_app +-- + +GRANT ALL ON TABLE data.wallets TO n8n_hunter; +GRANT ALL ON TABLE data.wallets TO PUBLIC; + + +-- +-- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: data; Owner: kincses +-- + +ALTER DEFAULT PRIVILEGES FOR ROLE kincses IN SCHEMA data GRANT ALL ON SEQUENCES TO service_finder_app; + + +-- +-- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: data; Owner: kincses +-- + +ALTER DEFAULT PRIVILEGES FOR ROLE kincses IN SCHEMA data GRANT ALL ON TABLES TO service_finder_app; +ALTER DEFAULT PRIVILEGES FOR ROLE kincses IN SCHEMA data GRANT ALL ON TABLES TO n8n_hunter; + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/n8n/data/config b/n8n/data/config new file mode 100644 index 0000000..b95cd28 --- /dev/null +++ b/n8n/data/config @@ -0,0 +1,3 @@ +{ + "encryptionKey": "OjlSB/Un86Z7PdPbg03khUZ4Dld4bXV2" +} \ No newline at end of file diff --git a/n8n/data/crash.journal b/n8n/data/crash.journal new file mode 100644 index 0000000..e69de29 diff --git a/n8n/data/n8nEventLog.log b/n8n/data/n8nEventLog.log new file mode 100644 index 0000000..e4100d7 --- /dev/null +++ b/n8n/data/n8nEventLog.log @@ -0,0 +1,219 @@ +{"__type":"$$EventMessageAudit","id":"5869b732-18e3-4469-acf6-4c1494dd6a7d","ts":"2026-02-13T21:35:59.910+00:00","eventName":"n8n.audit.user.login.failed","message":"n8n.audit.user.login.failed","payload":{"authenticationMethod":"email","userEmail":"kincses@gmail.com","reason":"wrong credentials"}} +{"__type":"$$EventMessageAudit","id":"10c34e80-a103-4fa5-817e-ef652538bafc","ts":"2026-02-13T21:36:04.754+00:00","eventName":"n8n.audit.user.login.success","message":"n8n.audit.user.login.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","authenticationMethod":"email"}} +{"__type":"$$EventMessageAudit","id":"682f2d00-6de4-4ece-9e2c-a3e74f9d410e","ts":"2026-02-13T21:47:38.976+00:00","eventName":"n8n.audit.user.credentials.created","message":"n8n.audit.user.credentials.created","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","credentialType":"postgres","credentialId":"Jm8msQnZOaEu4FpX","publicApi":false,"projectId":"rhKVh1pVPxnQvrE5","projectType":"personal","isDynamic":false}} +{"__type":"$$EventMessageAudit","id":"237cc6fb-8ee2-4dec-8a09-c8262080b060","ts":"2026-02-13T21:51:41.979+00:00","eventName":"n8n.audit.workflow.created","message":"n8n.audit.workflow.created","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageWorkflow","id":"69950600-8d87-433f-b126-3ea85db37f0c","ts":"2026-02-13T21:51:56.862+00:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"1","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","errorMessage":"The workflow has issues and cannot be executed for that reason. Please fix them first."}} +{"__type":"$$EventMessageAudit","id":"76b34802-2059-4e6c-9fc7-c6f69baa640b","ts":"2026-02-13T21:52:27.681+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"40b56efa-00bb-4b4b-bf49-be3934ebfb03","ts":"2026-02-13T21:53:16.296+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"fdacb46e-04f8-4a1b-bf90-f7dbf8122dec","ts":"2026-02-13T21:55:27.292+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"d1259331-84cf-4cca-bb0a-d61f34f0fd99","ts":"2026-02-13T21:56:35.275+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"400e57e4-2a36-4b00-8177-492a96d1e082","ts":"2026-02-13T21:56:39.888+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"b172315d-d99d-41fd-87b6-02056c65b0f9","ts":"2026-02-13T21:57:34.897+00:00","eventName":"n8n.audit.user.execution.deleted","message":"n8n.audit.user.execution.deleted","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","executionIds":["1"]}} +{"__type":"$$EventMessageAudit","id":"5265e5d8-de1c-47ba-a4e6-68cd556aaa01","ts":"2026-02-13T22:01:53.807+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"7f524dde-69b8-4a1a-ad25-49211303c9f8","ts":"2026-02-13T22:04:04.860+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageWorkflow","id":"dd399605-345a-4a36-bcf0-1b291f9ef609","ts":"2026-02-13T22:04:19.549+00:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"2","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"adf99f02-914b-4f47-a149-b6e408fc1d63","ts":"2026-02-13T22:04:19.550+00:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"2","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"647915ce-3954-4792-9db9-abd9f7994262","ts":"2026-02-13T22:04:19.551+00:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"2","nodeType":"n8n-nodes-base.postgres","nodeName":"Execute a SQL query","nodeId":"5225b2de-580f-413c-b5ce-806bff919a40"}} +{"__type":"$$EventMessageNode","id":"2d0dc74f-49a9-4f87-b47e-f76d4cd35fab","ts":"2026-02-13T22:04:19.611+00:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"2","nodeType":"n8n-nodes-base.postgres","nodeName":"Execute a SQL query","nodeId":"5225b2de-580f-413c-b5ce-806bff919a40"}} +{"__type":"$$EventMessageWorkflow","id":"aa888c94-8756-4912-906e-83771dfb0e64","ts":"2026-02-13T22:04:19.613+00:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"2","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","lastNodeExecuted":"Execute a SQL query","errorNodeType":"n8n-nodes-base.postgres","errorMessage":"column \"year\" does not exist"}} +{"__type":"$$EventMessageAudit","id":"1803a054-4c0c-46b6-9da1-78659d70d19d","ts":"2026-02-13T22:05:03.907+00:00","eventName":"n8n.audit.user.credentials.created","message":"n8n.audit.user.credentials.created","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","credentialType":"postgres","credentialId":"vhQriarepfU8BmSN","publicApi":false,"projectId":"rhKVh1pVPxnQvrE5","projectType":"personal","isDynamic":false}} +{"__type":"$$EventMessageAudit","id":"ba40a7e5-3565-4609-92e5-2710791e72a6","ts":"2026-02-13T22:05:05.558+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageWorkflow","id":"fea8cdd6-505e-48aa-9a21-e8e93aaaa235","ts":"2026-02-13T22:05:36.681+00:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"3","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"a8478977-819e-4b1c-b426-e59c347f4cdd","ts":"2026-02-13T22:05:36.681+00:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"3","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"f71bf08f-3bd1-45f5-820d-ed721d0ce111","ts":"2026-02-13T22:05:36.682+00:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"3","nodeType":"n8n-nodes-base.postgres","nodeName":"Execute a SQL query","nodeId":"5225b2de-580f-413c-b5ce-806bff919a40"}} +{"__type":"$$EventMessageNode","id":"85bdf6e2-b33d-4f21-acaa-62f8fcd4a16d","ts":"2026-02-13T22:05:36.719+00:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"3","nodeType":"n8n-nodes-base.postgres","nodeName":"Execute a SQL query","nodeId":"5225b2de-580f-413c-b5ce-806bff919a40"}} +{"__type":"$$EventMessageWorkflow","id":"685429af-bfa7-4b8b-879a-de33d29c3dec","ts":"2026-02-13T22:05:36.726+00:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"3","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","lastNodeExecuted":"Execute a SQL query","errorNodeType":"n8n-nodes-base.postgres","errorMessage":"column \"year\" does not exist"}} +{"__type":"$$EventMessageAudit","id":"8c6835a0-225c-4d71-96bc-244a7c2df8d2","ts":"2026-02-13T22:08:33.943+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"8739b4f0-4373-4438-9c33-58d9faa7a803","ts":"2026-02-13T22:08:35.626+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"13a53f6e-0ec3-4dd4-979a-a41d1d7bbcf9","ts":"2026-02-13T22:08:37.860+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"ce0df8e7-540d-494a-9eb1-5796470cbff8","ts":"2026-02-13T22:08:40.520+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"6dfb2d6a-085e-429c-bbb7-dc815423e994","ts":"2026-02-13T22:09:22.257+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageWorkflow","id":"2da25985-e9d0-4b2a-af88-c9e49faad80a","ts":"2026-02-13T22:09:23.241+00:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"4","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"f2331d63-2908-4a3a-834f-b615a32d391d","ts":"2026-02-13T22:09:23.242+00:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"4","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"b93bc00e-8a55-4eb4-b26c-bb076f960679","ts":"2026-02-13T22:09:23.242+00:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"4","nodeType":"n8n-nodes-base.postgres","nodeName":"Execute a SQL query","nodeId":"5225b2de-580f-413c-b5ce-806bff919a40"}} +{"__type":"$$EventMessageNode","id":"3b93061f-9621-42aa-8cc5-71c875b0dc5c","ts":"2026-02-13T22:09:23.286+00:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow","executionId":"4","nodeType":"n8n-nodes-base.postgres","nodeName":"Execute a SQL query","nodeId":"5225b2de-580f-413c-b5ce-806bff919a40"}} +{"__type":"$$EventMessageWorkflow","id":"d69f349c-a3bc-43b2-8add-845add0996db","ts":"2026-02-13T22:09:23.291+00:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"4","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"6d9de1d8-646b-4207-8ed8-18af56277145","ts":"2026-02-13T22:09:53.151+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"44c367a3-b576-4163-9266-7a68d2d35f2f","ts":"2026-02-13T22:10:27.483+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"09974b64-103d-4992-87b7-9f3581461c2f","ts":"2026-02-13T22:12:51.234+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"b2dc631d-7884-411d-80ac-de5e22f39240","ts":"2026-02-13T22:13:12.838+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"88f413ba-26c5-44e3-b419-784e1e47fbb6","ts":"2026-02-13T22:13:14.455+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"43539d91-c6f8-452b-9d49-cae264329dc4","ts":"2026-02-13T22:13:19.305+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"14922d8c-9688-4dd7-90f6-965951e7e470","ts":"2026-02-13T22:13:22.671+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"486789f5-c179-4531-b6b7-3d7132b76118","ts":"2026-02-14T00:16:44.585+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"3ae5edfb-0dd6-41b2-8776-3a7c02e07f09","ts":"2026-02-14T00:16:46.997+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"My workflow"}} +{"__type":"$$EventMessageAudit","id":"7fe3f161-6a60-40a9-af1b-aa6c086d396d","ts":"2026-02-14T00:17:39.089+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"e219ce8f-4f9e-4e0f-b11a-2cec1471bc25","ts":"2026-02-14T00:17:53.433+00:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"5","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"ac670c4b-3c36-49c3-8c73-a6272e3acdd5","ts":"2026-02-14T00:17:53.433+00:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"5","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"7a79c6fc-8bf5-45c1-ac67-3ed24a3d6c20","ts":"2026-02-14T00:17:53.434+00:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"5","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"dad25375-152e-4f0d-85d7-ef41cdd69755","ts":"2026-02-14T00:17:53.435+00:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"5","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageWorkflow","id":"003a46cb-c61b-4459-8f97-f8ca5ea598f2","ts":"2026-02-14T00:17:53.437+00:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"5","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"beb95055-5c82-46de-a915-0ae09004cc02","ts":"2026-02-14T00:18:30.074+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"d35ae2c0-2c1b-4918-b10d-4bf8752b7f37","ts":"2026-02-14T00:18:50.955+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"8d59a3f8-6779-415e-9cfc-ac487dc90368","ts":"2026-02-14T00:18:57.945+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"d7b67993-2264-4778-99e8-719803312e09","ts":"2026-02-14T00:19:24.859+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"67f16bf6-1ec5-478d-b518-512c3d6f7149","ts":"2026-02-14T00:19:30.938+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"a81b92e3-d99e-47b1-a06d-bfed49e98358","ts":"2026-02-14T00:20:13.886+00:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"6","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"88687f84-89ee-4d7a-8d44-a1efaa899d5c","ts":"2026-02-14T00:20:13.886+00:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"6","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"c26ddf9e-caea-4c99-b3a8-75dcbc5fe316","ts":"2026-02-14T00:20:13.887+00:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"6","nodeType":"n8n-nodes-base.httpRequest","nodeName":"HTTP Request","nodeId":"c537e933-add5-4c58-819a-343fa00b8e76"}} +{"__type":"$$EventMessageNode","id":"66f146b1-493a-4574-9bf6-866943b3eea1","ts":"2026-02-14T00:20:14.118+00:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"6","nodeType":"n8n-nodes-base.httpRequest","nodeName":"HTTP Request","nodeId":"c537e933-add5-4c58-819a-343fa00b8e76"}} +{"__type":"$$EventMessageWorkflow","id":"86ab432e-d95e-42ef-9e92-c86a63527e7b","ts":"2026-02-14T00:20:14.121+00:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"6","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"2818ee3f-a8a7-4404-8115-bffada9eeaa7","ts":"2026-02-14T00:22:14.904+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"8a825a3e-f7d1-4dcd-b962-9ca87aa18706","ts":"2026-02-14T00:22:17.614+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"7c308a6d-7963-4df6-a8e6-9c192ccc7e34","ts":"2026-02-14T00:22:39.464+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"51c22d50-95c5-4316-8346-5645d930f92e","ts":"2026-02-14T00:22:47.538+00:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"7","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"9608637b-5102-4ff1-8ffe-ca556e54ec58","ts":"2026-02-14T00:22:47.538+00:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"7","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"cff555b6-be57-46eb-b8a1-3db5026642b9","ts":"2026-02-14T00:22:47.540+00:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"7","nodeType":"n8n-nodes-base.httpRequest","nodeName":"HTTP Request","nodeId":"c537e933-add5-4c58-819a-343fa00b8e76"}} +{"__type":"$$EventMessageNode","id":"2d7b0261-390c-4fe7-ba03-dbd1ce819594","ts":"2026-02-14T00:22:47.755+00:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"7","nodeType":"n8n-nodes-base.httpRequest","nodeName":"HTTP Request","nodeId":"c537e933-add5-4c58-819a-343fa00b8e76"}} +{"__type":"$$EventMessageWorkflow","id":"77123a2e-2a12-420d-835d-9e414f879079","ts":"2026-02-14T00:22:47.758+00:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"7","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"1e948f13-5ed3-4cf3-9e73-4e659cde44ab","ts":"2026-02-14T00:23:56.889+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"4e31ce6f-5461-4228-a192-b16dc0b21fd4","ts":"2026-02-14T00:24:09.435+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"006d72ef-613e-45e1-ac71-a1a240066e26","ts":"2026-02-14T00:24:11.935+00:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"8","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"bc2dd643-abef-4a28-9241-03aac0f9e859","ts":"2026-02-14T00:24:11.935+00:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"8","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"c80ab445-28d3-4285-918b-a8a90c0c8266","ts":"2026-02-14T00:24:11.936+00:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"8","nodeType":"n8n-nodes-base.httpRequest","nodeName":"HTTP Request","nodeId":"c537e933-add5-4c58-819a-343fa00b8e76"}} +{"__type":"$$EventMessageNode","id":"7b73105d-73c5-4b06-9d31-557848248141","ts":"2026-02-14T00:24:15.023+00:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"8","nodeType":"n8n-nodes-base.httpRequest","nodeName":"HTTP Request","nodeId":"c537e933-add5-4c58-819a-343fa00b8e76"}} +{"__type":"$$EventMessageWorkflow","id":"46d8edbf-66b9-4065-8dab-5f82a00cae3a","ts":"2026-02-14T00:24:15.027+00:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"8","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"74c8e7ce-4f92-4dcd-9393-42bcea6c35e3","ts":"2026-02-14T00:28:33.362+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"df713c02-39fb-45e5-85de-0467c580f067","ts":"2026-02-14T00:31:12.798+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"54378761-3509-40c1-8cc0-c830d56728f1","ts":"2026-02-14T00:33:32.477+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"7fb2c566-3c58-437c-a640-113eed8bf8a7","ts":"2026-02-13T19:33:58.052-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"94ccec9e-4693-450d-abd6-cbf24f07f89b","ts":"2026-02-13T19:34:20.246-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"3b30fa0d-f0ff-45cf-872c-331c0ce2fe16","ts":"2026-02-13T19:34:30.760-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"9da5d30d-2a3b-491f-b902-5edbf999ad47","ts":"2026-02-13T19:36:03.414-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"db2ff622-6ccc-469b-995a-d199be149bf0","ts":"2026-02-13T19:36:57.362-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"e9ff3ff7-11af-4844-8854-48bb7ae55ccb","ts":"2026-02-13T19:37:04.049-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"01a1dba0-7900-42d2-8181-5c9e753c5a33","ts":"2026-02-13T19:37:08.818-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"050dedbb-ea8a-4cbe-a7e3-399e4dc5f91c","ts":"2026-02-13T19:37:17.857-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"45c49c05-37b0-4227-b46c-28e993115cfa","ts":"2026-02-13T19:38:02.616-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"d0c3cfcf-0f04-4e55-b272-64cc7dfb6b8b","ts":"2026-02-13T19:38:04.354-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"58d912dc-a934-41f7-b153-9a256b7e4842","ts":"2026-02-13T19:38:10.534-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"9","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"33182e6e-199a-49b7-a841-efff1539c011","ts":"2026-02-13T19:38:10.534-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"9","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"ea5bcd9a-36dd-45e5-b124-b55e2f7122c2","ts":"2026-02-13T19:38:10.535-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"9","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"58bcaa60-1a0b-4bb7-bb91-41e52c1fb040","ts":"2026-02-13T19:38:14.589-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"9","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageWorkflow","id":"d855e6c7-7127-4dac-a424-2b12c049ad93","ts":"2026-02-13T19:38:14.595-05:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"9","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"34de871c-4089-4fa4-a6d2-1bd68f9736ff","ts":"2026-02-13T19:38:28.657-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"a644706f-f774-4501-98bd-f6b7ad42fe71","ts":"2026-02-13T19:38:31.263-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"a083a619-dea4-4f6b-963e-8b4f5cbc7f0b","ts":"2026-02-13T19:38:33.192-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"86c9e98b-9aaa-411d-9ad0-384eb8554250","ts":"2026-02-13T19:38:37.848-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"10","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"a6594e64-cebe-4126-a33f-3ba73c68d8d6","ts":"2026-02-13T19:38:37.849-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"10","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"18d17b7c-1e1f-44c9-8554-00bd4b99d3bd","ts":"2026-02-13T19:38:37.850-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"10","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"e9c76713-db3d-4156-a9fe-4da59fa96d0e","ts":"2026-02-13T19:38:37.852-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"10","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageWorkflow","id":"844ea0d4-2499-4689-93ff-3385147873ff","ts":"2026-02-13T19:38:37.855-05:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"10","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"12f57168-371e-49e6-ac4e-8cbd6bf9460b","ts":"2026-02-13T19:38:45.332-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"11","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"d7561c12-c58f-4a5c-a3b9-65e2a3c1887b","ts":"2026-02-13T19:38:45.332-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"11","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"836f27e5-c87c-40da-bdba-5a888c560da0","ts":"2026-02-13T19:38:45.333-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"11","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"87059e8e-7dc8-4c94-a991-3113305365cb","ts":"2026-02-13T19:38:51.605-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"11","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageWorkflow","id":"0df55d0f-adcb-436a-abb8-cfdc28c45674","ts":"2026-02-13T19:38:51.607-05:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"11","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","lastNodeExecuted":"OSM Dunakeszi Query","errorNodeType":"n8n-nodes-base.httpRequest","errorMessage":"Gateway timed out - perhaps try again later?"}} +{"__type":"$$EventMessageAudit","id":"ef075d35-4ef9-4da4-9f47-0a57192054ff","ts":"2026-02-13T19:39:13.597-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"b288bf7a-6f12-45b3-8689-205c83a06850","ts":"2026-02-13T19:39:17.039-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"01248cb6-09cd-4736-b83b-6422ef48f880","ts":"2026-02-13T19:39:25.065-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"b024d8e8-6e5e-449a-8ee9-e380b60be489","ts":"2026-02-13T19:39:37.847-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"12","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"fc8caf38-42b9-486c-82d7-827f853d557e","ts":"2026-02-13T19:39:37.848-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"12","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"486f29c2-2407-4c59-b779-c7d72f82bf16","ts":"2026-02-13T19:39:37.849-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"12","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"1dc749a7-af74-44c4-ac62-448459eee769","ts":"2026-02-13T19:39:42.667-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"12","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageWorkflow","id":"f0cfa9b9-81a2-4871-a20d-7ecb9b72fede","ts":"2026-02-13T19:39:42.670-05:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"12","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","lastNodeExecuted":"OSM Dunakeszi Query","errorNodeType":"n8n-nodes-base.httpRequest","errorMessage":"Gateway timed out - perhaps try again later?"}} +{"__type":"$$EventMessageAudit","id":"8d126d0c-9363-40c8-93bb-47c05112e696","ts":"2026-02-14T05:18:53.575-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"ce0140d9-1d69-40d0-9cac-45892bdb75e9","ts":"2026-02-14T05:18:56.263-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"658bc4db-ffa9-48fc-88d2-d970808e2635","ts":"2026-02-14T05:19:01.218-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"c78ea193-5a9f-43fe-8006-2a0009a6eb93","ts":"2026-02-14T05:30:23.101-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"13","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"db508d17-9098-48d2-8f2a-e5dd0ede374f","ts":"2026-02-14T05:30:23.102-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"13","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"af91453e-bec7-4a27-9cee-256205b04608","ts":"2026-02-14T05:30:23.102-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"13","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"0fda3878-4fa1-4401-9c1a-4498d5f960e8","ts":"2026-02-14T05:30:23.105-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"13","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"eec0e3c5-8bdf-4626-b069-eae598a22cdd","ts":"2026-02-14T05:30:23.106-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"13","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"4c35d592-8650-4a67-abd8-460ced5256b5","ts":"2026-02-14T05:30:23.845-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"13","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"8796b30f-1d1d-433f-a0fd-23365fddf1d7","ts":"2026-02-14T05:30:23.848-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"13","nodeType":"n8n-nodes-base.itemLists","nodeName":"Split into Services","nodeId":"b8a98965-296a-4959-91ba-a0202bce4b64"}} +{"__type":"$$EventMessageNode","id":"477aed86-ecf7-48b7-8e17-7dcd907d1f4e","ts":"2026-02-14T05:30:23.852-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"13","nodeType":"n8n-nodes-base.itemLists","nodeName":"Split into Services","nodeId":"b8a98965-296a-4959-91ba-a0202bce4b64"}} +{"__type":"$$EventMessageWorkflow","id":"c8efc08c-d46e-46da-a2df-e221520b34f8","ts":"2026-02-14T05:30:23.856-05:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"13","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"8488aec1-19c9-4d5b-b4dc-0797cc85f719","ts":"2026-02-14T06:13:53.488-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"3854fbcd-68dd-407f-932e-5b75a1baffce","ts":"2026-02-14T06:14:00.423-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"f8ec573e-869b-4fba-8ea0-779d3b42f80e","ts":"2026-02-14T06:14:02.394-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"14","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"bb6009f2-cc45-4159-bd92-522157b81cc3","ts":"2026-02-14T06:14:02.399-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"14","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"90455d15-42ad-4594-a06f-96df4b89720d","ts":"2026-02-14T06:14:02.400-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"14","nodeType":"n8n-nodes-base.wait","nodeName":"Wait","nodeId":"0e27eb6c-c5fc-47e0-9fe2-f930e52741ac"}} +{"__type":"$$EventMessageNode","id":"dadd9d3c-a956-4fb0-a884-8b68c6474439","ts":"2026-02-14T06:14:03.401-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"14","nodeType":"n8n-nodes-base.wait","nodeName":"Wait","nodeId":"0e27eb6c-c5fc-47e0-9fe2-f930e52741ac"}} +{"__type":"$$EventMessageWorkflow","id":"16c84270-377d-499a-b2af-db7c282550f9","ts":"2026-02-14T06:14:03.407-05:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"14","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"a480ee3f-57c1-4704-817b-c0b2fffb3c17","ts":"2026-02-14T06:15:15.549-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"15","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"f5bcaada-8993-4356-80ae-99764a7eec2c","ts":"2026-02-14T06:15:15.549-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"a219400c-0fa1-4a20-b0a0-1b1be372550a","ts":"2026-02-14T06:15:15.550-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"50b0f9a7-455d-46de-9685-8df8c89f95c2","ts":"2026-02-14T06:15:15.551-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"0bcfb070-9ed6-4804-bf66-046034315019","ts":"2026-02-14T06:15:15.551-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"b1ff2a72-6986-4b14-ae8d-133b9256357c","ts":"2026-02-14T06:15:19.614-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"253f0ba5-61d4-4834-8636-c9d52a6ab0d1","ts":"2026-02-14T06:15:19.616-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.itemLists","nodeName":"Split into Services","nodeId":"b8a98965-296a-4959-91ba-a0202bce4b64"}} +{"__type":"$$EventMessageNode","id":"cf951e04-6e87-4d5d-b4f0-6b1837ec04f7","ts":"2026-02-14T06:15:19.617-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.itemLists","nodeName":"Split into Services","nodeId":"b8a98965-296a-4959-91ba-a0202bce4b64"}} +{"__type":"$$EventMessageNode","id":"4420cdcc-81d9-432c-bada-8704160c4cbb","ts":"2026-02-14T06:15:19.621-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.wait","nodeName":"Wait","nodeId":"0e27eb6c-c5fc-47e0-9fe2-f930e52741ac"}} +{"__type":"$$EventMessageNode","id":"16a28303-31f8-42d7-8262-b1dbb16ae028","ts":"2026-02-14T06:15:20.621-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"15","nodeType":"n8n-nodes-base.wait","nodeName":"Wait","nodeId":"0e27eb6c-c5fc-47e0-9fe2-f930e52741ac"}} +{"__type":"$$EventMessageWorkflow","id":"399f7316-c22b-4e71-87a3-269d3c2c700c","ts":"2026-02-14T06:15:20.626-05:00","eventName":"n8n.workflow.success","message":"n8n.workflow.success","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"15","success":true,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"8507e5ee-07b9-4d4a-ba40-56b02d56d33a","ts":"2026-02-14T06:15:36.208-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"12a4fe9f-bcbd-4755-8076-c77806fc951a","ts":"2026-02-14T06:15:37.833-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"f32ae7db-f1bb-4fe3-9c0f-dc1ea908dd57","ts":"2026-02-14T06:15:40.295-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"690c0513-3259-43a3-b74e-d8abdecc4b4b","ts":"2026-02-14T06:15:44.034-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"d5ff3782-1f8a-47f1-b6ea-2afd1e739feb","ts":"2026-02-14T06:24:28.191-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"31e099cc-d845-4735-b79e-6f5772c6154b","ts":"2026-02-14T06:24:59.089-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"46ffbb65-17e6-43c4-83fc-decff61f4517","ts":"2026-02-14T06:25:09.901-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"b4a4dff6-8ee0-4468-bdae-1a8a821be1b0","ts":"2026-02-14T06:25:20.226-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"7b951c4d-745d-49fe-b090-5f68ba5862cc","ts":"2026-02-14T06:25:27.959-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"72ccb333-8c36-4561-a59f-1ee04e856b53","ts":"2026-02-14T07:49:39.514-05:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"16","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","errorMessage":"The workflow has issues and cannot be executed for that reason. Please fix them first."}} +{"__type":"$$EventMessageAudit","id":"84bdec4d-233d-4428-a79d-cc2958dcfea3","ts":"2026-02-14T07:49:49.340-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"5ac09daf-9252-4710-93fe-3d8bcc553832","ts":"2026-02-14T07:49:53.046-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"feb81ad9-d0d6-43ea-912f-c523c51917e9","ts":"2026-02-14T07:52:20.840-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"d1fdffa3-e2e2-4f95-b6b3-0f6b55577c4a","ts":"2026-02-14T07:52:25.776-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"6674e7ba-f972-41fa-af17-d18bb78c6f85","ts":"2026-02-14T07:52:29.308-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"17","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"e546b4e0-04f7-4b49-8514-b8634a579296","ts":"2026-02-14T07:52:29.308-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"350286e7-be70-4237-a625-ec602a529364","ts":"2026-02-14T07:52:29.309-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"6e15c770-05bd-4cea-b964-eb27cefbcfcf","ts":"2026-02-14T07:52:29.311-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.manualTrigger","nodeName":"When clicking ‘Execute workflow’","nodeId":"1ddbe06f-01d6-44df-a3ea-8feac5b34ce3"}} +{"__type":"$$EventMessageNode","id":"79bc8219-5d46-4d5a-a455-bd09bb769b30","ts":"2026-02-14T07:52:29.311-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"d6071e75-b4b3-4774-b8c2-e4a7eee77e26","ts":"2026-02-14T07:52:29.901-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.httpRequest","nodeName":"OSM Dunakeszi Query","nodeId":"c93e1c88-e915-4d19-882a-417415ecf495"}} +{"__type":"$$EventMessageNode","id":"6f335404-6d74-416e-9691-9d127d2cda55","ts":"2026-02-14T07:52:29.904-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.itemLists","nodeName":"Split into Services","nodeId":"b8a98965-296a-4959-91ba-a0202bce4b64"}} +{"__type":"$$EventMessageNode","id":"e80841e2-3fd7-497d-9be8-8fd17f190b58","ts":"2026-02-14T07:52:29.906-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.itemLists","nodeName":"Split into Services","nodeId":"b8a98965-296a-4959-91ba-a0202bce4b64"}} +{"__type":"$$EventMessageNode","id":"5abd0988-a5e3-4751-b647-9d83734a9cf8","ts":"2026-02-14T07:52:29.907-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.wait","nodeName":"Wait","nodeId":"0e27eb6c-c5fc-47e0-9fe2-f930e52741ac"}} +{"__type":"$$EventMessageNode","id":"2fc5a840-2823-48f4-9114-18a8720b666a","ts":"2026-02-14T07:52:30.907-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.wait","nodeName":"Wait","nodeId":"0e27eb6c-c5fc-47e0-9fe2-f930e52741ac"}} +{"__type":"$$EventMessageNode","id":"f07f2541-2fc5-480f-a726-c14244b292c0","ts":"2026-02-14T07:52:30.909-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageNode","id":"1b13f2a6-0e54-43be-be0b-0ec00f1ec1f1","ts":"2026-02-14T07:52:31.006-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"17","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageWorkflow","id":"2d9f4963-22ed-4480-bb86-a4163c285bd7","ts":"2026-02-14T07:52:31.008-05:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"17","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","lastNodeExecuted":"Insert rows in a table","errorNodeType":"n8n-nodes-base.postgres","errorMessage":"relation \"data.data.service_staging.\" does not exist"}} +{"__type":"$$EventMessageAudit","id":"0efd80e6-e003-4f96-8246-6015fd4eb1ee","ts":"2026-02-14T07:52:59.101-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"75052e11-8ce9-432d-b95f-46dacdd7b730","ts":"2026-02-14T07:53:25.187-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"37bf7d63-54c4-4763-9082-7bd5580c1938","ts":"2026-02-14T07:53:32.148-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"0b0aef6d-f67d-43f4-b694-9715bdee1433","ts":"2026-02-14T07:53:40.822-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"f2e3bc93-57f2-4b38-87e4-00e1249f2af1","ts":"2026-02-14T07:54:16.712-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"6829cb58-9df4-4739-b7aa-e8cfea0e73ae","ts":"2026-02-14T07:54:20.998-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"07c46290-6ffb-4096-a9ad-10b0265e7305","ts":"2026-02-14T07:54:23.086-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"efbbf536-fc52-4719-a634-2965152235a9","ts":"2026-02-14T07:54:23.876-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"18","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"d22c1357-66d7-4d10-9440-9d48d1febb30","ts":"2026-02-14T07:54:23.883-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"18","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"37e44c84-cefa-42da-b667-7bb808d19961","ts":"2026-02-14T07:54:23.883-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"18","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageNode","id":"787ef72e-b9b6-4297-9e71-3ddc3ddda3f8","ts":"2026-02-14T07:54:23.969-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"18","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageWorkflow","id":"d77a573b-24c7-4d99-a6c0-e9fdd48dd62f","ts":"2026-02-14T07:54:23.972-05:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"18","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","lastNodeExecuted":"Insert rows in a table","errorNodeType":"n8n-nodes-base.postgres","errorMessage":"column \"type\" of relation \"service_staging\" does not exist"}} +{"__type":"$$EventMessageWorkflow","id":"f839f0ed-d507-43c6-9862-0c42ca7569de","ts":"2026-02-14T07:54:57.087-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"19","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"2c6f14db-14b1-457a-9e1d-4e3d7b4820ed","ts":"2026-02-14T07:54:57.092-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"19","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"5163c2d2-b1f3-484a-94c5-5824b4d4af71","ts":"2026-02-14T07:54:57.093-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"19","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageNode","id":"38ae162b-b084-4f2a-8045-ec51f5038530","ts":"2026-02-14T07:54:57.174-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"19","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageWorkflow","id":"6943aff3-8528-4b14-8f98-a09259803c14","ts":"2026-02-14T07:54:57.177-05:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"19","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","lastNodeExecuted":"Insert rows in a table","errorNodeType":"n8n-nodes-base.postgres","errorMessage":"column \"type\" of relation \"service_staging\" does not exist"}} +{"__type":"$$EventMessageAudit","id":"7dd31fb2-78a2-4fd5-a15d-f229346cffbb","ts":"2026-02-14T07:56:16.439-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageWorkflow","id":"75f3ab0e-57c6-4e0d-89b4-5dcc3733d917","ts":"2026-02-14T07:56:22.091-05:00","eventName":"n8n.workflow.started","message":"n8n.workflow.started","payload":{"executionId":"20","workflowId":"eRVwBJfXw8ymc6aZ","isManual":false,"workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"47b0760c-179a-464d-b372-649f409cb9f7","ts":"2026-02-14T07:56:22.099-05:00","eventName":"n8n.audit.workflow.executed","message":"n8n.audit.workflow.executed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"20","source":"user-manual"}} +{"__type":"$$EventMessageNode","id":"4c62e1d6-db5d-4988-88d6-ac58d1383f18","ts":"2026-02-14T07:56:22.100-05:00","eventName":"n8n.node.started","message":"n8n.node.started","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"20","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageNode","id":"50442fcb-493b-4020-b2b5-dde1e956bfaa","ts":"2026-02-14T07:56:22.180-05:00","eventName":"n8n.node.finished","message":"n8n.node.finished","payload":{"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","executionId":"20","nodeType":"n8n-nodes-base.postgres","nodeName":"Insert rows in a table","nodeId":"1694daf7-4805-4d38-8e87-377b5cd33525"}} +{"__type":"$$EventMessageWorkflow","id":"39577d06-de03-4bcd-b07a-5835e32c7071","ts":"2026-02-14T07:56:22.183-05:00","eventName":"n8n.workflow.failed","message":"n8n.workflow.failed","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","executionId":"20","success":false,"isManual":true,"workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter","lastNodeExecuted":"Insert rows in a table","errorNodeType":"n8n-nodes-base.postgres","errorMessage":"permission denied for table service_staging"}} +{"__type":"$$EventMessageAudit","id":"6a3642fd-08db-492e-8453-945a7dad98a1","ts":"2026-02-14T07:59:45.227-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"54e9a006-1a04-46f5-93f3-f52836454ff8","ts":"2026-02-14T08:01:36.381-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"bfadc201-aef1-4a82-a72d-a38ce5703425","ts":"2026-02-14T08:02:19.364-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"456ca4d2-93e1-47c8-acf4-e6fa3a080d32","ts":"2026-02-14T08:03:21.657-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"17971dc5-2578-4430-add2-2ac305dea97c","ts":"2026-02-14T08:04:45.060-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"222b508d-f23e-4d29-934f-e81fc23f35fb","ts":"2026-02-14T08:04:55.136-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"3fe50cf4-5ae9-4e60-ab6a-48be49c425ff","ts":"2026-02-14T08:05:02.789-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"056728b2-6b80-445f-b9df-ab114d5cffa1","ts":"2026-02-14T08:49:56.576-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"2a34b359-b84c-446e-80bf-f2740a48ef9f","ts":"2026-02-14T08:50:10.430-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"150927be-db4c-4b8d-8a3a-d7052e38b801","ts":"2026-02-14T08:58:51.135-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"c7c0f254-2966-455d-bca3-cebfa1b2dab5","ts":"2026-02-14T08:59:22.718-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"bc2ae192-ebfa-4cce-97e9-32e725a15cc5","ts":"2026-02-14T08:59:25.438-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"5f91b541-7a73-4630-9592-bf8df5e3aa27","ts":"2026-02-14T08:59:30.313-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"aac6019c-d935-4ff9-a7fa-236ae76add07","ts":"2026-02-14T08:59:44.159-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"153c56b1-3cca-4b3b-adc6-80ba93079d1d","ts":"2026-02-14T09:00:04.356-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"36f93747-2b8b-45d4-b0fd-9857b566980a","ts":"2026-02-14T09:11:58.119-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"87e05440-992a-4166-8bcb-01ba52f374b8","ts":"2026-02-14T09:12:11.567-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"8dac283b-2861-4d3f-8307-81317bc1ce4c","ts":"2026-02-14T09:12:17.827-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"57704429-5b09-428c-984f-fe3aa7fc4aea","ts":"2026-02-14T09:12:20.895-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"0fad1c53-af81-4ec0-ac41-d7cd1992aca4","ts":"2026-02-14T09:12:45.565-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"c7f6327c-7788-4105-96b8-c3c608b3709e","ts":"2026-02-14T09:12:49.760-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"f7e6feab-0a45-4b78-b526-bd61d90421c8","ts":"2026-02-14T09:12:58.006-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"ff14b040-c2d8-4f98-8d9a-68789d96ca9f","ts":"2026-02-14T09:13:10.495-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"ad2b88bc-5aea-4a57-bc0d-f75b70237e9f","ts":"2026-02-14T09:13:22.220-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} +{"__type":"$$EventMessageAudit","id":"f439a7c2-7aec-4bc5-8ef4-2891aa75072a","ts":"2026-02-14T09:13:32.643-05:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"07cbc1c9-f562-4c77-88d0-c0c8faff3e82","_email":"kincses@gmail.com","_firstName":"Zsolt","_lastName":"Gyongyossy","globalRole":"global:owner","workflowId":"eRVwBJfXw8ymc6aZ","workflowName":"01 - Dunakeszi Seed Hunter"}} diff --git a/n8n/data/nodes/package.json b/n8n/data/nodes/package.json new file mode 100644 index 0000000..9e96546 --- /dev/null +++ b/n8n/data/nodes/package.json @@ -0,0 +1,5 @@ +{ + "name": "installed-nodes", + "private": true, + "dependencies": {} +} \ No newline at end of file