Gå til innhold

Data-sync og cache

Oversikt

Datasynkroniseringen er ansvaret til sync_worker.py. Den kjøres som en planlagt Windows-oppgave (nattlig) og bygger JSON-cachen som FastAPI-backend bruker for å besvare spørsmål.

SQL Server masterbase (Clubs-tabell)
    ├── boolChatbot = 1  →  Klubb inkluderes i sync
Per klubb: spør 44 tillatte tabeller
cache/{clubFolder}_context.json

sync_worker.py – Detaljert flyt

  1. Kobler til masterdatabasen med pyodbc-parametere fra .env
  2. Leser Clubs-tabellen – henter alle rader der boolChatbot = 1
  3. For hver klubb:
  4. Kobler til klubbens egen database
  5. Spør mot 44 forhåndsgodkjente tabeller (nyhetssaker, aktiviteter, baneinfo, prislister, osv.)
  6. Samler resultatene i ett Python-dict
  7. Skriver cache/{clubFolder}_context.json

Tillatte tabeller (44 stk.)

Sync-workeren har en eksplisitt godkjentliste (ALLOWED_TABLES) for å hindre at uvedkommende data eksponeres til AI-modellen. Eksempler:

Tabell Innhold
tblNews Nyhetssaker
tblActivities Aktiviteter og arrangementer
tblCourseInfo Baneinformasjon
tblPrices Prisliste
tblContacts Kontaktinformasjon
tblOpeningHours Åpningstider
AI_Chatbot_Settings Chatbot-innstillinger per klubb

Cache-format

Filen cache/{clubFolder}_context.json har følgende overordnede struktur:

{
  "club_id": "SKI",
  "synced_at": "2026-05-02T03:00:00Z",
  "tables": {
    "tblNews": [
      {"id": 1, "title": "Sommer åpent!", "body": "..."},
      ...
    ],
    "tblActivities": [...],
    ...
  }
}

Planlagt kjøring (Windows Task Scheduler)

Parameter Verdi
Skript API\chatbot\sync_worker.py
Utfører Python venv: API\python\venv\Scripts\python.exe
Utløser Daglig kl. 03:00
Arbeidskatalog C:\ftp\sites\clubsite-4\API\chatbot

Kjør manuelt:

cd C:\ftp\sites\clubsite-4\API\python
.\venv\Scripts\python.exe ..\chatbot\sync_worker.py

Legge til ny tenant i sync

  1. Sett boolChatbot = 1 for klubben i Clubs-tabellen i masterdatabasen
  2. Verifiser at clubFolder-feltet er korrekt (brukes som filnavn for cache)
  3. Kjør sync_worker.py manuelt
  4. Sjekk at cache/{clubFolder}_context.json er opprettet
  5. Oppdater ALLOWED_TENANT_ID i app.py (fjernes i v2.1)

Fremtidig forbedring

I v2.1-planen fjernes ALLOWED_TENANT_ID-begrensningen. API-et vil da automatisk laste cache for hvilken som helst tenant med gyldig cache-fil.