MasterBook update

This commit is contained in:
2026-02-10 21:11:44 +00:00
parent 425f598fa3
commit a63e6c8fac
6 changed files with 123 additions and 5 deletions

View File

@@ -22,3 +22,38 @@ docker compose up -d
OpenAPI 404: A helyes cím /api/v2/openapi.json.
# 03. Development Environment Runbook
## 3.1. System Initialization (Bootstrap)
Ha az adatbázis üres (vagy törölve lett), az első SuperAdmin felhasználót manuálisan kell létrehozni, mivel a regisztrációs végpontok védettek vagy nem adnak admin jogot.
### 3.1.1. SuperAdmin Létrehozása (Recommended)
A jelszó hash-elési eltérések elkerülése érdekében használjuk a Python scriptet a konténeren belül:
```bash
docker exec -it service_finder_api python3 -c "
import bcrypt
import asyncio
from sqlalchemy import text
from app.db.session import SessionLocal
async def bootstrap_admin():
# 1. Jelszó generálás
password = 'InitialPassword123'.encode('utf-8')
hashed = bcrypt.hashpw(password, bcrypt.gensalt()).decode('utf-8')
async with SessionLocal() as db:
# 2. Person és User létrehozása/Frissítése
# (A script feltételezi, hogy a Person rekord már létezik vagy itt hozod létre)
sql = text(\"\"\"
UPDATE data.users
SET hashed_password = :h, role = 'superadmin', is_active = true, preferred_language = 'hu'
WHERE email = 'admin@servicefinder.hu'
\"\"\")
await db.execute(sql, {'h': hashed})
await db.commit()
print('✅ SuperAdmin Ready')
if __name__ == '__main__':
asyncio.run(bootstrap_admin())
"

View File

@@ -107,3 +107,23 @@ A felhasználók több e-mail címet is csatolhatnak egyetlen profilhoz, hogy k
3. Rendszer küld egy megerősítő linket az új címre.
4. Ha a linkre kattint, az új cím hozzáadódik a `user_identities` táblához.
5. Ha az új címen már volt regisztráció: A rendszer felajánlja az **Account Merge** (Fiókegyesítés) lehetőségét (biztonsági kérdések után).
```markdown
# 05. Authentication & Identity Specification
## 5.2. Data Models (Identity)
### 5.2.1. User Entity (`data.users`)
A technikai belépési pont.
- **id**: Integer (PK)
- **email**: String (Unique)
- **hashed_password**: String (Bcrypt)
- **role**: Enum (superadmin, admin, user, service, driver)
- **person_id**: FK -> `data.persons.id` (A TWINS kapcsolat)
- **preferred_language**: String (Default: 'hu') [ÚJ v1.2.5]
- **region_code**: String (Default: 'HU') [ÚJ v1.2.5]
- **is_active**: Boolean
### 5.2.2. TWINS Concept Update
- A `User` (User) és `Person` (Shadow Identity) szétválasztása szigorú.
- Belépéskor a rendszer a `User` táblából olvassa ki a `preferred_language` és `region_code` beállításokat, és ezeket a Token válaszban visszaadja a Frontendnek.

View File

@@ -287,3 +287,20 @@ A rendszer most már képes egyetlen KYC folyamat alatt aktiválni a felhasznál
- **Circular Import Fix:** A modellek importálási rendjének optimalizálása a `app.db.base_class` közvetlen használatával, megszüntetve a hurok-importokat.
- **Függőségkezelés:** `deps.py` bővítve a `get_current_active_user` függőséggel a biztonsági zárolások érvényesítéséhez.
- **Soft-Delete Logika:** A felhasználói fiók törlése mostantól felszabadítja az eredeti e-mail címet a TWINS-elvű újra-regisztrációhoz.
# 15. Changelog & Version History
## [v1.2.5] - 2026-02-10 (The "SuperAdmin" Update)
### 🚀 New Features
- **Admin Bootstrap:** Implementáltuk a "vészhelyzeti" Admin létrehozási folyamatot (Python script alapú hash generálással).
- **i18n Sync:** Élesítettük a `/api/v1/admin/translations/sync` végpontot, amely JSON fájlokba exportálja az adatbázis fordításait.
- **Identity Expansion:** A `User` modell bővült a `preferred_language` és `region_code` mezőkkel a perszonalizáció érdekében.
### 🐛 Bug Fixes
- **ORM Crash:** Javítva az `AssetAssignment` és `AssetCost` modellek hiányzó `organization` kapcsolatai, amelyek blokkolták a rendszer indulását (`InvalidRequestError`).
- **Config Error:** Javítva a `Settings` osztályból hiányzó `STATIC_DIR` definíció, ami 500-as hibát okozott a fordítások szinkronizálásakor.
- **Login Crash:** Javítva az `AttributeError` a Login végponton (a hiányzó `region_code` miatt).
### 🛠 Technical Changes
- **Migrations:** Új Alembic migráció (`add_lang_and_region_to_user`) generálva és lefuttatva.
- **Environment:** A `static/locales` mappa jogosultságai beállítva a Docker konténer számára.

View File

@@ -17,3 +17,21 @@
### Üres Swagger (OpenAPI) felület
* **Ok:** Ha az SQLAlchemy Mapper vagy egy Pydantic séma importja hibás, a FastAPI nem tudja legenerálni a dokumentációt.
* **Javítás:** Ellenőrizd a `docker logs` kimenetét indításkor, keresd a `MapperConfigurationError` vagy `ImportError` sorokat.
# 17. Developer Notes & Pitfalls
## 17.1. SQLAlchemy & Circular Imports
**Hiba:** `InvalidRequestError: Mapper has no property 'organization'`
**Ok:** Ha egy modellben definiálsz egy `ForeignKey`-t, de nem adod hozzá a `relationship`-et, a SQLAlchemy mapper inicializáláskor összeomolhat, ha egy másik modell próbál hivatkozni rá (back_populates).
**Megoldás:** Mindig párban definiáld a kapcsolatokat (FK + relationship).
**Példa javítás (AssetAssignment):**
```python
organization_id = Column(Integer, ForeignKey("data.organizations.id"))
organization = relationship("Organization") # Ez hiányzott!
17.2. Configuration Missing
Hiba: AttributeError: 'Settings' object has no attribute 'STATIC_DIR' Tanulság: Ha fájlrendszer műveleteket végzel (pl. JSON export), mindig a core/config.py-ban definiáld az abszolút útvonalakat (BASE_DIR, STATIC_DIR), ne hardkódolj útvonalakat a service fájlokban.
17.3. Database Migrations
Best Practice: Ha mezőt adsz hozzá egy modellhez (pl. User.region_code), azonnal generálj Alembic migrációt (alembic revision --autogenerate), különben az API 500-as hibát dob, mert a Python objektum attribútuma létezik, de az SQL lekérdezés nem adja vissza az oszlopot.

View File

@@ -202,3 +202,20 @@ A teljesítmény optimalizálása érdekében a \`Full Profile\` helyett 3 dedik
- \`GET /api/v1/assets/{id}\`: Csak identitás és katalógus (Gyors nézet).
- \`GET /api/v1/assets/{id}/costs\`: Csak pénzügyi történet és grafikonok.
- \`GET /api/v1/assets/{id}/telemetry\`: Csak élő adatok (Dashboard).
*A javított AssetAssignment logika dokumentálása.*
```markdown
# 18. Asset & Fleet Management Specification
## 18.2. Asset Assignment Logic
A járművek és eszközök hozzárendelése a rendszer egyik legkritikusabb része.
### 18.2.1. Assignment Model (`AssetAssignment`)
Kapcsolatot teremt egy Jármű (`Asset`) és egy Szervezet (`Organization`) között.
- **asset_id**: UUID (Melyik jármű?)
- **organization_id**: Integer (Melyik cég használja?)
- **status**: Active / Released
- **Validáció:** Egy jármű egyszerre csak egy szervezetnél lehet `active` státuszban.
*(Megjegyzés: A v1.2.5 frissítés javította az ORM kapcsolatokat, így a lekérdezések most már közvetlenül elérik az `assignment.organization` objektumot.)*

View File

@@ -119,3 +119,14 @@ A `GAMIFICATION_MASTER_CONFIG` struktúrája:
- `penalty_logic`: Küszöbértékek, szorzók és ledolgozási ráta.
- `conversion_logic`: Social-to-Credit váltási arány.
- `level_rewards`: Szintlépési bónuszok mértéke.
## 19.1. SuperAdmin Capabilities
A `rank: 100` szintű felhasználó (SuperAdmin) az egyetlen, aki:
1. **Translation Sync:** Írási joga van a szerver fájlrendszerére a `/api/v1/admin/translations/sync` végponton keresztül.
2. **Sentinel Override:** Felülbírálhatja az automatikus biztonsági zárolásokat.
## 19.2. Admin API Endpoints
- `POST /admin/translations/sync`:
- **Trigger:** Manuális (Gombnyomás a Dashboardon).
- **Action:** `data.translations` -> `static/locales/*.json`.
- **Permission:** SuperAdmin ONLY.