- تمام وابستگیهای SQLAlchemy، Alembic و aiosqlite حذف شدند
- فایل
alembic.iniو پوشهapp/modelsحذف شدند - متغیر محیطی
DATABASE_URLاز تمام فایلهای config حذف شد
اکنون تمام دادهها در MongoDB ذخیره میشوند:
- پیامها - Collection:
messages - رویدادها - Collection:
events - اطلاعات Session - Collection:
telegram_sessions
{
"_id": "ObjectId",
"agent_id": 123,
"session_id": "uuid-string",
"session_file": "session_file_name",
"phone": "+989123456789",
"user_id": 123456789,
"is_active": true,
"connected_at": "2024-01-01T00:00:00",
"last_activity": "2024-01-01T00:00:00",
"metadata": {},
"created_at": "2024-01-01T00:00:00"
}{
"_id": "ObjectId",
"session_id": "uuid-string",
"agent_id": 123,
"message_id": 123,
"chat_id": 456,
"sender_id": 789,
"text": "message text",
"date": "2024-01-01T00:00:00",
"is_outgoing": false,
"media_type": "photo",
"reply_to_msg_id": null,
"metadata": {},
"created_at": "2024-01-01T00:00:00"
}{
"_id": "ObjectId",
"session_id": "uuid-string",
"agent_id": 123,
"event_type": "message.new",
"chat_id": 456,
"data": {},
"created_at": "2024-01-01T00:00:00"
}فایل app/utils/session_manager.py به طور کامل بازنویسی شد:
- تمام متدها اکنون
asyncهستند - به جای SQLAlchemy از MongoDB استفاده میکند
- به جای مدلهای SQLAlchemy، dictionary برمیگرداند
قبل:
session = session_manager.get_session_by_id(session_id)
phone = session.phoneبعد:
session = await session_manager.get_session_by_id(session_id)
phone = session.get("phone")تمام فراخوانیهای session_manager در app/api/routes.py به async/await تبدیل شدند:
session_manager.method()→await session_manager.method()- دسترسی به فیلدها:
session.field→session.get("field")یاsession["field"]
سرویس جامع MongoDB در app/services/mongodb.py افزوده شد با قابلیتهای:
- مدیریت پیامها و رویدادها
- مدیریت session ها
- آمار و گزارشگیری
- ساخت index های بهینه
فایل .env:
# MongoDB
MONGODB_URI=mongodb://admin:password@mongodb:27017
MONGODB_DB=telegram_crawler
# Redis
REDIS_URL=redis://redis:6379/0
# Telegram API
TELEGRAM_API_ID=your_api_id
TELEGRAM_API_HASH=your_api_hash
# Security
API_SECRET_KEY=your-secret-key-heredocker-compose up -dسرویسهای زیر اجرا میشوند:
app: سرویس FastAPI (پورت 8000)mongodb: MongoDB (پورت 27017)redis: Redis (پورت 6379)
docker-compose logs -f appdocker exec -it telegram-mongodb mongosh -u admin -p passwordهمه endpoint ها بدون تغییر باقی ماندهاند:
POST /request-qr- درخواست QR CodePOST /request-phone-code- درخواست کد با شمارهPOST /verify-code- تایید کدPOST /verify-password- تایید رمز عبورPOST /disconnect- قطع اتصالGET /status/{session_id}- وضعیت sessionPOST /send-message- ارسال پیامGET /messages- دریافت پیامهاGET /chat-history/{session_id}/{chat_id}- تاریخچه چتGET /agent-stats/{agent_id}- آمار agent
# درخواست QR Code
curl -X POST http://localhost:8000/request-qr \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"agent_id": 1}'
# دریافت پیامها
curl -X GET "http://localhost:8000/messages?session_id=xxx&limit=10" \
-H "X-API-Key: your-api-key"- مقیاسپذیری: بهتر برای حجم بالای داده
- کارایی: Index های بهینه برای query های سریع
- انعطافپذیری: Schema انعطافپذیر برای metadata
- توزیع: قابلیت توزیع در چند سرور
- یکپارچگی: یک دیتابیس برای تمام دادهها
- Session Files: فایلهای session همچنان در
/app/sessionsذخیره میشوند (برای Telethon) - Redis: همچنان برای caching استفاده میشود
- Async: تمام عملیات MongoDB و session_manager اکنون async هستند
- Dictionary Access: session records اکنون dictionary هستند نه SQLAlchemy model
docker exec telegram-mongodb mongodump \
-u admin -p password \
--db telegram_crawler \
--out /backupdocker exec telegram-mongodb mongorestore \
-u admin -p password \
--db telegram_crawler \
/backup/telegram_crawler