95 lines
2.7 KiB
Markdown
95 lines
2.7 KiB
Markdown
# Grateful Journal Backend API
|
|
|
|
FastAPI backend for Grateful Journal - a private-first gratitude journaling app.
|
|
|
|
**Port:** 8001
|
|
**API Docs:** http://localhost:8001/docs
|
|
|
|
## 📚 Documentation
|
|
|
|
- **[REFACTORING_SUMMARY.md](./REFACTORING_SUMMARY.md)** — Overview of database schema refactoring
|
|
- **[SCHEMA.md](./SCHEMA.md)** — Complete MongoDB schema reference with examples
|
|
- **[MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md)** — Step-by-step migration instructions
|
|
|
|
## Quick Start
|
|
|
|
### 1. Prerequisites
|
|
|
|
- MongoDB running on `mongodb://localhost:27017`
|
|
- Python 3.9+
|
|
|
|
See [MongoDB Setup Guide](../docs/MONGODB_SETUP.md) for installation.
|
|
|
|
### 2. Install & Run
|
|
|
|
```bash
|
|
# Create virtual environment
|
|
python3 -m venv venv
|
|
source venv/bin/activate # macOS/Linux
|
|
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
|
|
# Run API
|
|
python main.py
|
|
```
|
|
|
|
API starts on http://0.0.0.0:8001
|
|
|
|
### 3. Environment Variables
|
|
|
|
Copy `.env.example` to `.env`. Defaults work for local dev:
|
|
|
|
```env
|
|
MONGODB_URI=mongodb://localhost:27017
|
|
MONGODB_DB_NAME=grateful_journal
|
|
API_PORT=8001
|
|
ENVIRONMENT=development
|
|
FRONTEND_URL=http://localhost:8000
|
|
```
|
|
|
|
## Architecture
|
|
|
|
- **`main.py`** — FastAPI app, CORS, route registration, lifespan events
|
|
- **`config.py`** — Settings management (environment variables)
|
|
- **`db.py`** — MongoDB connection (singleton pattern)
|
|
- **`models.py`** — Pydantic data models (ObjectId support, encryption metadata)
|
|
- **`routers/`** — API endpoints
|
|
- `users.py` — User registration, profile updates, deletion
|
|
- `entries.py` — Journal entry CRUD, date filtering
|
|
|
|
## API Endpoints
|
|
|
|
### Users
|
|
|
|
```
|
|
POST /api/users/register Register user (after Firebase auth)
|
|
GET /api/users/by-email/{email} Get user by email
|
|
PUT /api/users/update/{user_id} Update user profile
|
|
DELETE /api/users/{user_id} Delete user & all data
|
|
```
|
|
|
|
### Entries
|
|
|
|
```
|
|
POST /api/entries/{user_id} Create new entry
|
|
GET /api/entries/{user_id} List entries (paginated)
|
|
GET /api/entries/{user_id}/{entry_id} Get single entry
|
|
PUT /api/entries/{user_id}/{entry_id} Update entry
|
|
DELETE /api/entries/{user_id}/{entry_id} Delete entry
|
|
GET /api/entries/{user_id}/date/{date} Get entries by date
|
|
```
|
|
|
|
## Authentication
|
|
|
|
- Frontend authenticates via **Firebase Google Auth**
|
|
- User ID is passed in URL path (no token validation yet; implementation depends on frontend requirements)
|
|
- Optional: Add Firebase token verification in middleware later
|
|
|
|
## Development Notes
|
|
|
|
- **CORS** enabled for `localhost:8000`
|
|
- **Async/await** used throughout for scalability
|
|
- **Pydantic** models for request/response validation
|
|
- **MongoDB** auto-creates collections on first write
|