Files
grateful-journal/BACKEND_QUICKSTART.md
2026-03-04 12:23:13 +05:30

242 lines
5.9 KiB
Markdown

# MongoDB & FastAPI Backend Setup - Quick Start
## What's Been Set Up
**Backend directory structure** (`/backend`)
**FastAPI application** (main.py with routes, CORS, lifecycle)
**MongoDB connection** (config.py, db.py)
**Pydantic models** (User, JournalEntry, UserSettings)
**API routes** (users.py, entries.py)
**Environment configuration** (.env.example)
**Documentation** (README.md, MONGODB_SETUP.md)
**Firebase auth preserved** (Google sign-in, no Firestore)
---
## How to Start MongoDB
### 1. Install MongoDB (if not already installed)
```bash
# macOS
brew tap mongodb/brew
brew install mongodb-community
# Linux (Ubuntu)
curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" \
| sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
# Windows: Download from https://www.mongodb.com/try/download/community
```
### 2. Start MongoDB Service
```bash
# macOS
brew services start mongodb-community
# Linux
sudo systemctl start mongod
# Windows
net start MongoDB
# Verify it's running
mongosh # Should connect successfully
```
---
## How to Start FastAPI Backend
### 1. Navigate to backend directory
```bash
cd backend
```
### 2. Create Python virtual environment
```bash
python3 -m venv venv
# Activate it
source venv/bin/activate # macOS/Linux
# or
venv\Scripts\activate # Windows
```
### 3. Install dependencies
```bash
pip install -r requirements.txt
```
### 4. Configure environment (optional)
```bash
cp .env.example .env
# Edit .env if you need to change defaults
```
### 5. Start the API server
```bash
python main.py
```
You should see:
```
✓ Connected to MongoDB: grateful_journal
INFO: Uvicorn running on http://0.0.0.0:8001
```
### 6. Access API Documentation
Open in browser:
- **Interactive API Docs**: http://localhost:8001/docs
- **Alternative Docs**: http://localhost:8001/redoc
- **Health Check**: http://localhost:8001/health
---
## Complete Startup (All Services)
### Terminal 1: Start MongoDB
```bash
brew services start mongodb-community
mongosh # Verify connection
```
### Terminal 2: Start Frontend
```bash
npm run dev -- --port 8000
```
### Terminal 3: Start Backend
```bash
cd backend
source venv/bin/activate
python main.py
```
Now you have:
- **Frontend**: http://localhost:8000
- **Backend**: http://localhost:8001
- **MongoDB**: localhost:27017
---
## API Endpoints Ready to Use
### User Management
- `POST /api/users/register` — Register user after Firebase auth
- `GET /api/users/by-email/{email}` — Fetch user profile
- `PUT /api/users/update/{user_id}` — Update profile
- `DELETE /api/users/{user_id}` — Delete account & data
### Journal Entries
- `POST /api/entries/{user_id}` — Create entry
- `GET /api/entries/{user_id}` — List entries (paginated)
- `GET /api/entries/{user_id}/{entry_id}` — Get 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/{YYYY-MM-DD}` — Entries by date
---
## Authentication Flow
1. **Frontend**: User clicks "Sign in with Google"
2. **Firebase**: Returns auth token + user info (email, displayName, photoURL)
3. **Frontend**: Calls `POST /api/users/register` with user data
4. **Backend**: Stores user in MongoDB, returns user ID
5. **Frontend**: Uses user ID for all subsequent API calls
---
## File Structure
```
grateful-journal/
├── backend/ # NEW: FastAPI backend
│ ├── main.py # FastAPI app
│ ├── config.py # Settings
│ ├── db.py # MongoDB connection
│ ├── models.py # Pydantic models
│ ├── requirements.txt # Python dependencies
│ ├── .env.example # Environment template
│ ├── README.md # Backend docs
│ └── routers/ # API routes
│ ├── users.py
│ └── entries.py
├── src/ # Frontend (existing)
│ └── lib/
│ └── firebase.ts # Auth only (Firestore removed)
├── docs/
│ ├── FIRESTORE_SETUP.md # (old, keep for reference)
│ └── MONGODB_SETUP.md # NEW: MongoDB setup guide
└── project-context.md # Updated with backend info
```
---
## Removed Files (Firestore)
-`src/lib/firestoreService.ts` (removed — use MongoDB API instead)
-`src/lib/firestoreConfig.ts` (removed — use MongoDB API instead)
---
## Next Steps
1. **Start MongoDB** (see above)
2. **Start FastAPI** (see above)
3. **Connect Frontend to Backend**
- Update `src/contexts/AuthContext.tsx` to call `/api/users/register`
- Create hooks to fetch/save entries from `/api/entries/*`
- Pass Firebase user ID to all API calls
4. **Test in API Docs** (http://localhost:8001/docs)
- Try creating a user
- Try creating an entry
- Try fetching entries
---
## Troubleshooting
**"MongoDB connection refused"**
- Is the service running? `brew services list` (macOS) or `systemctl status mongod` (Linux)
- Check port 27017 is free: `lsof -i :27017`
**"ModuleNotFoundError: pymongo"**
- Is venv activated? Run `. venv/bin/activate` again
- Did you run `pip install -r requirements.txt`?
**"CORS error in browser console"**
- Backend running on 8001? Check `http://localhost:8001/docs`
- Frontend URL in `.env`? Should be `http://localhost:8000`
---
For detailed setup instructions, see:
- [MONGODB_SETUP.md](./docs/MONGODB_SETUP.md) — Full MongoDB installation & configuration
- [backend/README.md](./backend/README.md) — Backend architecture & endpoints
- [project-context.md](./project-context.md) — Implementation rules & conventions