L1L2 gen1Gen2 kialakítása

This commit is contained in:
Roo
2026-07-24 09:56:21 +00:00
parent 4594de6c11
commit 33c4d793db
49 changed files with 4108 additions and 127 deletions

View File

@@ -331,3 +331,123 @@ if any([row_address_zip, row_address_street_name, row_address_street_type, row_a
1. **Adatbázis:** 33 rekord a `marketplace.service_providers` táblában, mind `status=approved`, `source=api_import`
2. **API Search:** `GET /api/v1/providers/search?query=biztosito` visszaadja a biztosítókat (pl. Allianz, Generali, Groupama)
3. **ServiceProfile** és **ServiceExpertise** kapcsolatok létrejöttek minden providerhez
---
## P0 EPIC: i18n JSONB Database Migration (Phase 1) — Gitea #399
**Dátum:** 2026-07-23
**Scope:** Backend (Models, API, Services, Schemas, Seeds)
### 🔧 Módosított fájlok
#### 1. Modellek — Régi oszlopok eltávolítva
- [`marketplace/service.py`](backend/app/models/marketplace/service.py) — `ExpertiseTag`: `name_hu`, `name_en`, `name_translations`, `description` → csak `name_i18n`, `description_i18n`
- [`vehicle/vehicle_definitions.py`](backend/app/models/vehicle/vehicle_definitions.py) — `BodyTypeDictionary`: `name_hu` → csak `name_i18n`
- [`core_logic.py`](backend/app/models/core_logic.py) — `ServiceCatalog`: `name`, `description` → csak `name_i18n`, `description_i18n`
#### 2. API Végpontok
- [`providers.py`](backend/app/api/v1/endpoints/providers.py) — Category tree, autocomplete: `name_hu`/`name_en` → `name_i18n`
- [`catalog.py`](backend/app/api/v1/endpoints/catalog.py) — Body types: `name_hu` → `name_i18n`
#### 3. Service Réteg
- [`provider_service.py`](backend/app/services/provider_service.py) — CategoryInfo, tag creation, tag search: `name_hu`/`name_en` → `name_i18n`
#### 4. Schema Réteg
- [`provider.py`](backend/app/schemas/provider.py) — `CategoryTreeNode`, `CategoryAutocompleteItem`, `ExpertiseCategoryOut`, `CategoryInfo`: `name_hu`/`name_en` → `name_i18n`
#### 5. Seed Scriptek (7 fájl)
- `seed_expertise_tags.py`, `seed_dismantler_category.py`, `seed_gas_station.py`, `seed_expertise_enterprise.py`, `seed_insurance_providers.py`, `seed_body_types.py`, `seed_expertise_taxonomy.py`
#### 6. Adatbázis
- 6 shadow column eltávolítva SQL ALTER TABLE segítségével
- Sync engine: 0 shadow column, 1281 OK — tökéletes szinkron
### ⚠️ Megjegyzés
- A konténer újraépítése után pre-existing import hibák derültek ki az `expenses.py`-ban (3 db):
1. `from app.models.fleet.organization import Organization` → `app.models.marketplace.organization`
2. `from app.models.fleet.org_member import OrganizationMember` → `app.models.marketplace.organization`
3. `from app.models.marketplace.service import ServiceProvider` → `app.models.identity.social`
4. `from app.models.system.system_parameter import SystemParameter` → `app.models.system.system`
- Mind a 4 import hiba javítva, konténer újraépítve, API sikeresen fut.
A konténer indításakor előre létező import hibák jelentkeztek (`expenses.py` → `Organization`, `AssetEvent`, `OdometerReading` rossz import útvonalai), amelyek NEM kapcsolódnak a #399-es kártyához. Ezek javítása külön kártyát igényel.
---
## P1 EPIC - Registration UI Upgrade & Google SSO Integration
**Dátum:** 2026-07-23
### Módosított fájlok
#### Backend
1. **`backend/app/api/v1/endpoints/auth.py`** — Google OAuth handler hozzáadva:
- `GoogleAuthRequest` Pydantic modell (`id_token`, `access_token`, `referred_by_code` mezőkkel)
- `POST /auth/google` végpont: Google token verifikáció (tokeninfo API), felhasználó lekérés/létrehozás `SocialAuthService.get_or_create_social_user()`-on keresztül, JWT token generálás, refresh_token cookie beállítás
- Támogatja mind az `id_token` (Google Sign-In), mind az `access_token` (OAuth2 token client) típusokat
2. **`backend/app/services/social_auth_service.py`** — `get_or_create_social_user()` metódus kiegészítve:
- `referred_by_code` paraméter hozzáadva
- Új social regisztrációnál a meghívó kód alapján a referrer (`User.referral_code`) felkutatása és `referred_by_id` beállítása
- `generate_secure_slug` importálva az új felhasználók referral_code generálásához
#### Frontend
3. **`frontend_app/src/components/LoginModal.vue`** — Regisztrációs UI frissítve:
- `referredByCode` ref hozzáadva
- "Meghívó kód" (Referral Code) input mező hozzáadva a regisztrációs űrlapba (jelszó mező alá)
- "Vagy regisztrálj Social fiókkal" elválasztó + Google gomb hozzáadva a regisztrációs űrlapba (a login form dizájnját tükrözve)
- Google gomb @click esemény bekötve a login űrlapon (`handleGoogleLogin`)
- `handleGoogleRegister()` függvény: a meghívó kódot localStorage-ba menti (`pending_referral_code`), majd meghívja a `handleGoogleLogin()`-t
- `handleRegister()` frissítve: `referred_by_code` mezőt is küld a backendnek
- `loadGoogleScript()`: dinamikusan betölti a Google Identity Services SDK-t
4. **`frontend_app/src/stores/auth.ts`** — `googleAuth` action hozzáadva:
- `access_token` küldése a `/auth/google` végpontra
- Opcionális `referred_by_code` támogatása
- Token perzisztálás, user profil és szervezetek betöltése
5. **`frontend_app/.env`** — `VITE_GOOGLE_CLIENT_ID` környezeti változó hozzáadva
### Technikai részletek
- **Google OAuth flow**: A frontend a Google Identity Services (GIS) `initTokenClient`-jével kér `access_token`-t, amit a backend a `https://oauth2.googleapis.com/tokeninfo?access_token={token}` endpointon verifikál
- **Referral code flow**: Regisztrációkor a meghívó kódot a frontend elküldi a backendnek, ami a `User.referral_code` mező alapján megkeresi a referrer-t és beállítja a `referred_by_id` kapcsolatot
- **Biztonság**: A backend ellenőrzi a token `azp` (authorized party) mezőjét a `GOOGLE_CLIENT_ID`-val
- **Adatbázis**: Nincs új migráció, a meglévő `User.referral_code` és `referred_by_id` mezők használva
- **Sync engine**: 1281 elem szinkronban, 0 hiba
- **Modul betöltés**: Mindkét módosított backend modul sikeresen betöltődik
## 2026-07-23 — Referral & Credit Ecosystem Full Stack Analysis (#409)
**Elemzés típusa:** Read-only audit
**Vizsgált komponensek:** identity.users, identity.wallet, gamification.point_rules, gamification.points_ledger, audit.financial_ledger, AuthService, SocialAuthService, GamificationService, LoginModal.vue, auth.ts
**Főbb megállapítások:**
1. Single-level (L1) referral tracking létezik `User.referred_by_id` mezőn keresztül
2. Jutalmazás kizárólag XP alapú (50 pont P2P_REFERRAL_SUCCESS), nincs kredit-alapú jutalom
3. **KRITIKUS HIBA:** `auth.ts register()` nem küldi el a `referred_by_code`-ot a payload-ban
4. Hiányzik: dedikált Referral tábla, multi-level (L2/L3) követés, commission engine, referral API-k
5. FinancialLedger és Wallet infrastruktúra alkalmas lenne bővítésre
**Dokumentáció:** `/opt/docker/docs/referral_credit_ecosystem_analysis.md`
---
## 2-Level MLM Commission Distribution
**Dátum:** 2026-07-24
### Megvalósított komponensek:
1. **Model** [`backend/app/models/marketplace/commission.py`](backend/app/models/marketplace/commission.py:119) — `upline_commission_percent` oszlop hozzáadva (Numeric(5,2), nullable, default=0.00)
2. **Schemas** [`backend/app/schemas/commission.py`](backend/app/schemas/commission.py) — `CommissionDistributionRequest`, `CommissionDistributionItem`, `CommissionDistributionResponse` új Pydantic modellek
3. **Service** [`backend/app/services/commission_service.py`](backend/app/services/commission_service.py:377) — `distribute_commission()` 2-level MLM engine: buyer → Gen1 (commission_percent) → Gen2 (upline_commission_percent)
4. **API** [`backend/app/api/v1/endpoints/admin_commission.py`](backend/app/api/v1/endpoints/admin_commission.py:250) — `POST /admin/commission-rules/distribute` végpont
5. **Frontend** [`frontend_admin/pages/finance/commission-rules.vue`](frontend_admin/pages/finance/commission-rules.vue) — `upline_commission_percent` mező az admin UI-ban
6. **i18n** — EN/HU locale fájlok frissítve
### Teszteredmények:
- **4/4 teszt PASS**
- Gen1: 5% of 100000 = 5000.00 ✅
- Gen2: 2% of 100000 = 2000.00 ✅
- Total: 7000.00 ✅
- Max amount cap (50000) verified ✅
- Sync engine: 1303 OK, 0 Fixed, 0 Shadow