# MongoDB Setup Guide for Grateful Journal ## Prerequisites - MongoDB installed on your system - Python 3.9+ - pip package manager ## Installation Steps ### 1. Install MongoDB #### macOS (using Homebrew) ```bash brew tap mongodb/brew brew install mongodb-community ``` #### Linux (Ubuntu/Debian) ```bash 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 and run the installer from [MongoDB Community Download](https://www.mongodb.com/try/download/community) ### 2. Start MongoDB Server #### macOS / Linux ```bash # Start as a service (recommended) brew services start mongodb-community # Or run directly mongod --config /usr/local/etc/mongod.conf ``` #### Windows MongoDB should run as a service. If not: ```bash net start MongoDB ``` ### 3. Verify MongoDB is Running ```bash mongosh ``` If you see a connection prompt, MongoDB is running successfully. ### 4. Set up Python Backend Environment Navigate to the backend directory: ```bash cd backend ``` Create a virtual environment: ```bash python3 -m venv venv source venv/bin/activate # macOS/Linux # or venv\Scripts\activate # Windows ``` Install dependencies: ```bash pip install -r requirements.txt ``` ### 5. Configure Environment Variables Copy the example env file: ```bash cp .env.example .env ``` Edit `.env` with your settings (defaults work for local development): ```env MONGODB_URI=mongodb://localhost:27017 MONGODB_DB_NAME=grateful_journal API_PORT=8001 ENVIRONMENT=development FRONTEND_URL=http://localhost:8000 ``` ### 6. Run the FastAPI Server ```bash python main.py ``` You should see: ``` ✓ Connected to MongoDB: grateful_journal INFO: Uvicorn running on http://0.0.0.0:8001 ``` ### 7. Access API Documentation Open your browser and go to: - **Swagger UI**: http://localhost:8001/docs - **ReDoc**: http://localhost:8001/redoc - **Health Check**: http://localhost:8001/health ## MongoDB Collections Overview The following collections will be created automatically on first write: ### `users` Stores user profiles after Firebase Google Auth. ```json { "_id": ObjectId, "email": "user@example.com", "displayName": "John Doe", "photoURL": "https://...", "theme": "light", "createdAt": ISODate, "updatedAt": ISODate } ``` ### `entries` Stores journal entries. ```json { "_id": ObjectId, "userId": "user_id_string", "title": "Today's thoughts", "content": "Long-form journal content...", "mood": "grateful", "tags": ["reflection", "gratitude"], "isPublic": false, "createdAt": ISODate, "updatedAt": ISODate } ``` ### `settings` Stores user preferences and settings. ```json { "_id": ObjectId, "userId": "user_id_string", "notifications": true, "emailNotifications": false, "theme": "light", "language": "en", "updatedAt": ISODate } ``` ## API Endpoints ### Users - `POST /api/users/register` — Register user after Firebase auth - `GET /api/users/by-email/{email}` — Get user profile by email - `PUT /api/users/update/{user_id}` — Update user profile - `DELETE /api/users/{user_id}` — Delete user and associated data ### Entries - `POST /api/entries/{user_id}` — Create new entry - `GET /api/entries/{user_id}` — Get all entries (paginated) - `GET /api/entries/{user_id}/{entry_id}` — Get specific 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_str}` — Get entries by date (YYYY-MM-DD) ## Troubleshooting **MongoDB connection refused** - Check that MongoDB service is running: `brew services list` (macOS) - Verify port 27017 is not blocked **ModuleNotFoundError: pymongo** - Ensure virtual environment is activated - Run `pip install -r requirements.txt` again **CORS errors in frontend** - Check `FRONTEND_URL` in `.env` matches your frontend URL - Default allows http://localhost:8000 ## Next Steps Once MongoDB and FastAPI are running: 1. Frontend calls Firebase Google Auth 2. Frontend sends auth token to `/api/users/register` 3. Backend creates user in MongoDB 4. Frontend can now call `/api/entries/*` endpoints with user_id