feat: implement hybrid address system and premium search logic

- Added centralized, self-learning GeoService (ZIP, City, Street)
- Implemented Hybrid Address Management (Centralized table + Denormalized fields)
- Fixed Gamification logic (PointsLedger field names & filtering)
- Added address autocomplete and two-tier (Free/Premium) search API
- Synchronized UserStats and PointsLedger schemas
This commit is contained in:
2026-02-08 16:26:39 +00:00
parent 4e14d57bf6
commit 451900ae1a
41 changed files with 764 additions and 515 deletions

View File

@@ -109,4 +109,78 @@ Minden üzleti változó az Admin UI-ról állítható:
## 4.3 Crowdsourced Szervezetek
- **Lifecycle:** draft_user -> draft_bot -> community_verified -> official.
- **Gamification:** XP/Kredit jóváírás csak sikeres Bot vagy Owner validáció után.
- **Gamification:** XP/Kredit jóváírás csak sikeres Bot vagy Owner validáció után.
## 6. Service & Organization Extensions (V2)
### 6.1 `data.system_configs` (Dinamikus Beállítások)
Kódba égetett értékek helyett adatbázisból vezérelt működés.
* `key` (VARCHAR): Pl. `referral_bonus_L1`, `exchange_rate_EUR`, `payout_threshold`.
* `value` (JSONB): Pl. `{"amount": 10, "unit": "percent"}`, `{"rate": 400.0}`.
* `is_active` (BOOLEAN).
### 6.2 `data.service_reviews` (Okos Értékelés)
* `user_id`, `organization_id`.
* `rating` (1-5).
* `proof_url` (Számla/Munkalap fotó URL).
* `is_active` (BOOLEAN): Csak az aktív számít bele az átlagba (lásd Gamification logika).
### 6.3 `data.wallet_transactions`
* `original_currency`: (HUF, EUR, USD).
* `exchange_rate`: Az adott pillanatban érvényes váltószám.
## 7. Referrals & Invitations
* `data.referrals`: Hierarchikus fa szerkezet (`inviter_id`, `invitee_id`, `level`).
* `data.invitations`:
* `code`: Random string (pl. `X7K9P2`).
* `type`: 'private' (72h) vagy 'company' (168h).
* `target_role`: A meghívott jogosultsága (Driver, Manager).
## 8. Virtual Goods & Inventory (Digitális Javak)
### 8.1 `data.user_inventory`
Ez a tábla tárolja a felhasználó által megszerzett vagy vásárolt kozmetikai elemeket (NEM jogosultságok, hanem vagyontárgyak).
* `id` (UUID): Egyedi azonosító.
* `user_id` (FK): A tulajdonos.
* `item_id` (VARCHAR): A katalógusban lévő azonosító (pl. `avatar_frame_neon`).
* `metadata` (JSONB): Opcionális egyedi tulajdonságok (pl. sorszámozott NFT-szerű elemknél: `{"serial": 42}`).
* `acquired_at` (TIMESTAMP): Mikor szerezte.
* `is_equipped` (BOOLEAN): Éppen használja-e (pl. ez az aktív avatar kerete).
### 8.2 Shop Catalog Configuration (`system_configs`)
A `key = 'shop_catalog'` alatt tároljuk a bolt kínálatát JSON formátumban.
**Példa JSON struktúra:**
```json
{
"categories": ["avatars", "badges", "profile_themes"],
"items": {
"badge_early_adopter": {
"name": "Korai Felfedező",
"price": 0,
"currency": "free",
"condition": "reg_date < '2025-01-01'",
"image_url": "/assets/badges/early.png"
},
"frame_gold_mechanic": {
"name": "Arany Szerelő Keret",
"price": 5000,
"currency": "credit",
"rarity": "legendary",
"effect": "shine_animation",
"image_url": "/assets/frames/gold.png"
}
}
}
## 5. Geo-Location and Address Master Data
A rendszer normalizált címkezelést alkalmaz az adatminőség biztosítása érdekében.
### 5.1 Geo Adattáblák
- `data.geo_postal_codes`: ZIP és Település kapcsolata (Unique: country + zip + city).
- `data.geo_streets`: Utcanevek listája, ZIP azonosítóhoz kötve.
- `data.geo_street_types`: Közterület típusok szótára (út, utca, tér...).
### 5.2 GIS Adatok
Minden telephely koordinátája `GEOGRAPHY(POINT, 4326)` típusként van tárolva, amely lehetővé teszi a PostGIS alapú távolságmérést.