# Milestone 2.2 — Conversation & Message Database Persistence

This directory documents the implementation of **Milestone 2, Step 2.2: Conversation & Message Database Persistence & State-Based Message Routing**.

---

## Documents in this folder

- **[01-conversation-message-persistence.md](file:///c:/Users/alokc/chatbot/backend/docs/learning/m2-2-conversation-message-persistence/01-conversation-message-persistence.md)** — Explains `conversations` vs. `messages` MongoDB schemas, single-conversation scoping, role definitions, and state-based routing (`RINGING`, `IN_CHAT`, `ENDED`).
- **[02-m2-2-revision.md](file:///c:/Users/alokc/chatbot/backend/docs/learning/m2-2-conversation-message-persistence/02-m2-2-revision.md)** — Short revision summary and test suite verification.

---

## How to Verify Milestone 2.2

1. **Run Pytest Test Suite:**
   ```bash
   cd backend
   .\venv\Scripts\python.exe -m pytest
   ```
   *Verifies 22 passing unit tests across CORS, Tenant, Session, Message, Handoff, and WebSocket test modules.*

2. **Manual Verification:**
   - **Start Backend:** `uvicorn app.main:app --reload --port 8000`
   - **Open Widget:** Open `widget/demo.html` in browser.
   - **Send Visitor Message (RINGING):** Returns `"Please wait while we connect you to an agent."`.
   - **Accept Session in Admin Dashboard:** Status switches to `IN_CHAT`.
   - **Send Visitor Message (IN_CHAT):** Returns `"Message delivered to agent."` and streams to dashboard.
   - **End Session:** Status switches to `ENDED`. Subsequent messages return `HTTP 400 Bad Request`.
