Mикросервис уведомления пользователей, кторый позволяет создавать запись уведомления в документе пользователя в MongoDB, отправлять email, а так же предоставлять листинг уведомлений из документа пользователя. Уведомления пользователей хранятся в поле в документе пользователя их максимальное число ограничено (лимит можно установить произвольный)
Для создания сервиса использовались:
- веб-фреймворк FastAPI для создания RESTful API, предоставляющего эндпоинты для создания уведомлений, получения списка уведомлений и пометки уведомлений как прочитанных.
- MongoDB для хранения данных:
- отправка электронной почты с помощью встроенного модуля Python smtplib и настройка параметров SMTP (хост, порт, логин, пароль) через переменные окружения.
- обработка возможных ошибок и возврат соответствующих HTTP-статусов.
- использование переменных окружения для конфигурации приложения, таких как порт, параметры подключения к базе данных и SMTP-серверу.
- Клонируйте репозиторий и перейдите в него в командной строке:
git clone [email protected]:Esposus/alertify.git
- Перейдите в папку проекта:
cd alertify
- Заполните
.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
- Установите и запустите приложения в контейнерах:
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"
},
},
- 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,
}
- 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"
},
},
...
]
}
}
- user_id [string] - идентификатор пользователя
- notification_id [string] - Идентификатор уведомления
HTTP 200 Ok
{
"success": true,
}
Дмитрий Морозов
телеграм: @Vanadoo