mongog setup
This commit is contained in:
219
docs/MONGODB_SETUP.md
Normal file
219
docs/MONGODB_SETUP.md
Normal file
@@ -0,0 +1,219 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user