一個基於 FastAPI + MongoDB + SvelteKit 2.22 (Svelte 5) 的現代化即時聊天室應用程式,採用三層架構設計和 BFF 模式,具備完整的前後端實現。
本專案使用 AI 完成, 不少部份屬於 MVP 階段, 但我盡力作到最好.
登入畫面
聊天界面
聊天室種類以及是否設定密碼
邀請碼房間
自動產生邀請碼token
小鈴鐺通知訊息
自動轉跳到對應聊天室
瀏覽器通知
可上傳圖片或影片支援線上播放
可在聊天室搜尋訊息
訊息通知聲音以及瀏覽器推播
簡易儀表板
手機板UI
┌─────────────────────────────────────────────────┐
│ Presentation Layer │
│ (路由層) │
│ FastAPI Routers & WebSocket │
├─────────────────────────────────────────────────┤
│ Business Layer │
│ (服務層) │
│ Business Logic & Rules │
├─────────────────────────────────────────────────┤
│ Data Layer │
│ (資料存取層)
│ Repository Pattern & MongoDB │
└─────────────────────────────────────────────────┘
📖 詳細架構說明請參閱 technical-reference.md
核心技術:
三層架構優勢:
┌─────────────────────┐
│ 瀏覽器/客戶端 │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ SvelteKit BFF 層 ← 前端服務器
│ (/src/routes/api) │
└──────────┬──────────┘
│
┌──────────▼──────────
│ FastAPI 後端 │ ← 後端服務器
│ (真實 API) │
└─────────────────────
📖 詳細 BFF 架構說明請參閱 technical-reference.md
核心技術:
BFF 架構優勢:
docker-compose up -d
mongo-express 是查看 MongoDB GUI 的工具,
可直接訪問 http://0.0.0.0:8081/
# 切換到後端目錄
cd backend
# 建立你自己的環境 python3.13
# 安裝相關套件
pip install -r requirements.txt
# 使用指定的 Python 環境
fastapi dev app/main.py
API 文檔 http://0.0.0.0:8000/docs
# 切換到後端目錄
cd frontend
# 安裝相關套件
npm install
# 執行
npm run dev
前端將運行在 http://localhost:5173
這邊可不做, 用預設的也可以
複製環境變數範例並設定後端 API 地址:
cd frontend
cp .env.example .env
npm run dev
- 啟動開發伺服器npm run build
- 建構生產版本npm run check
- 檢查 TypeScript 和 Svelte 程式碼├── backend/ # FastAPI 後端
│ ├── app/
│ │ ├── auth/ # JWT 認證系統
│ │ ├── cache/ # Redis 快取管理
│ │ ├── core/ # 依賴注入容器
│ │ ├── database/ # MongoDB 連線管理
│ │ ├── middleware/ # 中間件 (錯誤處理、安全)
│ │ ├── models/ # Pydantic 資料模型
│ │ ├── repositories/ # 資料存取層
│ │ ├── routers/ # API 路由端點 (路由層)
│ │ ├── services/ # 業務邏輯層 (服務層)
│ │ ├── utils/ # 工具函數
│ │ └── websocket/ # WebSocket 管理
│ └── tests/ # 70+ 測試檔案
├── frontend/ # SvelteKit 前端
│ ├── src/
│ │ ├── lib/ # 核心功能庫
│ │ │ ├── api/ # API 客戶端
│ │ │ ├── components/ # UI 組件
│ │ │ ├── stores/ # Svelte 狀態管理
│ │ │ ├── websocket/ # WebSocket 客戶端
│ │ │ └── utils/ # 前端工具
│ │ └── routes/ # SvelteKit 路由
│ │ ├── (app)/ # 應用頁面
│ │ ├── (auth)/ # 認證頁面
│ │ └── api/ # BFF API 路由
└── docs/ # 專案文檔
└── technical-reference.md # 技術參考
如果要測試手機板本, 啟動的時候要多設定 --host 0.0.0.0
cd backend
# 使用 --host 0.0.0.0 讓後端接受所有網路介面的連接
fastapi dev app/main.py --host 0.0.0.0
cd frontend
npm run dev
# Vite 已配置 host: true,會自動監聽所有網路介面
系統會自動根據訪問的地址決定 WebSocket 和 API 連接:
localhost:5173
訪問 → 連接到 ws://localhost:8000
192.168.x.x:5173
訪問 → 連接到 ws://192.168.x.x:8000
backend/app/config.py
)# 開發環境允許所有主機
DEBUG: bool = True
ALLOWED_HOSTS: str = "*"
CORS_ORIGINS: str = "*"
frontend/vite.config.ts
)server: {
host: true, // 監聽所有網路介面
port: 5173
}
# 切換到後端目錄
cd backend
# 安裝相關套件
pip install -r requirements-test.txt
pytest tests/ -v --cov=app --cov-report=html
POST /api/auth/register
- 用戶註冊POST /api/auth/login
- 用戶登入GET /api/auth/me
- 獲取用戶資訊GET /api/rooms/
- 獲取房間列表POST /api/rooms/
- 創建房間POST /api/rooms/{id}/join
- 加入房間GET /api/rooms/{id}/members
- 獲取房間成員GET /api/messages/room/{room_id}
- 獲取房間訊息POST /api/messages/
- 發送訊息POST /api/messages/room/{room_id}/search
- 搜尋訊息POST /api/files/upload
- 檔案上傳POST /api/files/upload/image
- 圖片上傳GET /api/files/thumbnail/{filename}
- 獲取縮圖WS /ws/{room_id}
- 房間即時通訊連線MIT License - 開源且免費使用
歡迎提交 Issue 和 Pull Request!
⭐ 如果這個專案對您有幫助,請給一個 Star! ⭐