Skip to content

Latest commit

 

History

History
77 lines (73 loc) · 8.07 KB

README.md

File metadata and controls

77 lines (73 loc) · 8.07 KB

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

Необходимо спроектировать и разработать сервис, который будет предоставлять API для работы с информацией о погоде. Часть 1. Получение данных. Используя geocoding-api получить информацию о любых 20-ти городах и сохранить ее в локальную базу. Необходимо сохранить название, страну, и координаты (понадобятся для получения погоды). Сохранять данные о городах можно любым удобном для вас способом. Используя открытый API open weather map и координаты городов получить предсказание погоды на 5 дней и сохранить результат в БД. При запуске сервис должен запросить предсказания погоды из внешнего источника и сохранить их в локальную базу данных. Если предсказания для конкретного города и времени в БД уже есть необходимо обновить существующую запись. Нет необходимости хранить все поля ответа в отдельных колонках БД. В отдельных колонках должны лежать: temp — температура днем date — дата предсказания Всю остальную информацию нужно хранить в формате json 💪


Если задание кажется вам простым. Дополнительно. Сделать фоновый процесс который будет раз в минут асинхронно обновлять данные о погоде. 💪


Если все еще слишком просто. Дополнительно. Распараллелить процесс получения информации о погоде из внешнего API. В проект необходимо добавить файлик migrate.sql который должен содержать в себе sql-запросы для создания схемы вашей БД со всем таблицами, индексами и т.д. 💪


Для тех кто знает докер Оберните ваш проект в docker. Сервис должен запускаться через doсker-compose и после поднятия контейнеров полностью сконфигурирован и готово к работе. Часть 2. Разработка API. Какой функционал нужен пользователям API: Список городов, для которых есть предсказания о погоде (отсортированный по названию). Из данного списка пользователь сможет выбрать город для просмотра полной информации по нему. Список с кратким предсказанием для выбранного города. Ответ должен содержать: страну, название города, среднюю температуру на весь доступный будущий период, список дат для которых доступно предсказание. Дата должна быть отсортирована в хронологическом порядке. Пользователь сможет выбрать дату для получения полной информации на этот день. Детальная информация о погоде для конкретного города и конкретного времени. Ответ должен быть максимально полным и содержать в себе всю информацию, которую получилось достать из внешнего API на выбранное время. 💪


Для самых смелых. Дополнительно. Добавить в сервис функционал пользователей и спроектировать API для добавление города в список избранных пользователя. Жестких требований к этой части задания нет, оставляем пространство для творчества 🙂 Важные комментарии Сервис должен быть написан на Golang, запрещено использовать ORM для работы с БД. Все запросы должны быть сделаны на чистом SQL. В остальном ограничений по библиотекам и фреймворкам нет. База данных — PostgreSQL. В первую очередь необходимо реализовать основной функционал, затем из секции «дополнительно» Качество важнее скорости. На выполнение задачи дается неделя. Если остается время рекомендую потратить его на улучшение вашего решения. Напишите документацию, unit-тесты, добавьте логгирование и т.д. Не стесняйтесь задавать вопросы если что-то не понятно в условии задания. Лучше лишний раз спросить чем сделать задачу не верно 😉.


How to


  • Запускать с помощью make

  • Swagger работает на адресе http://localhost:8181/swagger/index.html
  • Cookie в Swagger устанавливаются на полное время их жизни, сменить можно только зайдя под другим пользователем

  • Возвращает все доступные названия городов, возращает json http GET http://localhost:8181/

  • Возращает все возможные прогнозы на будущее время с интервалом 3 часа, прнимает json, возращает json http POST http://localhost:8181/short_forecast
  • Формат запроса {"name":"{city_name}"}

  • Возращает все возможные данные по погоне на выбраный период для выбраного города, принимает json, возращает json http POST http://localhost:8181/full_forecast
  • Формат запроса {"name":"{city_name}","date":"{date}"}

  • Регистрация пользователей, принимает json, возращает json http POST http://localhost:8181/users
  • Формат запроса {"name":"{user_name}","email":"{user_email}","password":"{user_password}"}

  • Аутентификация пользователя, принимает json, возращает Set-Cookie:

  • допольнительно так же возращает cookie в json (нужно для корректной работы swagger) http POST http://localhost:8181/sessions

  • Формат запроса {"name":"{user_name}","email":"{user_email}"}

                                 Доступно только с установленным cookie
    
  • Устанавливает любимый город пользователя, принимает json, возращает json http POST http://localhost:8181/private/fav_city

  • Формат запроса {"fav_city":"{input_city}"}


  • Выключение сервера http GET http://localhost:8181/private/shutdown