Skip to content

Starostina-elena/is_lab1

Repository files navigation

Информационная Система "Подземелья и драконы"

Описание

Это веб-приложение на базе Spring MVC, предназначенное для управления персонажами, драконами и локациями. Система позволяет выполнять полный набор CRUD операций, а также дополнительные функции для манипуляции объектами (например, перемещение персонажей между локациями, фиксация победы группы персонажей над драконом, etc)

Технологический стек

  • Backend Framework: Spring MVC 6.0.12
  • ORM: JPA + Hibernate
  • Database: PostgreSQL
  • HikariCP
  • Infinispan
  • MinIO
  • Build Tool: Maven 3
  • Java Version: 17
  • Packaging: WAR (Web Application Archive)

Основные возможности

Управление объектами

  • Dragon
  • Character
  • Location
  • Coordinates

Фильтрация и сортировка

  • Фильтрация таблиц по строковым колонкам (неполное совпадение)
  • Сортировка объектов в таблицах

Синхронизация в реальном времени

  • Автоматическое обновление интерфейса у всех пользователей при изменении данных
  • Синхронизация изменений с базой данных на сервере

Специальные операции

  • Расчет среднего значения поля age для всех драконов
  • Подсчет количества драконов с определенными характеристиками головы
  • Поиск драконов по названию
  • Убийство указанного дракона
  • Отправка команды убийц в пещеру

Структура базы данных

Система оперирует следующими основными сущностями:

Dragon

public class Dragon {
    private long id;                          // Автогенерируемый уникальный ID
    private String name;                      // Название дракона (не может быть пусто)
    private Coordinates coordinates;          // Координаты дракона
    private ZonedDateTime creationDate;       // Дата создания (автогенерируется)
    private DragonCave cave;                  // Пещера дракона
    private Person killer;                    // Убийца дракона (может быть null)
    private long age;                         // Возраст дракона (> 0)
    private Color color;                      // Цвет дракона
    private DragonType type;                  // Тип дракона
    private DragonCharacter character;        // Характер дракона
    private DragonHead head;                  // Голова дракона
}

Person

public class Person {
    private long id;                          // Автогенерируемый уникальный ID
    private String name;                      // Имя персонажа (не может быть пусто)
    private Color eyeColor;                   // Цвет глаз (может быть null)
    private Color hairColor;                  // Цвет волос (может быть null)
    private Location location;                // Локация персонажа
    private Long weight;                      // Вес персонажа (> 0, может быть null)
    private Country nationality;              // Национальность (не может быть null)
}

Location

public class Location {
    private long id;                          // Автогенерируемый уникальный ID
    private Double x;                         // X координата
    private float y;                          // Y координата
    private Float z;                          // Z координата
    private String name;                      // Название локации (не может быть пусто)
}

Coordinates

public class Coordinates {
    private long id;                          // Автогенерируемый уникальный ID
    private Integer x;                        // X координата (> -842)
    private Long y;                           // Y координата (≤ 154)
}

Вспомогательные классы

DragonCave

  • depth: Integer (может быть null)

DragonHead

  • eyesCount: Integer (не может быть null)

Перечисления (Enums)

Color: RED, BLACK, ORANGE, WHITE, BROWN

DragonType: WATER, UNDERGROUND, AIR, FIRE

DragonCharacter: CUNNING, WISE, GOOD, CHAOTIC, CHAOTIC_EVIL

Country: GERMANY, VATICAN, JAPAN

Установка и запуск

Предварительные требования

  • Java 17+
  • Maven 3+
  • PostgreSQL (для базы данных)

Сборка проекта

mvn clean install

Развертывание

Приложение упаковывается в файл .war, который можно развернуть на сервере приложений (Tomcat, WildFly и т.д.):

mvn clean package

Скомпилированный WAR файл будет находиться в директории target/lab1-1.0-SNAPSHOT.war

Структура проекта

src/
├── main/
│   ├── java/org/lia/
│   │   ├── controller/            # REST контроллеры
│   │   ├── service/               # Бизнес-логика
│   │   ├── repository/            # Доступ к данным
│   │   ├── models/                # Модели данных (Dragon, Person, etc.)
│   │   ├── dto/                   # Data Transfer Objects
│   │   ├── config/                # Конфигурация Spring
│   │   ├── cache/                 # Кеширование
│   │   ├── imports/               # Импорт данных
│   │   └── web/                   # Веб-конфигурация
│   ├── resources/
│   │   ├── application.properties  # Конфигурация приложения
│   │   ├── hotrod-client.properties
│   │   ├── message.properties
│   │   └── webapp/
│   │       ├── css/               # Стили
│   │       ├── js/                # JavaScript файлы
│   │       └── WEB-INF/
│   │           ├── views/         # JSP страницы
│   │           ├── web.xml        # Дескриптор развертывания
│   │           └── jboss-deployment-structure.xml
│   └── test/
└── target/
    └── Собранные артефакты и classes

Основные компоненты

Controllers

Обработчики HTTP запросов для CRUD операций над драконами и выполнения специальных операций.

Services

Реализация бизнес-логики приложения, включая валидацию данных и выполнение специальных операций.

Repositories

DAO слой для взаимодействия с базой данных через JPA/Hibernate.

Models

Сущности JPA, отображающиеся на таблицы в базе данных.

Views (JSP)

Пользовательский интерфейс в виде JSP страниц:

  • index.jsp - главная страница со списком драконов
  • dragon/create.jsp - форма создания дракона
  • dragon/edit.jsp - форма редактирования дракона
  • Другие страницы для управления связанными объектами

Функции базы данных

Некоторые операции реализованы как SQL функции в PostgreSQL для эффективного выполнения на уровне БД:

  • Расчет среднего возраста драконов
  • Подсчет драконов по параметрам головы
  • Поиск драконов по названию
  • Операции убийства

Примечания

  • Все операции с данными выполняются на сервере и синхронизируются с БД
  • При удалении объекта, у которого есть связанные объекты, операция будет отменена
  • Изменения видны всем авторизованным пользователям в реальном времени
  • Система использует пул соединений HikariCP для оптимального управления подключениями к БД

Тестирование

Для тестирования используются тестовые данные из файлов:

  • sample_dragons2.json - примеры драконов для импорта
  • persons.json - примеры персонажей

Развертывание с Docker

Проект включает Docker Compose конфигурацию для запуска сервисов:

docker-compose up -d

About

CRUD сервис для удобного управления персонажами, драконами и локациями

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors