Приложение было переписано с предыдущей лабораторной работы с использованием следующих технологий:
- Back-end: Spring Boot.
- Front-end: React + TypeScript.
- Взаимодействие между back-end и front-end происходит через REST API.
- Приложение включает 2 страницы: стартовую и основную.
- Десктопный режим: для экранов шириной ≥ 1210 пикселей.
- Планшетный режим: для экранов шириной ≥ 842 пикселей, но < 1210 пикселей.
- Мобильный режим: для экранов шириной < 842 пикселей.
- "Шапка": отображает ФИО студента, номер группы и номер варианта.
- Форма авторизации: включает поля для ввода логина и пароля. Пользователи хранятся в базе данных с хэшированными паролями. Доступ на основную страницу запрещен для неавторизованных пользователей.
-
Поля ввода:
- Кнопка выбора координаты X (-4, -3, -2, -1, 0, 1, 2, 3, 4).
- Текстовое поле для ввода координаты Y (-3 ... 3).
- Кнопка выбора радиуса (-4, -3, -2, -1, 0, 1, 2, 3, 4).
-
Валидация: предотвращает ввод некорректных данных (например, буквы вместо чисел, отрицательные значения радиуса).
-
Картинка области: отображает координатную плоскость в зависимости от номера варианта и введенных координат. Клик по картинке отправляет координаты на сервер для проверки попадания в область. Цвет точек изменяется в зависимости от попадания.
-
Таблица результатов: отображает список предыдущих проверок.
-
Кнопка выхода: позволяет пользователю завершить сессию и вернуться на стартовую страницу.
-
Git
# Проверка установки git --version -
Docker Desktop
# Проверка установки docker --version docker-compose --version
-
Node.js (LTS версия)
# Проверка установки node --version npm --version -
JDK 17
# Проверка установки java --version -
PostgreSQL
# Проверка установки psql --version
lab4/
├── web_server/ # Backend (Spring Boot)
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ └── resources/
│ └── pom.xml
├── point-checker-frontend/ # Frontend (React + TypeScript)
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ └── api/
│ └── package.json
└── docker-compose.yml
- Backend Dockerfile (
web_server/Dockerfile):
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY .mvn/ .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:go-offline
COPY src ./src
CMD ["./mvnw", "spring-boot:run"]- Frontend Dockerfile (
point-checker-frontend/Dockerfile):
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]- Docker Compose (
docker-compose.yml):
version: '3.8'
services:
postgres:
image: postgres:14-alpine
environment:
POSTGRES_DB: point_checker
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
backend:
build: ./web_server
ports:
- "8080:8080"
depends_on:
- postgres
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/point_checker
SPRING_DATASOURCE_USERNAME: postgres
SPRING_DATASOURCE_PASSWORD: postgres
frontend:
build: ./point-checker-frontend
ports:
- "5173:5173"
depends_on:
- backend
environment:
VITE_API_URL: http://localhost:8080/api
volumes:
postgres_data:-
Клонируйте репозиторий:
git clone <url-репозитория> cd lab4
-
Запустите контейнеры:
docker-compose up --build
-
Откройте приложение:
- Frontend: http://localhost:5173
- Backend API: http://localhost:8080/api
-
Backend:
cd web_server ./mvnw spring-boot:run -
Frontend:
cd point-checker-frontend npm install npm run dev
Достаточно интересная лабораторная работа. Даже с кайфом делал.