RABC fejlesztése és beélesítése hibák kijavításával

This commit is contained in:
Roo
2026-06-18 18:09:51 +00:00
parent 611307a24b
commit fe3c32597d
57 changed files with 4689 additions and 655 deletions

View File

@@ -0,0 +1,189 @@
# P0 PRE-FLIGHT CHECK: Unified Workspace Impact Analysis
**Dátum:** 2026-06-18
**Auditor:** Architect Mode
**Cél:** A 28-as User (tester_pro@profibot.hu) privát járműveinek organization_id auditja, mielőtt bevezetjük az új "Unified Workspace" szabályt (ahol a hozzáférés szigorúan organization_id + OrganizationMember alapú).
---
## 1. 🔍 SZERVEZETI STRUKTÚRA (Organization Audit)
### 1.1 User 28 → Person 29
| Mező | Érték |
|------|-------|
| User ID | **28** |
| Email | tester_pro@profibot.hu |
| Person ID | **29** |
| Név | Tester Profibot |
### 1.2 Privát Garázs (individual type)
A 28-as User saját "Privát Garázsa":
| Mező | Érték |
|------|-------|
| **Organization ID** | **21** |
| Név | Private_28 |
| Típus | `individual` |
| Tulajdonos (owner_id) | 29 (Person) |
| folder_slug | priv_28 |
### 1.3 A Person 29 által birtokolt összes szervezet
| Org ID | Név | Típus | Van tagja? |
|--------|-----|-------|-----------|
| 15 | Profibot Test Fleet | `fleet_owner` | ❌ NINCS |
| **21** | **Private_28** | **`individual`** | **❌ NINCS** |
| 26 | Test Kft. Alpha | `fleet_owner` | ❌ NINCS |
| 27 | Test Kft. Beta | `fleet_owner` | ❌ NINCS |
| 38 | Admin Széfe | `individual` | ❌ NINCS |
### 1.4 Ahol Person 29 TAG (OrganizationMember)
| Org ID | Név | Típus | Szerep |
|--------|-----|-------|--------|
| 63 | Aszalós Motorszervíz | `service_provider` | ADMIN |
**⚠️ KRITIKUS:** Person 29 NEM tagja a saját privát garázsának (org 21)! A `fleet.organization_members` táblában egyetlen rekord sincs a `Private_28`-hoz.
---
## 2. 🚗 JÁRMŰVEK ÁLLAPOTA (Assets Audit)
### 2.1 Person 29 tulajdonában lévő összes jármű
| # | ID (UUID) | Rendszám | Márka | Modell | current_org_id | owner_org_id | Státusz |
|---|-----------|----------|-------|--------|---------------|-------------|---------|
| 1 | deb42aea... | QWE123 | APRILIA | af1 | **44** | 44 | active/draft |
| 2 | da49269e... | TTRFGHZT | BAYLINER | 1750 CAPRY BOWRIDER | **44** | 44 | active/draft |
| 3 | 72b0a0cf... | UOK795 | Honda | CB1000R | **NULL** ⚠️ | 34 | active/verified |
| 4 | 0b97a975... | PKT215 | Mazda | 2 | **NULL** ⚠️ | 34 | active/draft |
| 5 | 09700990... | AIML519 | Skoda | Citigo e | **NULL** ⚠️ | 34 | active/enriched |
| 6 | 104d6753... | ABC-123 | Toyota | Corolla | **34** | 34 | active/verified |
### 2.2 Érintett szervezetek részletei
| Org ID | Név | Típus | Tulajdonos |
|--------|-----|-------|-----------|
| 21 | Private_28 | `individual` | Person 29 ✅ |
| 34 | Swagger-Test Kft. | `business` | Nincs tulajdonos (owner_id = NULL) |
| 44 | Profibot Kft. | `business` | User 86 |
---
## 3. 📊 HATÁSELEMZÉS (Impact Analysis)
### 3.1 Unified Workspace forgatókönyv
Ha bevezetjük a szabályt: **"Egy User csak olyan járművet érhet el, ahol a `current_organization_id` egyezik egy olyan Organization-nel, aminek a User tagja (OrganizationMember)"**:
#### 3.1.1 NULL current_organization_id-val rendelkező járművek
**3 jármű** (Honda CB1000R, Mazda 2, Skoda Citigo e) **jelenleg NULL** `current_organization_id`-val rendelkezik. Ezek:
- Nincsenek egyetlen szervezethez sem rendelve jelenleg
- Csak a `owner_person_id = 29` alapján lennének elérhetők
- **Az új szabály szerint KI lennének ZÁRVA** (orphaned), mert nincs organization contextusuk
#### 3.1.2 Más szervezethez rendelt járművek
**3 jármű** (Toyota Corolla → org 34, Aprilia + Bayliner → org 44) olyan szervezetekhez van rendelve, amelyeknek Person 29 NEM tagja:
- **Toyota Corolla** (`current_org = 34` = Swagger-Test Kft.) → **KI VAN ZÁRVA** (Person 29 nem tag)
- **APRILIA** (`current_org = 44` = Profibot Kft.) → **KI VAN ZÁRVA** (Person 29 nem tag)
- **BAYLINER** (`current_org = 44` = Profibot Kft.) → **KI VAN ZÁRVA** (Person 29 nem tag)
### 3.2 Összegzés
| Kategória | Darab | Járművek | Sorsa új szabály alatt |
|-----------|-------|----------|----------------------|
| NULL current_org_id | **3** | Honda, Mazda, Skoda | ❌ ORPHANED |
| Idegen org (nincs tagság) | **3** | Toyota (org 34), Aprilia+Bayliner (org 44) | ❌ ORPHANED |
| Saját privát garázsban (org 21) | **0** | — | ✅ OK |
| **ÖSSZESEN** | **6/6** | **MIND** | **❌ 100%-OS ORPHANED** |
---
## 4. 💾 ELŐKÉSZÍTETT SQL JAVÍTÁS (NE FUTTASD KI - CSAK TERVEZÉS)
### 4.1 Első lépés: Person 29 felvétele a Private_28 (org 21) tagjai közé
```sql
INSERT INTO fleet.organization_members (organization_id, user_id, person_id, role, is_permanent, is_verified, status)
VALUES (21, 28, 29, 'OWNER', true, true, 'active');
```
**VAGY ha a user_id nem elvárás (person_id alapú):**
```sql
INSERT INTO fleet.organization_members (organization_id, person_id, role, is_permanent, is_verified, status)
VALUES (21, 29, 'OWNER', true, true, 'active');
```
### 4.2 Második lépés: NULL current_organization_id javítása
```sql
UPDATE vehicle.assets
SET current_organization_id = 21
WHERE owner_person_id = 29 AND current_organization_id IS NULL;
```
Ez a **Honda CB1000R** (UOK795), **Mazda 2** (PKT215) és **Skoda Citigo e** (AIML519) járműveket beköti a Privát Garázsba.
### 4.3 Harmadik lépés: Üzleti döntés szükséges
A következő járművekhez **üzleti döntés** kell:
1. **Toyota Corolla** (ABC-123) - `current_org = 34, owner_org = 34`
- **Opció A:** Áttenni a Private_28-ba (org 21)
- **Opció B:** Felvenni Person 29-et a Swagger-Test Kft. (org 34) tagjai közé
- **Opció C:** Megtartani a jelenlegi állapotot és kivételt képezni az új szabály alól
2. **APRILIA af1** (QWE123) + **BAYLINER** (TTRFGHZT) - `current_org = 44, owner_org = 44`
- **Opció A:** Áttenni a Private_28-ba (org 21)
- **Opció B:** Felvenni Person 29-et a Profibot Kft. (org 44) tagjai közé (de User 86 a tulajdonos!)
- **Opció C:** Megtartani a jelenlegi állapotot
### 4.4 Teljes körű SQL javítás (ha az összes járművet a privát garázsba tennénk)
```sql
-- 1. Person 29 taggá tétele a Private_28-ban
INSERT INTO fleet.organization_members (organization_id, user_id, person_id, role, is_permanent, is_verified, status)
VALUES (21, 28, 29, 'OWNER', true, true, 'active');
-- 2. Összes jármű áthelyezése a Private_28-ba
UPDATE vehicle.assets
SET current_organization_id = 21
WHERE owner_person_id = 29;
```
---
## 5. ⚠️ KIEGÉSZÍTŐ MEGJEGYZÉSEK
### 5.1 User 28 soft-deleted állapota
A korábbi audit ([`docs/db_schema_ownership_audit_2026-06-18.md`](docs/db_schema_ownership_audit_2026-06-18.md)) feltárta, hogy User 28 **soft-deletelve** van (`is_deleted = true`, `deleted_at = 2026-06-14`). Ez azt jelenti:
- Jelenleg NEM tud bejelentkezni
- Még az adatjavítás után sem fér hozzá a járművekhez, amíg a fiókja nincs visszaállítva
### 5.2 Tervezési ajánlás
Az új "Unified Workspace" szabály bevezetése ELŐTT kötelező:
1. **Adatjavítás:** A NULL `current_organization_id`-val rendelkező járművek bekötése
2. **Tagság rögzítése:** Minden `individual` típusú org tulajdonosának automatikus OWNER taggá tétele
3. **Üzleti járművek felülvizsgálata:** Döntés a org 34-be és 44-be sorolt járművekről
4. **User 28 restore:** A soft-delete feloldása a KYC/restore folyamaton keresztül
5. **Átmeneti időszak:** Az `owner_person_id` alapú hozzáférés megtartása fallback-ként, amíg a fenti pontok nem teljesülnek
---
## 6. 🔮 ARCHITECT AJÁNLÁS
**Javaslat:** NE vezessük be a "pure Unified Workspace"-t (kizárólag org + membership alapú hozzáférés), amíg:
1. Az összes `individual` org-nak nincs automatikusan létrehozott OWNER OrganizationMember rekordja
2. Az összes meglévő jármű `current_organization_id` mezője ki van töltve
3. A soft-deletelt userek vissza vannak állítva vagy tisztázva van a státuszuk
**Ajánlott átmeneti megoldás:** Tartsd meg az `owner_person_id == user.person_id` ellenőrzést fallback-ként az org-based check mellett, amíg a fenti adatjavítások meg nem történnek.