Skip to content

Mикросервис уведомления пользователей

License

Notifications You must be signed in to change notification settings

Esposus/alertify

Repository files navigation

alertify

Mикросервис уведомления пользователей, кторый позволяет создавать запись уведомления в документе пользователя в MongoDB, отправлять email, а так же предоставлять листинг уведомлений из документа пользователя. Уведомления пользователей хранятся в поле в документе пользователя их максимальное число ограничено (лимит можно установить произвольный)

Для создания сервиса использовались:

  • веб-фреймворк FastAPI для создания RESTful API, предоставляющего эндпоинты для создания уведомлений, получения списка уведомлений и пометки уведомлений как прочитанных.
  • MongoDB для хранения данных:
  • отправка электронной почты с помощью встроенного модуля Python smtplib и настройка параметров SMTP (хост, порт, логин, пароль) через переменные окружения.
  • обработка возможных ошибок и возврат соответствующих HTTP-статусов.
  • использование переменных окружения для конфигурации приложения, таких как порт, параметры подключения к базе данных и SMTP-серверу.

Установка проекта из репозитория

  1. Клонируйте репозиторий и перейдите в него в командной строке:
git clone [email protected]:Esposus/alertify.git
  1. Перейдите в папку проекта:
cd alertify
  1. Заполните .env файл с переменными окружения по примеру:
echo DB_URI=mongodb://mongo:27017/mydatabase >> .env
echo PORT=8000 >> .env
echo EMAIL=<почта на которую будет приходить уведомление> >> .env
echo SMTP_HOST=smtp.gmail.com >> .env
echo SMTP_PORT= >> .env
echo SMTP_LOGIN= >> .env
echo SMTP_PASSWORD= >> .env
echo SMTP_EMAIL= >> .env
echo SMTP_NAME=Ace Place Alert >> .env
  1. Установите и запустите приложения в контейнерах:
docker-compose up

Пример уведомления в документе пользователя

{
    "id": "some_notification_id",
    "timestamp": 1698138241,
    "is_new": false,
    "user_id": "638f394d4b7243fc0399ea67",
    "key": "new_message",
    "target_id": "0399ea67638f394d4b7243fc",
    "data": {
        "some_field": "some_value"
    },
},

API Handlers:

[POST] /create создает новое уведомление.

Тело запроса:

  • user_id - строка на 24 символа (является ObjectID документа пользователя которому отправляется уведомление)
  • target_id - строка на 24 символа (является ObjectID документа сущности, к которой относится уведомление) (Может отсутствовать)
  • key - ключ уведомления enum
    • registration (Только отправит пользователю Email)
    • new_message (только создаст запись в документе пользователя)
    • new_post (только создаст запись в документе пользователя)
    • new_login (Создаст запись в документе пользователя и отправит email)
  • data - произвольный объект из пар ключ/значение (Может отсутствовать)

Пример тела запроса:

{
    "user_id": "638f394d4b7243fc0399ea67",
    "key": "registration",
}

Пример ответа

HTTP 201 Created

{
    "success": true,
}

[GET] /list производит листинг уведомлений пользователя.

query params

  • user_id [string] - идентификатор пользователя
  • skip [int] - кол-во уведомлений, которые следует пропустить
  • limit [int] - кол-во уведомлений которые следует вернуть

Пример ответа

HTTP 200 Ok

{
    "success": true,
    "data": {
        "elements": 23, // всего уведомлений
        "new": 12, // Кол-во непрочитанных уведомлений
        "request": {
            "user_id": "638f394d4b7243fc0399ea67",
            "skip": 0,
            "limit": 10,
        }
        "list": [
            {
                "id": "some_notification_id",
                "timestamp": 1698138241,
                "is_new": false,
                "user_id": "638f394d4b7243fc0399ea67",
                "key": "new_message",
                "target_id": "0399ea67638f394d4b7243fc",
                "data": {
                    "some_field": "some_value"
                },
            },
            ...
        ]
    }
}

[POST] /read создает отметку о прочтении уведомления.

query params

  • user_id [string] - идентификатор пользователя
  • notification_id [string] - Идентификатор уведомления

Пример ответа

HTTP 200 Ok

{
    "success": true,
}

Автор

Дмитрий Морозов
телеграм: @Vanadoo

About

Mикросервис уведомления пользователей

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published