Сделать web приложение, оно же сайт, где пользователь вводит название города, и получает прогноз погоды в этом городе на ближайшее время.
- Вывод данных (прогноза погоды) должен быть в удобно читаемом формате.
- Веб фреймворк можно использовать любой.
- api для погоды: https://open-meteo.com/ (можно использовать какое-нибудь другое, если вам удобнее)
- написаны тесты
- всё это помещено в докер контейнер
- при повторном посещении сайта будет предложено посмотреть погоду в городе, в котором пользователь уже смотрел ранее
- будет сохраняться история поиска для каждого пользователя, и будет API, показывающее сколько раз вводили какой город
- корректность работы
- удобство использования
- качество кода
в README.md просьба указать что из выше перечисленного было сделанно, пару слов о использованных технологиях, и как это всё запустить
Сделанное задание просьба опубликовать на github и отправить ссылку в бот.
- Для возможности сохранения истории посиска пользователя созздан роутер Users с регистрацией логином и логаутом пользователя c использованием JWT токенов
- Для оптимизации хранения истории поиска поользователя - создана таблица City - для хранения уникальных названий городов при условии что запрос прогноза погоды в городе был выполнен успешно, и таблица связи многие ко многим с уникальностью на ID пользователя и ID города (это даст возможность сохранить только один запрос город-пользователь. В истории поиска пользователя город будет сохранен, но только один раз, даже если пользователь будет делать много запросов по этому городу)
-
Реализация на фреймворке FastAPI
-
Использовался сервис https://home.openweathermap.org/users/sign_in Для пользования этим сервисом необходимо зарегистрироваться на сайте и получиит API_KEY, который будет активирован в течении нескольких часов после регистрации
-
Создана утилита, которая посылает запрос на сервис с учетом данных введенных пользователем и при удачном запросе генерирует ответ в формате json
- Пользователь вводит название города и отправляет post запрос на сервер приложения. С сервера приложения идет запрос в базу данных и если город есть (в бд хранятся только уникальные имена городов по которым запрос погоды был выполнен успешно) - то сразу идет запрос на сервер и новый город не создается а в модель пользователя в поле связи города добавляется новый город если его там еще нетю Если город не найден в базе так же отпралятся запрос на сервер получения погоды - и если ответ сервера успешниы в базе данных создается новый город и фиксируется в истории поиска пользователя
- Получение истории погоды - отправка get запроса на сервер приложения и получение списка всех городов к которым пользователь делал запрос
- Все эндпойнты и модели базы дданных проверены с помощью pytest_asyncio
- В корневой директории для создания виртуального окружения выполнить команду python -m venv venv
- Активация виртуального окружения - venv/Scripts/activate.ps1
- Установка зависимостей - pip install -r requirements.txt
- Запуск миграций (база данных создатся сама миграций)
- cd src
- alembic revision --autogenerate -m "create_all"
- alrmbic upgrade head
- Запуск локального сервера uvicorn
- cd src
- uvicorn main:app --reload
- Запуск тестов
- cd src
- pytest
@Bastrukinaanastasiia - телеграмм