IT-Planet_If_else_Lushchenko

Форк
0

README.MD

Решение второго отборочного этапа Прикладное программирование if...else — IT-Планета 2024

Решение

Для решения данного задания использовались следующие технологии:

  • Spring Boot (приложение)
  • Spring Data JPA + Hibernate (ORM)
  • PostgreSQL (База данных)
  • Maven (сборка приложения)
  • Swagger
  • Docker
  • Docker compose

Что было реализовано

В данном проекте были реализованы несколько контроллеров (на этапе проектирования я принял решение отойти от ТЗ, так как контроллер Authentication имел никак не относящиеся методы к данному контексту).

Были полностью реализованы следующие контроллеры:

  • Account (контроллер отвечает за регистрацию, логин и CRUD для аккаунтов)
  • Region (контроллер отвечает за CRUD для регионов)
  • RegionType (контроллер отвечает за CRUD для типов регионов)
  • WeatherForecast (контроллер отвечает за CRUD для прогноза погоды)

К сожалению, возникли проеблемы с контроллером Weather. В документации было сложно понять, как зависят регионы, погода и прогноз

Например:

GET - /region/weather/{regionld} Получение информации о погоде в регионе {regionld} : "long" // Идентификатор региона request Body { empty } responce Body { "id": "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": [forecastld], // Массив идентификаторов объектов с прогнозом погоды на ближайшие дни }
POST - /region/weather Добавление погоды request Body { "regionId": "long", // Идентификатор региона "temperature": "float", // Температура в регионе, °C "humidity": "float", // Влажность воздуха в регионе, % "windSpeed": "float", // Скорость ветра, м/с "weatherCondition": "string", // Текущее состояние погоды, доступные значения "CLEAR", "CLOUDY", "RAIN", "SNOW", "FOG", "STORM" "precipitationAmount": "float", // Количество осадков, мм "measurementDateTime": "dateTime", // Дата и время измерения погодных условий в формате ISO-8601 "weatherForecast": ["forecastId"] // Массив идентификаторов объектов с прогнозом погоды на ближайшие дни } responce { "id": "long", // Уникальный идентификатор созданной записи о погоде в регионеа "temperature": "float", // Температура в регионе, °C "humidity": "float", / Влажность воздуха в регионе, % "windSpeed": "float", // Скорость ветра, м/с "weatherCondition": "string", // Текущее состояние погоды "precipitationAmount": "float", // Количество осадков, мм "measurementDateTime": "dateTime", // Дата и время измерения погодных условий "weatherForecast": ["forecastId"], // Массив идентификаторов объектов с прогнозом погоды на ближайшие дни }

Непонятно было, как относятся регионы и погоды друг к другу, так как добавление погоды преполагает добавление новой погоды для региона, тогда какую погоду брать для региона, так и не понял

TL;DR проблемы: непонятна связь, OneToOne или OneToMany

Возможно, я не до конца понял, что там происходит, поэтому будет очень круто, если будет разбор заданий или что-то подобное :)

Архитектура

Для реализации данного проекта я использовал паттерн репозиторий. Благодаря Spring Boot и удобства этого паттерна, можно намного проще создавать CRUD для различных моделей

Для авторизации я использовал сессии через cookie,которые сохраняются по парметру id. Сами cookie хранятся в БД в таблице Account. Если пользователь авторизован, на сервере провереяются куки от пользователся и куки на сервере. Если куки не совпадают, то приложение не даёт доступ.

При авторизации, в случае новой сессии, куки презаписываются в БД для корректной работы

Требования к проверке решений

Приложение запускается в docker-compose (приложение + база данных). В конфигурациях я всё прописал, но продублирую сюда

Для базы данных (PostgeSQL)

Хост: localhost

Порт: 5432

База данных: WeatherForecast

Имя пользователя: postgres

Пароль: postgres

Для приложения (Spring Boot)

Хост: localhost

Порт: 8080

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

docker compose up -d --build

Swagger

http://localhost:8080/swagger-ui/index.html

Telegram

https://t.me/alexeylush

Соглашение

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

Я гарантирую, что проект не нарушает действующее законодательство, не содержит информации, дискредитирующей лиц или продукты, не вызывает судебных исков или претензий, не нарушает прав и интересов третьих лиц, соответствует общественным интересам, принципам гуманности и морали. Участник подтверждает, что все используемые в проекте материалы и данные являются его собственностью или использованы с разрешения правообладателей, что не ограничивает использование проекта Организатором в полном объеме.

Я подтверждаю, что передача исключительных прав на проект, созданный в рамках конкурса, не нарушает права третьих лиц и что все материалы проекта могут быть использованы Организатором без каких-либо ограничений.

Описание

Репозиторий для "Прикладное программирование if...else — IT-Планета 2024"

Языки

Java

  • Dockerfile
Сообщить о нарушении

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.