Skip to content

Repository files navigation

Сервис уведомлений

Задача:

Создать сервис для отправки уведомлений пользователям. Пользователь может получать уведомления через:

  • Email
  • SMS
  • Telegram

Нужно обеспечить надежную доставку - если один способ не сработал, попробовать другой.


Технический требования:

  • Язык программирования:
    • Python 3.12
  • Фреймворк:
    • Django Rest Framework
  • ORM:
    • Django ORM
  • Хранение данных:
    • PostgreSQL 17
  • Очереди сообщений:
    • Celery + RabbitMQ

Запуск проекта:

  • Клонируйте проект:

    git clone https://github.com/annaputilovskaya/NotificationService.git
  • Создайте файл .env в корне проекта по образцу (Файл .env.example) и заполните его данными.

    Команда для Unix-подобных систем для копирования файла:

    cp .env.example .env
  • Убедитесь, что на Вашем устройстве установлен Docker.

    Проверка версии Docker:

    docker --version

    Если докер не установлен, осуществите его установку по инструкции с официального сайта

  • Осуществите сборку образов и запуск контейнеров:

    docker compose up -d --build

Структура базы данных:

image

Функционал и бизнес-логика

  1. Пользователи:
    • Регистрация с email и паролем
    • Получение токена для авторизация
    • ОБновление токена авторизации
image
  1. Получатели
    • Создание получателя
    • Просмотр получателя
    • Просмотр списка получателей
    • Изменение получтаеля
    • Удаление получателя
image
  1. Уведомления
    • Создание уведомления
    • Просмотр уведомления
    • Просмотр списка уведомлений
image

При создания уведомления создается задача по отправке уведомления. Происходит выбор стратегии отпраки уведомления в следующем порядке:

  • Email
  • Telegram
  • SMS

В случае, если первая стратегия не сработала, переходим ко второй, далее к третьей. Если ни одна страегия отправки для каких-либо получателей не сработала, повторяем попытку отправки для этих получателей через определенный временной интервал.


Сервис подходит для отправки разовых уведомлений. Если нужны повторяющиеся уведомления, возможна доработка.

В проекте настроено логирование отправки уведомлений с отправкой логов в консоль и с сохранением в файл.

Проведено ручное тестирование проекта с помощью Postman.

Автоматизированное тестирование не проводилось.

Для более подробной информации об API ознакомьтесь с интерактивной документацией.

Если проект запущен на localhost, пройдите по ссылке

About

Asynchronous notification service (DRF). Implements a multi-stage delivery strategy (Email ⮕ TG ⮕ SMS) with failover logic using Celery & RabbitMQ. Features a modular architecture with custom delivery strategies.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

Contributors

Languages