Skip to content

🔥 A web-based application designed to efficiently manage library operations. Features include user authentication with role-based access (Admin, Librarian, Member), comprehensive management of books, authors, categories, and loan processes. Built with Java, Spring Boot, Spring Security, PostgreSQL, and Docker, ensuring scalability and security.

Notifications You must be signed in to change notification settings

CyberScoper/LibraryManagementSystem

Repository files navigation

📚 Library Management System for STU

CodeFactor

‼️ 🇺🇸 English Version ‼️ ‼️ 🇸🇰 Slovak Version ‼️

🛠️🧪 Тестовая Среда

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

  • Локальная Инстанция Приложения:

    • http://158.101.219.58:8080/?continue
    • Эта среда позволяет интерактивно тестировать функции приложения непосредственно через веб-браузер.
    • Дефолтные учетные данные:
      • Email: tester@tester.com
      • Пароль: password
  • Live Demo Приложения:

    • https://murzin.tech/?continue
    • Доступ к полностью функциональной версии системы управления библиотекой, где вы можете попробовать все доступные функции и проверить их правильную реализацию.
    • Дефолтные учетные данные:
      • Email: tester@tester.com
      • Пароль: password
Обзор системы управления библиотекой

📑 Table of Contents

📖 Общая информация

Library Management System — это веб-приложение для управления библиотекой. Оно позволяет просматривать каталог библиотеки и выполнять действия с библиотечными материалами и пользователями. 📚👥

Проект создан в рамках учебного семинара:

  • Курс: IKT - Программирование на Java

✨ Возможности

👤 Управление пользователями

Роли (основа для авторизации):

  • Администратор
  • Библиотекарь
  • Читатель

Доступные операции:

  • 🆕 Создание пользователя (добавление нового пользователя)
  • ✏️ Редактирование и обновление данных пользователя
  • 🗑️ Удаление пользователя
  • 🔐 Аутентификация (вход/выход)
  • 👀 Показать всех пользователей (с поиском, фильтрацией, сортировкой и пагинацией)
  • 📄 Показать детали пользователя для конкретного пользователя
  • 🧑‍💼 Показать детали текущего пользователя (Мои данные)

📚 Управление библиотечными материалами/ресурсами и каталогом

🖋️ Авторы

Доступные операции:

Операция Изображение
➕ Добавить нового автора Добавить автора
✏️ Редактировать и обновлять автора Редактировать автора
🗑️ Удалить автора Удалить автора
👀 Просмотреть всех авторов Просмотреть авторов

🗂️ Категории

Доступные операции:

Операция Изображение
➕ Добавить новую категорию Добавить категорию
✏️ Редактировать и обновлять категорию Редактировать категорию
🗑️ Удалить категорию Удалить категорию
👀 Просмотреть все категории Просмотреть категории

📖 Работы

Доступные операции:

Операция Изображение
➕ Добавить новую работу Добавить работу
✏️ Редактировать и обновлять работу Редактировать работу
🗑️ Удалить работу Удалить работу
👀 Просмотреть все работы Просмотреть работы
📦 Просмотреть все копии книг конкретной работы Просмотреть копии книг

📕 Книги

Доступные операции:

Операция Изображение
➕ Добавить новую книгу Добавить книгу
✏️ Редактировать и обновлять книгу Редактировать книгу
🗑️ Удалить книгу Удалить книгу
👀 Просмотреть все книги Просмотреть книги

🔄 Заимствование ресурсов - Займы

Операция Изображение
🆙 Начать займ Начать займ
🏁 Завершить займ Завершить займ
📚 Просмотреть все займы конкретной книги Просмотреть займы конкретной книги
👥 Просмотреть займы по читателю Просмотреть займы по читателю

📧 Отправка почтовых уведомлений

  • 📩 Отправить письмо "Добро пожаловать" пользователю при создании его аккаунта
  • 📬 Отправить письмо "Займ начат" читателю при заимствовании книги
  • 📥 Отправить письмо "Займ завершен" читателю при возврате книги

🛠️ Технологии

  • Backend: Java, Spring Boot, Spring Security
  • Frontend: Thymeleaf, Bootstrap, HTML5, CSS3, JavaScript, jQuery
  • База данных: Flyway, PostgreSQL
  • Контейнеризация: Docker
  • IDE: IntelliJ IDEA

📊 Модель базы данных

Модель базы данных

База данных для Library Management System состоит из следующих таблиц и связей между ними:

Таблицы и их поля

  1. 🗂️ category

    Поле Тип Описание
    id integer (PK) Уникальный идентификатор категории
    name varchar Название категории
  2. 🖋️ work

    Поле Тип Описание
    id integer (PK) Уникальный идентификатор работы
    title varchar Название работы
    description varchar Описание работы
  3. 👤 author

    Поле Тип Описание
    id integer (PK) Уникальный идентификатор автора
    first_name varchar Имя автора
    last_name varchar Фамилия автора
  4. 📚 book

    Поле Тип Описание
    id integer (PK) Уникальный идентификатор книги
    work_id integer (FK) Ссылка на работу
    publisher_name varchar Название издателя
    year_of_publishing timestamp Год издания
    isbn varchar ISBN книги
    book_status status Статус книги
    available boolean Доступность книги
  5. 👥 user

    Поле Тип Описание
    id integer (PK) Уникальный идентификатор пользователя
    first_name varchar Имя пользователя
    last_name varchar Фамилия пользователя
    password varchar Пароль пользователя
    email varchar Email пользователя
    date_of_birth timestamp Дата рождения
    contact_number varchar Контактный номер
    enabled boolean Статус активации
  6. 📝 loan

    Поле Тип Описание
    id integer (PK) Уникальный идентификатор займа
    member_id integer (FK) Ссылка на читателя
    librarian_id integer (FK) Ссылка на библиотекаря
    book_id integer (FK) Ссылка на книгу
    date_issued timestamp Дата выдачи
    date_returned timestamp Дата возврата
  7. 🔐 role

    Поле Тип Описание
    id integer (PK) Уникальный идентификатор роли
    name varchar Название роли (Admin, Librarian, Member)
  8. 🔗 user_role

    Поле Тип Описание
    user_id integer (FK) Ссылка на пользователя
    role_id integer (FK) Ссылка на роль
  9. 🔗 work_author

    Поле Тип Описание
    work_id integer (FK) Ссылка на работу
    author_id integer (FK) Ссылка на автора
  10. 🔗 work_category

    Поле Тип Описание
    work_id integer (FK) Ссылка на работу
    category_id integer (FK) Ссылка на категорию

🔗 Связи между таблицами

  1. work_author:

    • work_id ↔️ work.id
    • author_id ↔️ author.id
  2. work_category:

    • work_id ↔️ work.id
    • category_id ↔️ category.id
  3. book:

    • work_id ↔️ work.id
  4. loan:

    • member_id ↔️ user.id (читатель)
    • librarian_id ↔️ user.id (библиотекарь)
    • book_id ↔️ book.id
  5. user_role:

    • user_id ↔️ user.id
    • role_id ↔️ role.id

📝 Ключевые моменты

  • Первичные ключи (PK) гарантируют уникальность записей в каждой таблице.
  • Внешние ключи (FK) обеспечивают связи между таблицами и поддерживают целостность данных.
  • Роли и пользователи связаны через промежуточную таблицу user_role для реализации авторизации.
  • Займы (loan) связывают книги, читателей и библиотекарей, отслеживая выдачу и возврат книг.
  • Книги (book) связаны с работами (work) и могут иметь несколько категорий и авторов через таблицы work_category и work_author.

🚀 Начало работы

🔧 Требования

Вам необходимо установить следующее:

  • Docker вместе с docker-compose
  • Java Development Kit (JDK)
  • Maven (если не используется предоставленный Maven Wrapper)

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

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

  1. Перейдите в папку проекта (выполняется из корневой директории репозитория):

    cd library-management-system/

    Перейти в папку проекта

  2. Соберите .jar файл проекта в папке target:

    ./mvnw clean package -DskipTests

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

  3. Соберите и запустите Docker-окружение и локальный веб-сервер:

    docker-compose up

    (Остановить можно с помощью Ctrl+C) Запуск Docker Compose

  4. Откройте приложение в браузере: http://localhost:8080/

Если вам нужно изменить код и применить изменения:

  1. Остановите и удалите Docker-контейнеры и их тома:

    docker-compose down

    Остановка Docker Compose

  2. Удалите Docker-образ library-management-system.jar:

    docker rmi library-management-system.jar

    Удаление Docker образа

  3. Повторите шаги 2-4.

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

Вы можете создать установочные пакеты .deb и .rpm с помощью jpackage. Для этого выполните следующие шаги:

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

  • Для сборки .deb пакета:

    • Установите fakeroot:
      sudo apt-get update
      sudo apt-get install fakeroot
  • Для сборки .rpm пакета:

    • Установите rpm-build:
      sudo apt-get update
      sudo apt-get install rpm

🏗️ Сборка .deb пакета

Выполните следующую команду из корневой директории проекта:

jpackage --input target \
    --name LibraryManagementSystem \
    --main-jar library-management-system.jar \
    --type deb \
    --icon assets/images/icon.png \
    --dest out_dir

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

🏗️ Сборка .rpm пакета

Выполните следующую команду из корневой директории проекта:

jpackage --input target \
    --name LibraryManagementSystem \
    --main-jar library-management-system.jar \
    --type rpm \
    --icon assets/images/icon.png \
    --dest out_dir

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

🛠️ Дополнительные опции

  • --app-version: Указать версию приложения.
  • --icon: Добавить иконку приложения (например, icon.png).
  • --dest: Указать директорию для сохранения созданного пакета.

Пример с иконкой:

jpackage --input target \
    --name LibraryManagementSystem \
    --main-jar library-management-system.jar \
    --type deb \
    --icon assets/images/icon.png \
    --dest out_dir

Примечания:

  • Убедитесь, что у вас установлен JDK версии 14 или выше, включающий jpackage.
  • jpackage создает установочные пакеты под ту платформу, на которой он запущен. Для создания .rpm пакета рекомендуется использовать системы на базе RPM (например, Fedora или CentOS).

🗄️ Управление базой данных

Вы можете просматривать базу данных PostgreSQL внутри окна базы данных IntelliJ IDEA следующим образом:

  1. Перейдите в: View -> Tool Windows -> Database

  2. Добавьте новый источник данных:

    • Нажмите кнопку +
    • Выберите Data Source from URL и введите следующие данные:

    URL: jdbc:postgresql:///postgres
    Driver: PostgreSQL

  3. Настройте свойства подключения:

    • Username: postgres
    • Password: postgres
    • Database: postgres
    • Host: localhost
    • Port: 5432

✉️ Тестирование отправки почты

MailHog Web UI, инструмент для тестирования отправки электронной почты разработчиками, доступен по адресу: http://localhost:8025/ MailHog Web UI

👥 Кредиты

Руководитель проекта, Старший разработчик, Главный архитектор, Технический директор, Менеджер по кофе, Гуру базы данных, Инженер по тестированию, Специалист по деплоям, Дизайнер интерфейсов, Администратор серверов, Главный мотиватор, Ответственный за мемы, Оракул системы, Повелитель багов, Легенда кодинга, Исполнитель танцев с бубном, Чародей коммитов, Сейф-провайдер продакшна, Король консоли, Верховный повелитель логов, Локатор потерянных точек с запятой, Мастер слияний, Документатор хаоса, Ломатель продакшна (по пятницам), Специалист по "работает на моей машине", Властелин веток, Хранитель деплой-ключей, Собиратель стек-трейсов:

  • Aleksandr Murzin 😘

Programming in Java
Faculty of Electrical Engineering and Information Technology of STU in Bratislava


About

🔥 A web-based application designed to efficiently manage library operations. Features include user authentication with role-based access (Admin, Librarian, Member), comprehensive management of books, authors, categories, and loan processes. Built with Java, Spring Boot, Spring Security, PostgreSQL, and Docker, ensuring scalability and security.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published