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 которой настроен в конфигурации бэкенда.