6.4 KiB
🐛 logic_spec: Quick-add provider cégek megjelennek a "Cégeim" menüben
Kártya: #266 Státusz: Tervezés kész, kivitelezés előtt Architect: Service Finder Rendszer-Architect
1. Probléma összefoglaló
A gyors szolgáltató felvétel (quick_add_provider) során létrejövő service_provider típusú szervezetek három problémát okoznak:
| # | Probléma | Hatás |
|---|---|---|
| 1 | "Cégeim" menüben való megjelenés | A service_provider típusú szervezetek megjelennek a felhasználó saját cégei között |
| 2 | Tulajdonos hiánya | A GET /my response nem adja vissza az owner_id mezőt; új provider-eknél owner_id=null lehet |
| 3 | Státusz megjelenítés | Bár a DB-ben status='pending_verification', a UI mást mutathat |
2. Érintett fájlok
Backend
backend/app/api/v1/endpoints/organizations.py:177—GET /mylekérdezésbackend/app/services/provider_service.py:468—quick_add_provider()függvény
Frontend
frontend/src/components/header/HeaderCompanySwitcher.vue:142—companyOrganizationsszűrőfrontend/src/stores/auth.ts:589—fetchMyOrganizations()hívás
3. Hibaelemzés részletesen
3.1. GET /my endpoint (organizations.py:183-186)
stmt = (
select(Organization)
.join(OrganizationMember)
.where(OrganizationMember.user_id == current_user.id)
)
Hiba: Nincs org_type szűrés. Minden szervezetet visszaad, ahol a user tag.
Response (193-206. sor): Nem adja vissza az owner_id mezőt.
3.2. HeaderCompanySwitcher.vue:142-146
const companyOrganizations = computed(() => {
return authStore.myOrganizations.filter(
(org) => org.org_type && org.org_type !== 'individual'
)
})
Hiba: Csak az individual típust szűri ki. A service_provider, service típusú szervezetek átmennek a szűrőn.
3.3. quick_add_provider() (provider_service.py:521-646)
- Létrehoz egy
Organization-torg_type='service_provider'-rel (526. sor) - Beállítja
owner_id=user_id(541. sor) - Létrehoz
OrganizationMember-etrole=OWNER-rel (638-646. sor) → ez miatt aGET /myvisszaadja a szervezetet
3.4. Adatbázis státusz
SELECT column_default FROM information_schema.columns
WHERE table_schema='fleet' AND table_name='organizations' AND column_name='status';
-- Result: 'pending_verification'::character varying
A DB default helyes. A service_providerek status='pending_verification', is_verified=false.
4. Javítási terv
4.1. Backend: GET /my endpoint szűrés
Fájl: backend/app/api/v1/endpoints/organizations.py:177
Módosítás: Adjunk hozzá org_type szűrést, hogy csak a valódi céges típusok (business, fleet_owner, individual) jelenjenek meg:
stmt = (
select(Organization)
.join(OrganizationMember)
.where(OrganizationMember.user_id == current_user.id)
.where(Organization.org_type.in_([OrgType.business, OrgType.fleet_owner, OrgType.individual]))
)
Alternatíva: Szűrjük ki a service_provider és service típusokat:
.where(Organization.org_type.notin_([OrgType.service_provider, OrgType.service]))
4.2. Frontend: HeaderCompanySwitcher szűrés (biztonsági réteg)
Fájl: frontend/src/components/header/HeaderCompanySwitcher.vue:142
Módosítás: Szűrjük ki a service_provider és service típusokat is:
const companyOrganizations = computed(() => {
return authStore.myOrganizations.filter(
(org) => org.org_type &&
org.org_type !== 'individual' &&
org.org_type !== 'service_provider' &&
org.org_type !== 'service'
)
})
4.3. Backend: GET /my response kiegészítése
Fájl: backend/app/api/v1/endpoints/organizations.py:193
Módosítás: Adjuk hozzá az owner_id mezőt a response-hoz:
return [
{
"organization_id": o.id,
"owner_id": o.owner_id, # NEW
"status": o.status,
# ... existing fields
}
for o in orgs
]
4.4. Backend: quick_add_provider OrganizationMember létrehozásának felülvizsgálata
Fájl: backend/app/services/provider_service.py:632
Megfontolandó: A quick_add_provider() létrehozza az OrganizationMember-et role=OWNER-rel. Ez lehetővé teszi a user számára a provider szerkesztését (access control miatt), de emiatt a provider megjelenik a "Cégeim" listában.
Megoldás: Ha a 4.1-es és 4.2-es javítások életbe lépnek, akkor a service_provider típusú szervezetek nem fognak megjelenni a "Cégeim" listában, így az OrganizationMember létrehozása továbbra is működhet az access control miatt.
4.5. Adatbázis: hiányzó owner_id-k pótlása
Megfontolandó: A régebbi service_providerek, amik robot által vagy más úton jöttek létre és nincs owner_id-jük, kapjanak alapértelmezett ownershipet vagy maradjanak owner nélkül.
5. Masterbook 2.0 illeszkedés
| Elv | Illeszkedés |
|---|---|
| Dual Entity | Az Organization (cég) és a User (technikai fiók) szétválasztása helyes. A service_provider típusú szervezeteket nem szabad a user saját cégeként kezelni. |
| DDD Szeparáció | A marketplace domain (service_provider) és a fleet domain (business/fleet_owner) adatai nem keveredhetnek a UI-n. |
| Access Control | Az OrganizationMember létrehozása továbbra is szükséges a provider szerkesztéséhez, de a UI-n való megjelenítést megfelelően kell szűrni. |
6. Tesztelési terv
- Unit teszt:
GET /myendpoint hívása service_provider típusú szervezettel → nem jelenik meg - Integrációs teszt: quick-add provider létrehozása → nem jelenik meg a Cégeim listában
- Frontend teszt: HeaderCompanySwitcher megjelenítése service_provider típusú org-gal → nem jelenik meg
- Adatbázis teszt: service_provider rekordok
statusésowner_idellenőrzése
7. Jóváhagyási pont
A fenti terv alapján a javítás kivitelezéséhez az alábbi módosítások szükségesek:
organizations.py:GET /myendpoint szűrésorg_typealapjánorganizations.py:owner_idhozzáadása a response-hozHeaderCompanySwitcher.vue:service_providerésservicekiszűrése- Adatbázis audit: hiányzó
owner_id-k ellenőrzése
Architect jóváhagyása: ⏳ Függőben