Files
service-finder/plans/logic_spec_provider_cegeim_bugfix.md
2026-06-17 22:07:55 +00:00

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:177GET /my lekérdezés
  • backend/app/services/provider_service.py:468quick_add_provider() függvény

Frontend

  • frontend/src/components/header/HeaderCompanySwitcher.vue:142companyOrganizations szűrő
  • frontend/src/stores/auth.ts:589fetchMyOrganizations() 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-t org_type='service_provider'-rel (526. sor)
  • Beállítja owner_id=user_id (541. sor)
  • Létrehoz OrganizationMember-et role=OWNER-rel (638-646. sor) → ez miatt a GET /my visszaadja 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

  1. Unit teszt: GET /my endpoint hívása service_provider típusú szervezettel → nem jelenik meg
  2. Integrációs teszt: quick-add provider létrehozása → nem jelenik meg a Cégeim listában
  3. Frontend teszt: HeaderCompanySwitcher megjelenítése service_provider típusú org-gal → nem jelenik meg
  4. Adatbázis teszt: service_provider rekordok status és owner_id ellenő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 /my endpoint szűrés org_type alapján
  • organizations.py: owner_id hozzáadása a response-hoz
  • HeaderCompanySwitcher.vue: service_provider és service kiszűrése
  • Adatbázis audit: hiányzó owner_id-k ellenőrzése

Architect jóváhagyása: Függőben