Files
service-finder/docs/V01_gemini/03_Dev_Environment_Runbook.md
2026-02-10 21:11:44 +00:00

2.0 KiB

(Fejlesztői kézikönyv.)

👨‍💻 DEVELOPER RUNBOOK

🚀 Indítás

cd /opt/docker/dev/service_finder
docker compose up -d

🔍 Logok és Debug

    API log: docker logs -f service_finder_api

    Frontend log: docker logs -f service_finder_frontend

    DB Console: docker exec -it shared-postgres psql -U kincses -d service_finder

⚠️ Known Pitfalls (Hibaelhárítás)

    API URL: A frontend .env fájljában a VITE_API_BASE_URL nem lehet localhost, ha konténerben fut. Használd a belső IP-t vagy domain-t.

    Login 404: A /api/v1/users/me végpontot a backend routerben regisztrálni kell (jelenleg hiányzik vagy path mismatch van).

    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())
"