-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
161 additions
and
167 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,43 @@ | ||
# alertify | ||
Mикросервис уведомления пользователей | ||
Mикросервис уведомления пользователей, кторый позволяет создавать запись уведомления в документе пользователя в MongoDB, отправлять email, а так же предоставлять листинг уведомлений из документа пользователя. | ||
Уведомления пользователей хранятся в поле в документе пользователя их максимальное число ограничено (лимит можно установить произвольный) | ||
|
||
# Тестовое задание. | ||
Для создания сервиса использовались: | ||
|
||
Написать микросервис уведомления пользователей. | ||
- веб-фреймворк FastAPI для создания RESTful API, предоставляющего эндпоинты для создания уведомлений, получения списка уведомлений и пометки уведомлений как прочитанных. | ||
- MongoDB для хранения данных: | ||
- отправка электронной почты с помощью встроенного модуля Python smtplib и настройка параметров SMTP (хост, порт, логин, пароль) через переменные окружения. | ||
- обработка возможных ошибок и возврат соответствующих HTTP-статусов. | ||
- использование переменных окружения для конфигурации приложения, таких как порт, параметры подключения к базе данных и SMTP-серверу. | ||
|
||
Микросервис должен представлять из себя RestAPI сервер, который позволяет создавать запись уведомления в документе пользователя в MongoDB, отправлять email, а так же предоставлять листинг уведомлений из документа пользователя. | ||
Установка проекта из репозитория | ||
---------- | ||
|
||
Уведомления пользователей должны храниться в поле в документе пользователя и их максимальное кол-во должно быть ограничено (лимит можно установить произвольный) | ||
1. Клонируйте репозиторий и перейдите в него в командной строке: | ||
```bash | ||
git clone [email protected]:Esposus/alertify.git | ||
``` | ||
2. Перейдите в папку проекта: | ||
```bash | ||
cd alertify | ||
``` | ||
3. Заполните ```.env``` файл с переменными окружения по примеру: | ||
```bash | ||
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 | ||
``` | ||
4. Установите и запустите приложения в контейнерах: | ||
```bash | ||
docker-compose build & docker-compose up | ||
``` | ||
|
||
При тестировании отправки Email отпраляйте key от создаваемого уведомления. | ||
|
||
#### Пример уведомления в документе пользователя | ||
|
||
|
@@ -27,20 +55,6 @@ Mикросервис уведомления пользователей | |
}, | ||
``` | ||
|
||
Для теста в случае отсутствия пользователя следует создать новый профиль с email, который задан через параметры. | ||
|
||
## Переменные окружения, через которые конфигурируется сервис | ||
|
||
- PORT - порт на котором будет работать приложение | ||
- EMAIL - тестовый email | ||
- DB_URI - строка для подключения к mongoDB | ||
- SMTP_HOST - хост smtp сервера | ||
- SMTP_PORT - порт smtp сервера | ||
- SMTP_LOGIN - логин пользователя | ||
- SMTP_PASSWORD - пароль пользователя | ||
- SMTP_EMAIL - email с которого будет отправлено сообщение | ||
- SMTP_NAME - Имя отображаемое у получателя письма | ||
|
||
## API Handlers: | ||
|
||
### [POST] /create создает новое уведомление. | ||
|
@@ -130,18 +144,6 @@ HTTP 200 Ok | |
"success": true, | ||
} | ||
``` | ||
|
||
## На ваше усмотрение | ||
|
||
Вам позволено решать указанные выше задачи тем способом, который вы сочтете наиболее подходящим. Кратко опишите свой подход в решении задач в Readme файле в репозитории. | ||
|
||
## Результат выполнения задания | ||
|
||
Данное задание будет считаться выполненным при условии размещения кода и Dockerfile'a в репозитории на github.com. | ||
|
||
Прошу отправить результат выполнения задания на Email: | ||
[email protected] | ||
|
||
в теме письма укажите: "Тестовое задание" | ||
|
||
в теле письма приложите ссылку на свой профиль на hh.ru и репозиторий на github с выполненым тестовым заданием. | ||
## Автор | ||
[Дмитрий Морозов](https://github.com/Esposus "GitHub аккаунт") | ||
*телеграм: [@Vanadoo](https://t.me/Vanadoo "ссылка на телеграм")* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,10 +2,12 @@ | |
|
||
|
||
class Settings(BaseSettings): | ||
app_title: str = 'Alertify' | ||
description: str = 'Написать микросервис уведомления пользователей' | ||
model_config = SettingsConfigDict(env_file='.env') | ||
|
||
PORT: int # uvicorn по дефолту запускает на 8000 порту, не будем ничего менять # noqa | ||
EMAIL: str # тестовый емейл на который отправляется сообщение взят у тг бота Senthy Email https://t.me/SenthyBot # noqa | ||
PORT: int | ||
EMAIL: str | ||
DB_URI: str | ||
SMTP_HOST: str | ||
SMTP_PORT: int | ||
|
@@ -16,44 +18,3 @@ class Settings(BaseSettings): | |
|
||
|
||
settings = Settings() | ||
|
||
# from fastapi import FastAPI | ||
# from starlette.responses import JSONResponse | ||
# from fastapi_mail import FastMail, MessageSchema, ConnectionConfig, MessageType | ||
# from pydantic import EmailStr, BaseModel | ||
# from typing import List | ||
|
||
# class EmailSchema(BaseModel): | ||
# email: List[EmailStr] | ||
|
||
|
||
# conf = ConnectionConfig( | ||
# MAIL_USERNAME = "username", | ||
# MAIL_PASSWORD = "**********", | ||
# MAIL_FROM = "[email protected]", | ||
# MAIL_PORT = 587, | ||
# MAIL_SERVER = "mail server", | ||
# MAIL_FROM_NAME="Desired Name", | ||
# MAIL_STARTTLS = True, | ||
# MAIL_SSL_TLS = False, | ||
# USE_CREDENTIALS = True, | ||
# VALIDATE_CERTS = True | ||
# ) | ||
|
||
# app = FastAPI() | ||
|
||
|
||
|
||
# @app.post("/email") | ||
# async def simple_send(email: EmailSchema) -> JSONResponse: | ||
# html = """<p>Hi this test mail, thanks for using Fastapi-mail</p> """ | ||
|
||
# message = MessageSchema( | ||
# subject="Fastapi-Mail module", | ||
# recipients=email.dict().get("email"), | ||
# body=html, | ||
# subtype=MessageType.html) | ||
|
||
# fm = FastMail(conf) | ||
# await fm.send_message(message) | ||
# return JSONResponse(status_code=200, content={"message": "email has been sent"}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.