FastAPI User Management API
Features
- User registration & login
- JWT authentication (Bearer token)
- Role-based authorization (admin / user)
- Password hashing (bcrypt)
- Global error handler (consistent error response)
- SQLite database (file-based)
- SQLModel ORM
- Alembic migration
- Database seeder
- Swagger UI (OpenAPI)
Environment Configuration
Create .env file in project root:
APP_NAME="User Management API"
DATABASE_URL="sqlite:///./app.db"
JWT_SECRET="change-this-to-a-long-random-string"
JWT_ALGORITHM="HS256"
JWT_EXPIRE_MINUTES=60
DEBUG=true
Setup
- Buat venv
python -m venv .venv - Aktivasi venv
Atausource .venv/Scripts/activatesource .venv/bin/activate - Install dependencies
Notes:pip install -r requirements.txtbcryptmenggunakan versi dibawah 4 agar tidak error__about__ - Run application
fastapi dev app/main.py
Database
- Type: SQLite
- File: app.db
- Auto created
- Skema dimanage lewat
Alembic migration - Apply migration
alembic upgrade head - Seed initial admin
Default user adminpython -m app.seedemail: admin@mail.com password: admin123 role: admin
Authentication Flow
- Register (User pertama akan menjadi admin)<br/>
POST /auth/register
{ "name": "Admin", "email": "admin@mail.com", "password": "admin123" } - Login<br/>
POST /auth/login
{ "email": "admin@mail.com", "password": "admin123" } - Token
Authorization: Bearer <JWT_TOKEN>
Error Handler
- Validation Error
{ "message": "Validation error", "errors": { "email": ["Invalid email address"] } } - Business Error (
HTTPException){ "message": "Email already used", "errors": null } - Unhandled Error (500)
{ "message": "Internal server error", "errors": null }