Backend / Core Services
Сервисы бэкенда
Криптография, Firebase Cloud Messaging и фоновые задачи планировщика.
Уведомления Firebase (FCM)
Файл: srv/app/services/notification_service.py
Отвечает за отправку пуш-уведомлений. Использует официальный firebase-admin SDK.
pythonsend_system_notification
async def send_system_notification(db: AsyncSession, receiver_id: int, plain_text: str):
# Метод отправки служебного / системного уведомления от имени системы (ID: 0).
# Сохраняет сообщение в БД и дублирует пушем получателю.
new_msg = models.Message(
sender_id=0,
receiver_id=receiver_id,
content=plain_text, # Системные уведомления не шифруются E2EE
message_type="text"
)
db.add(new_msg)
await db.commit()
# Отправка по сокету или FCM...
Фоновые задачи (APScheduler)
Файл: srv/app/tasks.py
Внутри жизненного цикла FastAPI (lifespan) запускается асинхронный планировщик задач AsyncIOScheduler. Раз в сутки выполняется задача очистки неактивных сессий:
pythondelete_old_sessions
async def delete_old_sessions(db: AsyncSession):
# Удаляет сессии устройств, которые не проявляли активности более 30 дней.
thirty_days_ago = datetime.utcnow() - timedelta(days=30)
stmt = delete(models.Session).where(models.Session.last_active < thirty_days_ago)
await db.execute(stmt)
await db.commit()
Сервис Google Drive
Для интеграции с Google Drive используется официальный клиент google-api-python-client. Аутентификация выполняется с использованием JSON файла ключа сервисного аккаунта Google Cloud. Все файлы хранятся в зашифрованном виде (расширение .enc) в одной общей папке, ID которой настроен в конфигурации бэкенда.