Skip to content

Latest commit

 

History

History
70 lines (47 loc) · 6.13 KB

README.md

File metadata and controls

70 lines (47 loc) · 6.13 KB

Тестовое задание Python Developer

Сделать web приложение, оно же сайт, где пользователь вводит название города, и получает прогноз погоды в этом городе на ближайшее время.

  • Вывод данных (прогноза погоды) должен быть в удобно читаемом формате.
  • Веб фреймворк можно использовать любой.
  • api для погоды: https://open-meteo.com/ (можно использовать какое-нибудь другое, если вам удобнее)

будет плюсом если:

  • написаны тесты
  • всё это помещено в докер контейнер
  • при повторном посещении сайта будет предложено посмотреть погоду в городе, в котором пользователь уже смотрел ранее
  • будет сохраняться история поиска для каждого пользователя, и будет API, показывающее сколько раз вводили какой город

что будет оцениваться:

  • корректность работы
  • удобство использования
  • качество кода

в README.md просьба указать что из выше перечисленного было сделанно, пару слов о использованных технологиях, и как это всё запустить

Сделанное задание просьба опубликовать на github и отправить ссылку в бот.

Что было сделано

!!! Названия городов вводить кириллицей в любом регистре !!!

Users router

  • Для возможности сохранения истории посиска пользователя созздан роутер Users с регистрацией логином и логаутом пользователя c использованием JWT токенов
  • Для оптимизации хранения истории поиска поользователя - создана таблица City - для хранения уникальных названий городов при условии что запрос прогноза погоды в городе был выполнен успешно, и таблица связи многие ко многим с уникальностью на ID пользователя и ID города (это даст возможность сохранить только один запрос город-пользователь. В истории поиска пользователя город будет сохранен, но только один раз, даже если пользователь будет делать много запросов по этому городу)

Реализация получения прогноза погоды по названию горда

  • Реализация на фреймворке FastAPI

  • Использовался сервис https://home.openweathermap.org/users/sign_in Для пользования этим сервисом необходимо зарегистрироваться на сайте и получиит API_KEY, который будет активирован в течении нескольких часов после регистрации

  • Создана утилита, которая посылает запрос на сервис с учетом данных введенных пользователем и при удачном запросе генерирует ответ в формате json

Алгоритм работы запроса погоды

  • Пользователь вводит название города и отправляет post запрос на сервер приложения. С сервера приложения идет запрос в базу данных и если город есть (в бд хранятся только уникальные имена городов по которым запрос погоды был выполнен успешно) - то сразу идет запрос на сервер и новый город не создается а в модель пользователя в поле связи города добавляется новый город если его там еще нетю Если город не найден в базе так же отпралятся запрос на сервер получения погоды - и если ответ сервера успешниы в базе данных создается новый город и фиксируется в истории поиска пользователя
  • Получение истории погоды - отправка get запроса на сервер приложения и получение списка всех городов к которым пользователь делал запрос

Тестирование приложения

  • Все эндпойнты и модели базы дданных проверены с помощью pytest_asyncio

Запуск приложения (windows)

  • В корневой директории для создания виртуального окружения выполнить команду python -m venv venv
  • Активация виртуального окружения - venv/Scripts/activate.ps1
  • Установка зависимостей - pip install -r requirements.txt
  • Запуск миграций (база данных создатся сама миграций)
  1. cd src
  2. alembic revision --autogenerate -m "create_all"
  3. alrmbic upgrade head
  • Запуск локального сервера uvicorn
  1. cd src
  2. uvicorn main:app --reload
  • Запуск тестов
  1. cd src
  2. pytest

Контакты для обратной связи

@Bastrukinaanastasiia - телеграмм