IT-Planet_If_else_Duvakin
Описание
Языки
- Python92,7%
- HTML6,8%
- CSS0,4%
- Dockerfile0,1%
IT-Planet_If_else_Duvakin
Не успел сделать всю коллекцию и varibels, но тела зпросов уже заполнены и готовы
Веб приложение по адресу: http://localhost:5000/
Компания «История Погоды»
Условия
Участник предоставляет Организатору разрешение на использование, модификацию, публикацию проекта и дальнейшее распространение, включая право на внесение изменений, дополнений, предисловий, комментариев и любых других переработок. Участник гарантирует, что проект не нарушает действующее законодательство, не содержит информации, дискредитирующей лиц или продукты, не вызывает судебных исков или претензий, не нарушает прав и интересов третьих лиц, соответствует общественным интересам, принципам гуманности и морали. Участник подтверждает, что все используемые в проекте материалы и данные являются его собственностью или использованы с разрешения правообладателей, что не ограничивает использование проекта Организатором в полном объеме. Участник подтверждает, что передача исключительных прав на проект, созданный в рамках конкурса, не нарушает права третьих лиц и что все материалы проекта могут быть использованы Организатором без каких-либо ограничений.
Описание системы
Система представляет собой сервис API, разработанный на языке Python с использованием фреймворка Flask, СУБД PostgreSQL и платформы, предназначенной для разработки, развёртывания и запуска приложений в контейнерах - Docker, который предназначен для сбора, хранения и анализа метеорологических данных. А также веб приложение для просмотра информации о методах и использовании интерактивной карты. Система включает в себя следующие компоненты:
-
Flask: основная часть системы, предоставляющая HTTP-интерфейс для взаимодействия с метеорологической информацией. Flask обрабатывает запросы от клиентов и возвращает соответствующие данные.
-
PostgreSQL: реляционная база данных, используемая для хранения всех метеорологических данных, а также информации о пользователях и других сущностях системы.
-
Docker: используется для контейнеризации приложения, что облегчает его развертывание и масштабирование.
Структура проекта включает в себя различные файлы и директории, такие как файлы Flask приложения, модели данных, скрипты для генерации тестовых данных, а также файлы конфигурации Docker и зависимости в файле requirements.txt.
Цель системы состоит в том, чтобы предоставить удобный и надежный способ сбора, хранения и доступа к метеорологической информации для дальнейшего анализа и использования.
Запуск системы
Перед запуском системы убедитесь, что на вашем компьютере установлены Docker и Docker Compose. Если они не установлены, следуйте инструкциям на официальном сайте Docker для вашей операционной системы.
Также обратите внимание, что для запуска потребуется подключение к интернету. Для работы приложения будет скачан образ СУБД PostgreSQL и необходимые зависимости (библиотеки).
Для работы приложения необходимо задать ключ шифрования, для этого нужно создать файл ".env" с определенной внутри переменной "secure_key". Это не является обязательным условием т.к. в случае отсутствия переменной окружения система сгенерирует ключ случайным образом. Пример .env файла.

Для запуска система откройте терминал в папке WeatherService и запустите одну из команд:
или
Начнется запуск системы. Обратите внимание, что даже если Docker сообщает о запуске контейнеров, для запуска программы
внутри контейнеров может потребоваться дополнительное время, до 20 секунд.
После запуска системы, методы API будут доступны по адресу localhost:5000 (при условии, что конфигурация не была изменена), а база данных по адресу localhost:5432 (при условии, что конфигурация не была изменена).
Обратите внимание, что для работы система использует порты 5432 и 5000. Если во время запуска данные порты будут заняты другими программами, то будет вызвано исключение. Для изменения портов, по которым может быть доступен API сервис и база данных, измените первую часть параметра "ports" в файле docker-compose.yml у базы данных и приложения.
Для базы данных:

Для API:

Заполнение тестовыми данными
Для удобства тестирования при первом запуске контейнера происходит заполнение базы тестовыми данными. Создается новый пользователь для возможности быстрой авторизации.
Данные авторизации тестового пользователя:
Автоматическое заполнение базы можно отключить, убрав команду из
файла docker-compose.yml.

Готовые тесты Postman
Для автоматизации тестирования можно воспользоваться подготовленной коллекцией запросов Postman v2.1: ItPlanet.postman_collection.json. Запросы написаны для тестовых данных, которые добавляются в базу данных автоматически при первом запуске контейнера.
Веб приложение
Для удобного просмотра информации о методах было разработано веб-приложение.

На главной странице расположен список всех методов (старых и новых), а также кнопка для перехода на страницу с картой.
На странице с картой расположена сама карта и поле для ввода координат.

После нажатия на кнопку "показать область" на карте будет отрисован заданный отрезок, также система првоерит наличие региона с такими координатами в базе данных и в случае обнаружения выведет информацию о регионе.

При открытии метода на главной странице, будет показана основная информация о методе, а также представлен пример запроса.

Методы
OSM Методы
Получение информации о регионе
Метод: GET
Путь: /region/{regionId}
Запрос
Параметры пути:
- regionId (обязательно): Идентификатор региона (тип: long).
Тело запроса:
- Пустое.
Ответ
В случае успешного выполнения возвращает JSON-объект с полями:
- id: Идентификатор региона (тип: long).
- regionType: Массив идентификаторов типа региона (тип: [long]).
- accountId: Аккаунт, внесший данные о регионе (тип: long).
- name: Название региона (тип: string).
- parentRegion: Название родительского региона (тип: string).
- latitude: Координаты широты (тип: double).
- longitude: Координаты долготы (тип: double).
- osmData: Объект с данными из OpenStreetMap:
- mapLink: Ссылка на карту региона в OSM (тип: string).
- boundingBox: Границы региона (тип: [double, double, double, double]).
- pointsOfInterest: Массив точек интереса, каждая из которых включает:
- name: Название точки интереса (тип: string).
- type: Тип точки интереса (тип: string).
- latitude: Широта (тип: double).
- longitude: Долгота (тип: double).
- latitude_2: Широта (тип: double).
- longitude_2: Долгота (тип: double).
Статусы
- 200: Запрос успешно выполнен.
- 400:
- Если
отсутствует или имеет некорректное значение (нулевой или отрицательный).regionId
- Если
- 401: Неверные авторизационные данные.
- 404: Регион с таким
не найден.regionId
Пример запроса:
Пример ответа:
Добавление региона
Метод: POST
Путь: /region
Запрос
Принимает JSON-объект с полями:
- name (обязательно): Название региона.
- parentRegion (необязательно): Название родительского региона, может быть Null.
- latitude (обязательно): Координаты широты.
- longitude (обязательно): Координаты долготы.
- osmData (необязательно): Данные для интеграции с OpenStreetMap.
- includePOI: Указывает, следует ли включать точки интереса из OSM. True для включения, False или отсутствует для игнорирования.
Статусы
- 201: Запрос успешно выполнен.
- 400: Ошибка в полученных данных. Если поле name отсутствует, пустое или состоит только из пробелов. Если поля latitude или longitude отсутствуют.
- 401: Неверные авторизационные данные.
- 409: Регион с такими latitude и longitude уже существует.
Пример запроса
Пример ответа
Изменение региона
Метод: PUT
Путь: /region/{regionId}
Запрос
Принимает JSON-объект с полями:
- name (обязательно): Новое название региона.
- parentRegion (необязательно): Новое название родительского региона, может быть
.Null - latitude (обязательно): Новые координаты широты.
- longitude (обязательно): Новые координаты долготы.
- osmData (необязательно): Данные для запроса обновления информации из OpenStreetMap.
- updatePOI: Указывает на необходимость обновления точек интереса из OSM.
для обновления,Trueили отсутствует для игнорирования.False
- updatePOI: Указывает на необходимость обновления точек интереса из OSM.
Пример запроса
Пример ответа:
Получение информации о погоде в регионе
Метод: GET
Путь: /region/weather/{regionId}
Запрос
Тело запроса: пустое
Пример запроса
Пример ответа
Остальные методы
Создание пользователя
Метод: POST
Путь: /registration
Запрос
Принимает JSON-объект с полями:
- firstName (обязательно): Имя пользователя.
- lastName (обязательно): Фамилия пользователя.
- email (обязательно): Адрес электронной почты пользователя.
- password (обязательно): Пароль от аккаунта пользователя.
Ответ
В случае успешного создания пользователя возвращает JSON-объект с полями:
- id: Идентификатор аккаунта пользователя.
- firstName: Имя пользователя.
- lastName: Фамилия пользователя.
- email: Адрес электронной почты.
Статусы
- 201: Запрос успешно выполнен.
- 400:
- Если отсутствуют обязательные поля в теле запроса.
- Если поля
,firstName,lastNameилиemailпусты или состоят только из пробелов.password - Если адрес электронной почты некорректен.
- 403: Запрос от авторизованного аккаунта.
- 409: Аккаунт с таким адресом электронной почты уже существует.
Пример запроса:
Пример ответа:
Аутентификация пользователя
Метод: POST
Путь: /login
Запрос
Принимает JSON-объект с полями:
- email (обязательно): Адрес электронной почты пользователя.
- password (обязательно): Пароль от аккаунта пользователя.
Ответ
В случае успешной аутентификации возвращает JSON-объект с полем:
- id: Идентификатор аккаунта пользователя.
Статусы
- 200: Запрос успешно выполнен.
- 400: Отсутствуют обязательные поля
илиemailв теле запроса.password - 401: Неверный email или пароль.
Пример запроса:
Пример ответа:
Аккаунт пользователя
Метод: GET
Путь: /accounts/{accountId}
Запрос
Не принимает тело запроса.
Ответ
Возвращает JSON-объект с полями:
- id: Идентификатор аккаунта пользователя.
- firstName: Имя пользователя.
- lastName: Фамилия пользователя.
- email: Адрес электронной почты.
Статусы
- 200: Запрос успешно выполнен.
- 400: Некорректный идентификатор
.accountId - 401: Неверные авторизационные данные.
- 404: Аккаунт с указанным
не найден.accountId
Пример запроса:
Пример ответа:
Поиск аккаунта
Метод: GET
Путь: /accounts/search
Запрос
Принимает параметры запроса:
- firstName (опционально): Имя пользователя, по которому будет производиться поиск. Может использоваться только часть имени без учета регистра. Если параметр отсутствует, не участвует в фильтрации.
- lastName (опционально): Фамилия пользователя, по которой будет производиться поиск. Может использоваться только часть фамилии без учета регистра. Если параметр отсутствует, не участвует в фильтрации.
- email (опционально): Адрес электронной почты пользователя, по которому будет производиться поиск. Может использоваться только часть адреса электронной почты без учета регистра. Если параметр отсутствует, не участвует в фильтрации.
- from (опционально): Количество элементов, которое необходимо пропустить для формирования страницы с результатами ( по умолчанию 0).
- size (опционально): Количество элементов на странице (по умолчанию 10).
Ответ
Возвращает массив JSON-объектов с полями:
- id: Идентификатор аккаунта пользователя.
- firstName: Имя пользователя.
- lastName: Фамилия пользователя.
- email: Адрес электронной почты.
Результаты поиска сортируются по идентификатору аккаунта пользователя от наименьшего к наибольшему.
Статусы
- 200: Запрос успешно выполнен.
- 400: Ошибка в параметрах запроса (
илиfrom < 0).size <= 0 - 401: Неверные авторизационные данные.
Пример запроса:
Пример ответа:
Изменение аккаунта
Метод: PUT
Путь: /accounts/{accountId}
Запрос
Принимает JSON-объект с полями:
- firstName (обязательно): Новое имя пользователя.
- lastName (обязательно): Новая фамилия пользователя.
- email (обязательно): Новый адрес электронной почты пользователя.
- password (обязательно): Пароль от аккаунта пользователя.
Ответ
Возвращает JSON-объект с полями:
- id: Идентификатор аккаунта пользователя.
- firstName: Новое имя пользователя.
- lastName: Новая фамилия пользователя.
- email: Новый адрес электронной почты.
Статусы
- 200: Запрос успешно выполнен.
- 400: Отсутствуют обязательные поля (
,firstName,lastNameилиemail) или они пусты. Неверный формат email.password - 401: Неверные авторизационные данные.
- 403: Обновление не своего аккаунта.
- 404: Аккаунт не найден.
- 409: Аккаунт с таким email уже существует.
Пример запроса:
Пример ответа:
Удаление аккаунта
Метод: DELETE
Путь: /accounts/{accountId}
Запрос
Принимает пустое тело запроса.
Ответ
Возвращает пустое тело ответа.
Статусы
- 200: Запрос успешно выполнен.
- 400: Некорректный идентификатор аккаунта (
равенaccountIdили меньше или равен 0).null - 401: Неверные авторизационные данные.
- 403: Удаление не своего аккаунта.
- 404: Аккаунт с указанным
не найден.accountId
Пример запроса:
Пример ответа:
Получение информации о регионе
Метод: GET
Путь: /region/{regionId}
Запрос
Принимает пустое тело запроса.
Ответ
Возвращает информацию о регионе в формате JSON:
- id: Идентификатор региона.
- regionType: Идентификатор типа региона.
- accountld: Идентификатор аккаунта, внесшего данные о регионе.
- name: Название региона.
- parentRegion: Название родительского региона.
- latitude: Координаты широты.
- longitude: Координаты долготы.
Статусы
- 200: Запрос успешно выполнен.
- 400: Некорректный идентификатор региона (
равенregionIdили меньше или равен 0).null - 401: Неверные авторизационные данные.
- 404: Регион с указанным
не найден.regionId
Пример запроса:
Пример ответа:
Создание региона
Метод: POST
Путь: /region
Запрос
Принимает JSON-объект с полями:
- name (обязательно): Название региона.
- latitude (обязательно): Координаты широты.
- longitude (обязательно): Координаты долготы.
- regionType (опционально): Идентификатор типа региона.
- parentRegion (опционально): Название родительского региона.
Ответ
Возвращает информацию о созданном регионе в формате JSON:
- id: Идентификатор созданного региона.
- name: Название региона.
- parentRegion: Название родительского региона (если указано).
- regionType: Идентификатор типа региона (если указан).
- latitude: Координаты широты.
- longitude: Координаты долготы.
Статусы
- 201: Запрос успешно выполнен и регион создан.
- 400: Отсутствуют обязательные поля в теле запроса (
,name,latitude).longitude - 401: Неверные авторизационные данные.
- 404: Тип региона или родительский регион не найдены.
- 409: Регион с указанными координатами уже существует.
Пример запроса:
Пример ответа:
Изменение региона
Метод: PUT
Путь: /region/{regionld}
Запрос
Принимает JSON-объект с полями:
- name (обязательно): Новое название региона.
- latitude (обязательно): Новые координаты широты.
- longitude (обязательно): Новые координаты долготы.
- regionType (опционально): Новый идентификатор типа региона.
- parentRegion (опционально): Новое название родительского региона.
Ответ
Возвращает информацию о измененном регионе в формате JSON:
- id: Идентификатор измененного региона.
- name: Новое название региона.
- parentRegion: Новое название родительского региона (если указано).
- latitude: Новые координаты широты.
- longitude: Новые координаты долготы.
Статусы
- 200: Запрос успешно выполнен и регион изменен.
- 400: Отсутствуют обязательные поля в теле запроса (
,name,latitude).longitude - 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден.
- 409: Регион с указанными координатами уже существует.
Пример запроса:
Пример ответа:
Удаление региона
Метод: DELETE
Путь: /region/{regionld}
Запрос
Не принимает тело запроса.
Ответ
Не возвращает тело ответа.
Статусы
- 200: Запрос успешно выполнен и регион удален.
- 400: Регион является родительским для другого региона.
- 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден.
Пример запроса:
Пример ответа:
Получение информации о типе региона
Метод: GET
Путь: /region/types/{typeId}
Запрос
Принимает запрос без тела.
Ответ
Возвращает информацию о типе региона в формате JSON:
- id: Идентификатор типа региона.
- type: Тип региона.
Статусы
- 200: Запрос успешно выполнен и информация о типе региона получена.
- 400: Если тип региона не указан (
).typeId = null, typeId <= 0 - 401: Неверные авторизационные данные.
- 404: Тип региона с указанным идентификатором не найден.
Пример запроса:
Пример ответа:
Добавление типа региона
Метод: POST
Путь: /region/types
Запрос
Принимает JSON-объект с полем:
- type (обязательно): Тип региона.
Ответ
Возвращает информацию о добавленном типе региона в формате JSON:
- id: Идентификатор добавленного типа региона.
- type: Тип региона.
- Если тип региона не указан, возвращается
в полеNone.type
Статусы
- 201: Запрос успешно выполнен и тип региона добавлен.
- 400: Отсутствует или пусто поле "type" в теле запроса.
- 401: Неверные авторизационные данные.
- 409: Тип региона с указанным именем уже существует.
Пример запроса:
Пример ответа:
Изменение типа региона
Метод: PUT
Путь: /region/types/{typeId}
Запрос
Принимает JSON-объект с полем:
- type (обязательно): Новый тип региона.
Ответ
Возвращает информацию об измененном типе региона в формате JSON:
- id: Идентификатор измененного типа региона.
- type: Новый тип региона.
Статусы
- 200: Запрос успешно выполнен и тип региона изменен.
- 400: Идентификатор типа региона некорректный (
) или отсутствует поле "type" в теле запроса.typeId <= 0 - 401: Неверные авторизационные данные.
- 404: Тип региона с указанным идентификатором не найден.
- 409: Тип региона с указанным именем уже существует.
Пример запроса:
Пример ответа:
Удаление типа региона
Метод: DELETE
Путь: /region/types/{typeId}
Запрос
Отправляет пустое тело запроса.
Ответ
Отправляет пустое тело ответа.
Статусы
- 200: Запрос успешно выполнен и тип региона удален.
- 400: Идентификатор типа региона некорректный (
) или есть регионы с этим типом.typeId <= 0 - 401: Неверные авторизационные данные.
- 404: Тип региона с указанным идентификатором не найден.
Пример запроса:
Пример ответа:
Получение информации о погоде в регионе
Метод: GET
Путь: /region/weather/{regionld}
Запрос
Отправляет пустое тело запроса.
Ответ
Возвращает информацию о погоде в указанном регионе в формате JSON:
- id: Идентификатор региона.
- regionName: Название региона.
- temperature: Температура в регионе, °C.
- humidity: Влажность воздуха в регионе, %.
- windSpeed: Скорость ветра, м/с.
- weatherCondition: Текущее состояние погоды. Возможные значения: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM".
- precipitationAmount: Количество осадков, мм.
- measurementDateTime: Дата и время измерения погодных условий в формате ISO-8601.
- weatherForecast: Массив идентификаторов объектов с прогнозом погоды на ближайшие дни.
Статусы
- 200: Запрос успешно выполнен и информация о погоде в регионе получена.
- 400: Идентификатор региона некорректный (
).regionld <= 0 - 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден или прогноз погоды для данного региона не найден.
Пример запроса:
Пример ответа:
Поиск информации о погоде в регионе
Метод: GET
Путь: *
/region/weather/search?startDateTime={startDateTime}&endDateTime={endDateTime}®ionId={regionId}&weatherCondition={weatherCondition}&from=0&size=10 **
Запрос
Отправляет пустое тело запроса.
Параметры запроса
- startDateTime: Дата и время начала периода для поиска погодных условий, в формате ISO-8601. Если null, не участвует в фильтрации.
- endDateTime: Дата и время конца периода для поиска погодных условий, в формате ISO-8601. Если null, не участвует в фильтрации.
- regionId: Идентификатор региона, для которого ищется информация о погоде. Если null, не участвует в фильтрации.
- weatherCondition: Состояние погоды. Возможные значения: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM". Если null, не участвует в фильтрации.
- from: Количество элементов, которое необходимо пропустить для формирования страницы с результатами (по умолчанию 0).
- size: Количество элементов на странице (по умолчанию 10).
Ответ
Возвращает информацию о погоде в указанных параметрах в формате JSON:
- id: Идентификатор региона.
- regionName: Название региона.
- temperature: Температура в регионе, °C.
- humidity: Влажность воздуха в регионе, %.
- windSpeed: Скорость ветра, м/с.
- weatherCondition: Текущее состояние погоды. Возможные значения: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM".
- precipitationAmount: Количество осадков, мм.
- measurementDateTime: Дата и время измерения погодных условий в формате ISO-8601.
- weatherForecast: Массив идентификаторов объектов с прогнозом погоды на ближайшие дни.
Статусы
- 200: Запрос успешно выполнен и информация о погоде в регионе получена.
- 400: Некорректные параметры запроса (например, regionId <= 0).
- 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден или прогноз погоды для данного региона не найден.
Пример запроса:
Пример ответа:
Добавление записи о погоде в регионе
Метод: POST
Путь: /region/weather
Запрос
Принимает JSON-объект с полями:
- regionId (обязательный): Идентификатор региона
- temperature (обязательный): Температура в регионе, °C
- humidity (обязательный): Влажность воздуха в регионе, %
- windSpeed (обязательный): Скорость ветра, м/с
- weatherCondition (обязательный): Текущее состояние погоды: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM"
- precipitationAmount (обязательный): Количество осадков, мм
- measurementDateTime (обязательный): Дата и время измерения погодных условий в формате ISO-8601
- weatherForecast (опциональный): Массив идентификаторов объектов с прогнозом погоды на ближайшие дни
Ответ
- id: Уникальный идентификатор созданной записи о погоде в регионе
- temperature: Температура в регионе, °C
- humidity: Влажность воздуха в регионе, %
- windSpeed: Скорость ветра, м/с
- weatherCondition: Текущее состояние погоды: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM"
- precipitationAmount: Количество осадков, мм
- measurementDateTime: Дата и время измерения погодных условий в формате ISO-8601
- weatherForecast: Массив идентификаторов объектов с прогнозом погоды на ближайшие дни
Статусы
- 200: Запрос успешно выполнен и запись о погоде в регионе добавлена.
- 400: Один из следующих случаев:
- Некорректный идентификатор региона (regionId <= 0).
- Дата и время измерения погодных условий не в формате ISO-8601.
- Температура или скорость ветра отрицательные.
- Неверное состояние погоды.
- Количество осадков отрицательное.
- 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден или прогноз погоды для данного региона не найден.
Пример запроса:
Пример ответа:
Изменение погоды в регионе
Метод: PUT
Путь: /region/weather/{regionId}
Запрос
Принимает JSON-объект с полями:
- regionId (обязательный): Идентификатор региона
- temperature (обязательный): Температура в регионе, °C
- humidity (обязательный): Влажность воздуха в регионе, %
- windSpeed (обязательный): Скорость ветра, м/с
- weatherCondition (обязательный): Текущее состояние погоды: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM"
- precipitationAmount (обязательный): Количество осадков, мм
- measurementDateTime (обязательный): Дата и время измерения погодных условий в формате ISO-8601
- weatherForecast (опциональный): Массив идентификаторов объектов с прогнозом погоды на ближайшие дни
Ответ
Отправляет JSON-объект с полями:
- id: Уникальный идентификатор созданной записи о погоде в регионе
- temperature: Температура в регионе, °C
- humidity: Влажность воздуха в регионе, %
- windSpeed: Скорость ветра, м/с
- weatherCondition: Текущее состояние погоды: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM"
- precipitationAmount: Количество осадков, мм
- measurementDateTime: Дата и время измерения погодных условий в формате ISO-8601
- weatherForecast: Массив идентификаторов объектов с прогнозом погоды на ближайшие дни
Пример запроса
Пример ответа:
Удаление погоды для региона
Метод: DELETE
Путь: /region/weather/{regionId}
Запрос
Отправляет пустое тело запроса.
Ответ
Отправляет пустое тело ответа.
Статусы
- 200: Запрос успешно выполнен, и погода для указанного региона удалена.
- 400: Один из следующих случаев:
- Идентификатор региона некорректный (
).regionId <= 0
- Идентификатор региона некорректный (
- 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден.
Пример запроса:
Пример ответа:
Добавление погоды для конкретного региона
Метод: POST
Путь: /region/{regionId}/weather/{weatherId}
Запрос
Отправляет пустое тело запроса.
Ответ
Отправляет JSON-объект с полями:
- id (long): Подтверждение уникального идентификатора региона
- regionId (long): Идентификатор региона
- regionName (string): Новое название региона
- temperature (float): Новая температура в регионе, °C
- humidity (float): Новая влажность воздуха в регионе, %
- windSpeed (float): На Скорость ветра, м/с
- weatherCondition (string): Текущее состояние погоды, доступные значения: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", " STORM"
- precipitationAmount (float): Количество осадков, мм
- measurementDateTime (dateTime): Дата и время измерения погодных условий в формате ISO-8601
- weatherForecast (array): Массив идентификаторов объектов с прогнозом погоды на ближайшие дни
Статусы
- 200: Запрос успешно выполнен.
- 400: Один из следующих случаев:
- Идентификатор региона некорректный (
).regionId <= 0 - Идентификатор погоды некорректный (
).weatherId <= 0
- Идентификатор региона некорректный (
- 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден, или погода для указанного региона и идентификатора не найдена.
Пример запроса:
Пример ответа:
Удаление погоды для региона
Метод: DELETE
Путь: /region/{regionId}/weather/{weatherId}
Запрос
Отправляет пустое тело запроса.
Ответ
Отправляет JSON-объект с полями:
- id (long): Идентификатор региона
- name (string): Название региона
- parentRegion (string): Название родительского региона
- latitude (double): Координаты широты
- longitude (double): Координаты долготы
Статусы
- 200: Запрос успешно выполнен.
- 400: Один из следующих случаев:
- Идентификатор региона некорректный (
).regionId <= 0 - Идентификатор погоды некорректный (
).weatherId <= 0
- Идентификатор региона некорректный (
- 401: Неверные авторизационные данные.
- 404: Регион с указанным идентификатором не найден.
Пример запроса:
Пример ответа:
Получение информации о прогнозе погоды
Метод: GET
Путь: /region/weather/forecast/{forecastId}
Запрос
Отправляет пустое тело запроса.
Ответ
Отправляет JSON-объект с полями:
- id (long): Уникальный идентификатор прогноза погоды
- dateTime (dateTime): Дата и время прогноза в формате ISO-8601
- temperature (float): Прогнозируемая температура, °C
- weatherCondition (string): Текущее состояние погоды. Допустимые значения: "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", " STORM"
- regionId (long): Идентификатор региона, для которого сделан прогноз
Статусы
- 200: Запрос успешно выполнен.
- 400: Один из следующих случаев:
- Идентификатор прогноза погоды не указан (
).forecastId = null - Дата и время прогноза не в формате ISO-8601.
- Состояние погоды не валидно.
- Идентификатор прогноза погоды меньше или равен нулю (
).forecastId <= 0
- Идентификатор прогноза погоды не указан (
- 401: Неверные авторизационные данные.
- 404: Прогноза погоды с указанным идентификатором не существует.
Пример запроса:
Пример ответа:
Изменение прогноза погоды
Метод: PUT
Путь: /region/weather/forecast/{forecastId}
Запрос
Отправляет JSON-объект с полями:
- temperature (float): Новая прогнозируемая температура, °C
- weatherCondition (string): Новое прогнозируемое состояние погоды. Допустимые значения: "CLEAR", "CLOUDY", "RAIN", " SNOW", "FOG", "STORM"
- dateTime (dateTime): Новая дата и время прогноза в формате ISO-8601
Ответ
Отправляет JSON-объект с полями:
- id (long): Подтверждение уникального идентификатора прогноза погоды
- dateTime (dateTime): Новая дата и время прогноза в формате ISO-8601
- temperature (float): Новая температура, °C
- weatherCondition (string): Новое состояние погоды
- regionId (long): Идентификатор региона
Статусы
- 200: Запрос успешно выполнен.
- 400: Один из следующих случаев:
- Идентификатор прогноза погоды не указан (
).forecastId = null - Дата и время прогноза не в формате ISO-8601.
- Состояние погоды не валидно.
- Идентификатор прогноза погоды меньше или равен нулю (
).forecastId <= 0
- Идентификатор прогноза погоды не указан (
- 401: Неверные авторизационные данные.
- 404: Прогноза погоды с указанным идентификатором не существует.
Пример запроса:
Пример ответа:
Добавление прогноза погоды
Метод: POST
Путь: /region/weather/forecast/
Запрос
Отправляет JSON-объект с полями:
- regionId (long): Идентификатор региона, для которого делается прогноз
- dateTime (dateTime): Дата и время, на которые делается прогноз в формате ISO-8601
- temperature (float): Прогнозируемая температура, °C
- weatherCondition (string): Прогнозируемое состояние погоды. Допустимые значения: "CLEAR", "CLOUDY", "RAIN", "SNOW", " FOG", "STORM"
Ответ
Отправляет JSON-объект с полями:
- id (long): Уникальный идентификатор созданного прогноза погоды
- regionId (long): Идентификатор региона, для которого был создан прогноз
- temperature (float): Прогнозируемая температура, °C
- weatherCondition (string): Прогнозируемое состояние погоды
- dateTime (dateTime): Дата и время прогноза в формате ISO-8601
- precipitationAmount (float): Количество осадков, мм
- windSpeed (float): Скорость ветра, м/c
Статусы
- 200: Запрос успешно выполнен.
- 400: Один из следующих случаев:
- Идентификатор региона не указан (
).regionId = null - Дата и время прогноза не в формате ISO-8601.
- Состояние погоды не валидно.
- Идентификатор региона меньше или равен нулю (
).regionId <= 0
- Идентификатор региона не указан (
- 401: Неверные авторизационные данные.
- 404: Региона с указанным идентификатором не существует.
Пример запроса:
Пример ответа:
Удаление прогноза погоды
Метод: DELETE
Путь: /region/weather/forecast/{forecastId}
Запрос
Отправляет пустое тело запроса.
Ответ
Отправляет пустое тело ответа.
Статусы
- 200: Запрос успешно выполнен, и прогноз погоды удален.
- 400: Один из следующих случаев:
- Идентификатор прогноза погоды некорректный (
).forecastId <= 0
- Идентификатор прогноза погоды некорректный (
- 401: Неверные авторизационные данные.
- 404: Прогноз погоды с указанным идентификатором не найден.
Пример запроса:
Пример ответа: