mongog setup

This commit is contained in:
2026-03-04 12:23:13 +05:30
parent bed32863da
commit a9eaa7599c
32 changed files with 2577 additions and 670 deletions

219
docs/MONGODB_SETUP.md Normal file
View 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