Skip to content

AnnushkaStark/weather_api_test_task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание 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 - телеграмм

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published