Skip to main content

Configuration Schema

A rendszer konfigurációja a config Prisma táblában található, JSON formátumban. A mainline: true jelöléssel rendelkező rekord az aktív konfiguráció.

Konfiguráció struktúra​

interface Config {
limiter: LimiterConfig;
ads: AdsConfig;
history: HistoryConfig;
}

Rate Limiter konfiguráció​

Schema​

interface LimiterConfig {
enabled: boolean;
ipHeaderKey: string;
ipRegister: number;
limits: {
guest: TaskLimits;
registered: TaskLimits;
};
}

interface TaskLimits {
table: number;
connect_1: number;
gaps: number;
quiz: number;
essay: number;
exam: number;
}

Alapértelmezett értékek​

{
"limiter": {
"enabled": false,
"ipHeaderKey": "cf-connecting-ip",
"ipRegister": 5,
"limits": {
"guest": {
"table": 10,
"connect_1": 10,
"gaps": 10,
"quiz": 5,
"essay": 1,
"exam": 1
},
"registered": {
"table": 30,
"connect_1": 30,
"gaps": 30,
"quiz": 15,
"essay": 5,
"exam": 3
}
}
}
}

Mezők leírása​

enabled​

  • Típus: boolean
  • Alapértelmezett: false
  • Leírás: Rate limiting funkció aktiválása. false esetén minden rate limit bypass-olva van.

ipHeaderKey​

  • Típus: string
  • Alapértelmezett: "cf-connecting-ip"
  • Leírás: A HTTP header neve, amelyből a kliens IP címe kinyerhető. Cloudflare használata esetén cf-connecting-ip ajánlott.

ipRegister​

  • Típus: number
  • Alapértelmezett: 5
  • Leírás: Egy IP címről legfeljebb ennyi visitor key igényelhető 24 órán belül. Visszaélések megelőzésére szolgál.

limits.guest​

  • Típus: TaskLimits
  • Leírás: Vendég felhasználók (visitor key) napi limitjei feladattípusonként.

limits.registered​

  • Típus: TaskLimits
  • Leírás: Regisztrált, nem prémium felhasználók napi limitjei feladattípusonként.

Feladattípus limitek​

FeladattípusVendégRegisztráltLeírás
table1030Táblázat kitöltős feladatok
connect_11030Egyszerű párosítás (1:1)
gaps1030Hiányos szöveg kiegészítés
quiz515Kvíz feladatok
essay15Esszé témák
exam13Érettségi feladatsorok

Megjegyzés: Prémium felhasználókra nem vonatkoznak limitek, korlátlanul használhatnak minden feladattípust.

Ads konfiguráció​

Schema​

interface AdsConfig {
enabled: boolean;
}

Alapértelmezett értékek​

{
"ads": {
"enabled": false
}
}

Mezők leírása​

enabled​

  • Típus: boolean
  • Alapértelmezett: false
  • Leírás: Reklám megjelenítés aktiválása. false esetén senki nem lát reklámokat. true esetén csak a nem prémium felhasználók látnak reklámokat.

History konfiguráció​

Schema​

interface HistoryConfig {
enabled: boolean;
}

Alapértelmezett értékek​

{
"history": {
"enabled": false
}
}

Mezők leírása​

enabled​

  • Típus: boolean
  • Alapértelmezett: false
  • Leírás: Felhasználói előzmények követésének aktiválása.

Konfiguráció módosítása​

SQL parancsok​

Rate limiting bekapcsolása​

UPDATE config
SET config = jsonb_set(config, '{limiter,enabled}', 'true')
WHERE mainline = true;

Guest table limit módosítása​

UPDATE config
SET config = jsonb_set(config, '{limiter,limits,guest,table}', '20')
WHERE mainline = true;

Reklámok bekapcsolása​

UPDATE config
SET config = jsonb_set(config, '{ads,enabled}', 'true')
WHERE mainline = true;

IP regisztrációs limit növelése​

UPDATE config
SET config = jsonb_set(config, '{limiter,ipRegister}', '10')
WHERE mainline = true;

Prisma lekérdezés​

const config = await prisma.config.findFirst({
where: { mainline: true }
});

console.log(config.config.limiter.enabled);

Konfiguráció frissítése kódból​

import { PrismaService } from './prisma.service';

const updatedConfig = {
...existingConfig.config,
limiter: {
...existingConfig.config.limiter,
enabled: true
}
};

await prisma.config.update({
where: { mainline: true },
data: { config: updatedConfig }
});

Migráció régi konfigurációról​

Ha egy régebbi konfigurációs struktúra van élesben (flat unregistered és registered limitekkel), a ConfigService automatikusan létrehoz egy új, alapértelmezett konfigurációt, ha nem talál mainline: true rekordot.

Régi struktúra (deprecated)​

{
"limiter": {
"enabled": false,
"unregistered": 10,
"registered": 100,
"ipHeaderKey": "cf-connecting-ip",
"ipRegister": 5
}
}

Új struktúra​

A fenti régi struktúra helyett a feladattípus-alapú limiteket kell használni. Régi konfiguráció esetén ajánlott a teljes config mező cseréje az új struktúrára.

UPDATE config
SET config = '{
"limiter": {
"enabled": false,
"ipHeaderKey": "cf-connecting-ip",
"ipRegister": 5,
"limits": {
"guest": {
"table": 10,
"connect_1": 10,
"gaps": 10,
"quiz": 5,
"essay": 1,
"exam": 1
},
"registered": {
"table": 30,
"connect_1": 30,
"gaps": 30,
"quiz": 15,
"essay": 5,
"exam": 3
}
}
},
"ads": {
"enabled": false
},
"history": {
"enabled": false
}
}'::jsonb
WHERE mainline = true;

Konfiguráció ellenőrzése​

Backend logban​

A ConfigService inicializáláskor logol, ha nem talál konfigurációt:

[ConfigService] Config not found, generating with default values...

Manuális ellenőrzés​

SELECT * FROM config WHERE mainline = true;

API endpoint (jövőbeli)​

Jelenleg nincs dedikált konfiguráció lekérdező endpoint. Admin API-n keresztül lehetséges hozzáférés.

Kapcsolódó dokumentáció​