5da7cc45305b9bb4339c30cf23d560a71b549ecc
reader-api (FastAPI + UV)
Shared backend API for both:
- Web app: reader
- Mobile app: reader-app
This project is Python-first (FastAPI), with production-focused Docker setup and healthcheck.
Stack
- Python 3.11+
- FastAPI
- UV (package manager / runner)
- PostgreSQL (structured data)
- MongoDB (chapter content + user recommendations)
API Base URL
- Local dev: http://localhost:8000
- Healthcheck: GET /api/health
Environment
Create .env from .env.example.
Required keys:
DATABASE_URL=postgresql://reader:reader@localhost:5432/reader
MONGODB_URI=mongodb://localhost:27017/reader
NEXTAUTH_SECRET=replace-with-strong-secret
MOBILE_JWT_SECRET=replace-with-strong-secret
# Comma-separated allowed Google OAuth client IDs
GOOGLE_CLIENT_ID=web-client-id.apps.googleusercontent.com,android-client-id.apps.googleusercontent.com
CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
APP_ENV=development
Dev Setup (UV)
- Install UV
curl -LsSf https://astral.sh/uv/install.sh | sh
- Sync dependencies
uv sync
- Run API in dev mode
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
- Verify health
curl http://localhost:8000/api/health
Docker Compose
Production-style API only (external DBs)
docker compose up -d --build api
Full local stack (API + Postgres + Mongo)
docker compose --profile localdb up -d --build
Implemented Endpoints
- GET /api/health
- POST /api/auth/mobile-login
- GET /api/user/profile
- GET/POST /api/user/bookmarks
- DELETE /api/user/bookmarks/{novelId}
- POST /api/user/reading-progress
- GET/POST /api/user/settings
- GET/POST/DELETE /api/user/recommendations
- GET /api/genres
- GET /api/novels/browse
- GET /api/novels/{idOrSlug}
- GET /api/truyen/{id}/chapters
- GET/POST /api/truyen/{id}/comments
- POST /api/truyen/{id}/rate
- GET /api/truyen/suggest
- GET /api/chapters/{chapterId}
Notes
- Web session auth is supported via NextAuth session cookies (next-auth.session-token and secure variants).
- Mobile auth is supported via Bearer JWT from /api/auth/mobile-login.
Description
Languages
Python
99%
JavaScript
0.8%
Dockerfile
0.2%