admin felület bekötése. pontosítások2
This commit is contained in:
156
docs/admin_garage_system_identifiers_bug_analysis.md
Normal file
156
docs/admin_garage_system_identifiers_bug_analysis.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# 🔍 Admin Garázs Részletek — Rendszer Azonosítók Bug Analysis
|
||||
|
||||
**Dátum:** 2026-06-26
|
||||
**URL:** GET /api/v1/admin/organizations/{org_id}/details
|
||||
**Érintett garázs:** org_id=43 (Accipe Tímea - Privát Garázs)
|
||||
|
||||
---
|
||||
|
||||
## Probléma Leírás
|
||||
|
||||
Az admin oldalon a Garázs menü → General Tab → Cégadatok → Rendszer Azonosítók blokkban 3 értéknek kellene megjelennie:
|
||||
|
||||
| Mező | Várt érték | Tényleges | Státusz |
|
||||
|------|-----------|-----------|---------|
|
||||
| Garázs ID | 43 | 43 | OK |
|
||||
| User ID (tulajdonos) | 79 | N/A | HIBA |
|
||||
| Person ID (tulajdonos) | (valami szám) | N/A | HIBA |
|
||||
|
||||
---
|
||||
|
||||
## Root Cause Analysis
|
||||
|
||||
### HIBA #1 — User ID nem töltődik be
|
||||
|
||||
**Hely:** frontend_admin/pages/garages/[id]/index.vue:200
|
||||
|
||||
```vue
|
||||
<span>User ID: <span>{{ garage.owner?.id || 'N/A' }}</span></span>
|
||||
```
|
||||
|
||||
A frontend a `garage.owner?.id` kifejezéssel próbálja elérni a tulajdonos User ID-ját.
|
||||
|
||||
**A probléma:** A `GarageDetailsResponse` Pydantic séma (backend/app/api/v1/endpoints/admin_organizations.py:127-172) **nem tartalmaz** `owner` mezőt! A séma jelenlegi mezői:
|
||||
- `owner_person_id: Optional[int]` (sor 170) — letezik
|
||||
- `owner_user_id` — NEM LETEZIK
|
||||
- `owner` object — NEM LETEZIK
|
||||
|
||||
Mivel a backend válaszban nincs `owner` kulcs, `garage.owner` mindig `undefined`, igy `garage.owner?.id` is `undefined`, ami a `|| 'N/A'` miatt 'N/A'-ra esik vissza.
|
||||
|
||||
**Adat elerhetoseg:** A backend lekeri az `org.owner`-t (`User` modell) a 398. sorban:
|
||||
```python
|
||||
selectinload(Organization.owner).selectinload(User.person)
|
||||
```
|
||||
Es elerheto az 503-514. sorokban:
|
||||
```python
|
||||
owner: Optional[User] = org.owner # User objektum, id=79
|
||||
```
|
||||
|
||||
Tehat az adat **rendelkezesre all** a backendben, csak **nincs kiteve** a valaszban.
|
||||
|
||||
---
|
||||
|
||||
### HIBA #2 — Person ID nem toltodik be
|
||||
|
||||
**Hely:** frontend_admin/pages/garages/[id]/index.vue:201
|
||||
|
||||
```vue
|
||||
<span>Person ID: <span>{{ garage.owner_person_id ?? 'N/A' }}</span></span>
|
||||
```
|
||||
|
||||
A frontend a `garage.owner_person_id` mezot olvassa. Ez a mezo **letezik** a `GarageDetailsResponse` semaban (sor 170) es a backend be is tolti a 648. sorban:
|
||||
|
||||
```python
|
||||
owner_person_id=owner_person.id if owner_person else None,
|
||||
```
|
||||
|
||||
**Lehetseges okok:**
|
||||
1. `owner.person` (a User-hez tartozo Person rekord) **None** az adatbazisban
|
||||
2. A `PersonBrief` sema (backend/app/schemas/organization.py:37-43) `id: Optional[int] = None` mezoje None, igy a szemely rekord ID-ja nem elerheto
|
||||
|
||||
**Megfigyeles:** A members[0].person objektumban sincs `id` mezo a valaszban, ami arra utal, hogy a `person.id` None a serializacio soran.
|
||||
|
||||
---
|
||||
|
||||
## Adatfolyam Diagram
|
||||
|
||||
```
|
||||
[Adatbazis] [Backend API] [Frontend]
|
||||
|
||||
User (id=79) --------> org.owner (elerheto) -----+
|
||||
| |
|
||||
v v
|
||||
Person (id=?) -------> owner_person -------------+
|
||||
|
|
||||
v
|
||||
GarageDetailsResponse
|
||||
+-- id: 43 OK
|
||||
+-- owner? -> NINCS
|
||||
+-- owner_user_id? -> NINCS
|
||||
+-- owner_person_id -> null
|
||||
|
|
||||
v
|
||||
garage.owner?.id -> N/A
|
||||
garage.owner_person_id -> N/A
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Javítási Terv
|
||||
|
||||
### 1. Backend modositas — `owner_user_id` hozzaadasa
|
||||
|
||||
**Fajl:** backend/app/api/v1/endpoints/admin_organizations.py
|
||||
|
||||
**A) Sema bovites (sor 170 korul):**
|
||||
```python
|
||||
# P0: Owner user ID for frontend display
|
||||
owner_user_id: Optional[int] = None
|
||||
```
|
||||
|
||||
**B) Valasz bovites (sor 648 korul, a return elott):**
|
||||
```python
|
||||
owner_user_id=owner.id if owner else None,
|
||||
```
|
||||
|
||||
### 2. Frontend modositas — Helyes mezohivatkozas
|
||||
|
||||
**Fajl:** frontend_admin/pages/garages/[id]/index.vue
|
||||
|
||||
**Sor 200 modositasa:**
|
||||
```vue
|
||||
<!-- HIBA: garage.owner?.id -> garage.owner nem letezik -->
|
||||
<span>User ID: <span>{{ garage.owner?.id || 'N/A' }}</span></span>
|
||||
|
||||
<!-- JAVITAS: garage.owner_user_id -> uj mezo -->
|
||||
<span>User ID: <span>{{ garage.owner_user_id ?? 'N/A' }}</span></span>
|
||||
```
|
||||
|
||||
**Sor 201 (maradhat):**
|
||||
```vue
|
||||
<span>Person ID: <span>{{ garage.owner_person_id ?? 'N/A' }}</span></span>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API Valasz (Javitas utan varhato)
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 43,
|
||||
"owner_user_id": 79,
|
||||
"owner_person_id": 38,
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Megjegyzes
|
||||
|
||||
A vizsgalt garazs (org_id=43) a `private_pro_v1` csomaggal rendelkezik:
|
||||
- max jarmu: 3
|
||||
- max garazs: 1
|
||||
- havi kredit: 0
|
||||
|
||||
A `members` tombben a tulajdonos (user_id=79) `OWNER` role-lal szerepel, es a `person` adatai (first_name, last_name, email, phone) rendelkezesre allnak, de a `person.id` nincs kitoltve a valaszban.
|
||||
Reference in New Issue
Block a user