landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# LandveX User Management API
|
||||
|
||||
FastAPI-baserad adminbackend för användarhantering med PostgreSQL.
|
||||
|
||||
## Funktioner
|
||||
|
||||
- **CRUD för användare** — skapa, läsa, uppdatera, ta bort
|
||||
- **Roller** — `admin`, `manager`, `analyst`, `viewer` med hierarkisk åtkomstkontroll
|
||||
- **JWT-auth** — access token + refresh token
|
||||
- **Lösenordshantering** — bcrypt-hashning, lösenordsbyte
|
||||
- **Inbjudningsflöde** — skicka inbjudan → acceptera via token → sätt lösenord
|
||||
- **Tenant-stöd** — flerklientsisolering
|
||||
- **Alembic-migrationer** — databasversionshantering
|
||||
|
||||
## Snabbstart
|
||||
|
||||
```bash
|
||||
cd landvex/user-management
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Kopiera env-fil
|
||||
cp .env.example .env
|
||||
|
||||
# Kör migrationer
|
||||
alembic upgrade head
|
||||
|
||||
# Starta server
|
||||
uvicorn app.main:app --reload
|
||||
```
|
||||
|
||||
## API-endpoints
|
||||
|
||||
| Metod | Endpoint | Beskrivning | Rollkrav |
|
||||
|-------|----------|-------------|----------|
|
||||
| POST | `/api/v1/auth/login` | Logga in | Öppen |
|
||||
| POST | `/api/v1/auth/refresh` | Förnya access token | Öppen |
|
||||
| GET | `/api/v1/auth/me` | Aktuell användare | Inloggad |
|
||||
| POST | `/api/v1/auth/change-password` | Byt lösenord | Inloggad |
|
||||
| GET | `/api/v1/users` | Lista användare | Manager+ |
|
||||
| GET | `/api/v1/users/{id}` | Hämta användare | Inloggad |
|
||||
| POST | `/api/v1/users` | Skapa användare | Admin+ |
|
||||
| PATCH | `/api/v1/users/{id}` | Uppdatera användare | Inloggad (egen eller lägre roll) |
|
||||
| DELETE | `/api/v1/users/{id}` | Ta bort användare | Admin+ |
|
||||
| GET | `/api/v1/invitations` | Lista inbjudningar | Manager+ |
|
||||
| POST | `/api/v1/invitations` | Skapa inbjudan | Admin+ |
|
||||
| GET | `/api/v1/invitations/validate/{token}` | Validera inbjudan | Öppen |
|
||||
| POST | `/api/v1/invitations/accept` | Acceptera inbjudan | Öppen |
|
||||
| DELETE | `/api/v1/invitations/{id}` | Återkalla inbjudan | Admin+ |
|
||||
| GET | `/api/v1/tenants` | Lista tenants | Admin+ |
|
||||
| GET | `/api/v1/tenants/{id}` | Hämta tenant | Admin+ |
|
||||
| POST | `/api/v1/tenants` | Skapa tenant | Admin+ |
|
||||
| PATCH | `/api/v1/tenants/{id}` | Uppdatera tenant | Admin+ |
|
||||
| DELETE | `/api/v1/tenants/{id}` | Ta bort tenant | Admin+ |
|
||||
|
||||
## Tester
|
||||
|
||||
```bash
|
||||
pytest tests/ -v
|
||||
```
|
||||
|
||||
## Docker
|
||||
|
||||
```bash
|
||||
docker build -t landvex-user-management .
|
||||
docker run -p 8000:8000 --env-file .env landvex-user-management
|
||||
```
|
||||
|
||||
## Arkitektur
|
||||
|
||||
```
|
||||
app/
|
||||
├── config.py # Inställningar (pydantic-settings)
|
||||
├── database.py # SQLAlchemy async engine + session
|
||||
├── models.py # SQLAlchemy-modeller (User, Tenant, Invitation)
|
||||
├── schemas.py # Pydantic request/response-scheman
|
||||
├── security.py # JWT, bcrypt, roll-hierarki
|
||||
├── dependencies.py # FastAPI dependencies (get_current_user, RoleChecker)
|
||||
├── main.py # FastAPI-app med routers
|
||||
├── routers/
|
||||
│ ├── auth.py # Login, refresh, change-password, me
|
||||
│ ├── users.py # User CRUD
|
||||
│ ├── invitations.py # Invitation-flöde
|
||||
│ └── tenants.py # Tenant CRUD
|
||||
└── services/
|
||||
├── user_service.py # Business logic: användare
|
||||
├── invitation_service.py # Business logic: inbjudningar
|
||||
└── tenant_service.py # Business logic: tenants
|
||||
|
||||
alembic/
|
||||
└── versions/ # Databas-migrationer
|
||||
|
||||
tests/
|
||||
├── conftest.py # Fixtures
|
||||
├── test_auth.py
|
||||
├── test_users.py
|
||||
└── test_invitations.py
|
||||
```
|
||||
|
||||
## Roll-hierarki
|
||||
|
||||
| Roll | Nivå | Kan hantera |
|
||||
|------|------|-------------|
|
||||
| admin | 3 | Alla roller |
|
||||
| manager | 2 | analyst, viewer |
|
||||
| analyst | 1 | viewer |
|
||||
| viewer | 0 | — |
|
||||
|
||||
En användare kan inte tilldela eller modifiera en användare med samma eller högre roll.
|
||||
Reference in New Issue
Block a user