Веб-приложение для просмотра текущей погоды. Пользователь может зарегистрироваться и добавить в коллекцию одну или несколько локаций (городов, сёл, других пунктов), после чего главная страница приложения начинает отображать список локаций с их текущей погодой.
- Регистрация и аутентификация
- Поиск локаций по названию
- Добавление локаций в персональную коллекцию
- Просмотр текущей погоды для сохраненных локаций
- Удаление локаций из коллекции
- Java 17
- Maven
- Spring 6
- Hibernate
- PostgreSQL
- HikariCP
- Liquibase
- HTML / Thymeleaf
- Bootstrap 5
- JUnit 5
- Mockito
- Приложение использует cookie-based авторизацию
- После логина пользователю устанавливается cookie с идентификатором сессии
- Все страницы доступны только авторизованным пользователям, кроме:
//auth/login/auth/registration
- Неавторизованный пользователь будет перенаправлён на страницу логина
Описание: Отображает страницу входа в систему.
Ответ: HTML-страница login.html
Описание: Выполняет вход пользователя.
Тело запроса (form-data):
| Поле | Тип | Описание |
|---|---|---|
| login | string | Логин пользователя |
| password | string | Пароль пользователя |
Валидация:
- login — не пустой, от 3 до 64 символов
- password — не пустой, от 6 до 64 символов
Ответ: 302 Redirect -> /
Описание: Отображает страницу регистрации.
Ответ: HTML-страница registration.html
Описание: Регистрирует нового пользователя.
Тело запроса (form-data):
| Поле | Тип | Описание |
|---|---|---|
| login | string | Уникальный логин |
| password | string | Пароль пользователя |
Валидация:
- login — не пустой, от 3 до 64 символов
- password — не пустой, от 6 до 64 символов
Ответ: 302 Redirect -> /auth/login
Описание: Выход пользователя из системы.
Поведение: Удаляет cookie сессии (если существует)
Ответ: 302 Redirect -> /auth/login
Описание: Главная страница приложения.
Ответ: HTML-страница index.html
Описание: Добавляет новую локацию в список пользователя.
Тело запроса (form-data):
| Поле | Тип | Описание |
|---|---|---|
| name | string | Название локации |
| lat | decimal | Широта |
| lon | decimal | Долгота |
Ответ: 302 Redirect -> на страницу-источник (Referer) или /
Описание: Удаляет локацию пользователя по ID.
Параметры пути:
| Параметр | Тип | Описание |
|---|---|---|
| id | long | ID локации |
Ответ: 302 Redirect -> /
Описание: Поиск локаций по названию через OpenWeather API.
Query-параметры:
| Параметр | Тип | Описание |
|---|---|---|
| query | string | Название города |
Валидация: query не должен быть пустым
Ответ: HTML-страница search_result.html
- Java 17+
- PostgreSQL
- Maven
- Tomcat 11
- API ключ OpenWeatherMap
- Получение исходного кода
- Клонируйте репозиторий
git clone https://github.com/ferty460/weather_app.git
- Подготовка базы данных
- Создание БД и пользователя
CREATE DATABASE weatherapp; CREATE USER weather_user WITH PASSWORD 'strong_password'; GRANT ALL PRIVILEGES ON DATABASE weatherapp TO weather_user;
- Миграции - применяются автоматически при старте приложения
-
Настройка переменных окружения
- Создайте рабочий .env
- Заполните переменные
-
Сборка приложения
mvnw clean package
- После сборки в папке target появится файл ROOT.war
-
Деплой в Tomcat
- Скопируйте ROOT.war в папку webapps вашего Tomcat-сервера
-
Перезапустите Tomcat
После перезапуска приложение будет доступно по адресу http://localhost:8080/