https://github.com/cyberscoper/librarymanagementsystem
🔥 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.
https://github.com/cyberscoper/librarymanagementsystem
bootstrap css3 docker-compose html intellij-idea java javascript jquery postgresql spring-boot stu
Last synced: 3 months ago
JSON representation
🔥 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.
- Host: GitHub
- URL: https://github.com/cyberscoper/librarymanagementsystem
- Owner: CyberScoper
- Created: 2024-12-09T11:51:39.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-10T09:24:59.000Z (over 1 year ago)
- Last Synced: 2025-03-26T14:46:41.598Z (over 1 year ago)
- Topics: bootstrap, css3, docker-compose, html, intellij-idea, java, javascript, jquery, postgresql, spring-boot, stu
- Language: HTML
- Homepage: http://158.101.219.58:8080/
- Size: 159 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 📚 Library Management System for STU
[](https://www.codefactor.io/repository/github/cyberscopetoday/librarymanagementsystem)
‼️ [🇺🇸 English Version](./README_EN.md) ‼️
‼️ [🇸🇰 Slovak Version](./README_SK.md) ‼️
### 🛠️🧪 Тестовая Среда
Для простого тестирования и демонстрации доступны следующие среды:
- **Локальная Инстанция Приложения:**
- [http://158.101.219.58:8080/?continue](http://158.101.219.58:8080/?continue)
- Эта среда позволяет интерактивно тестировать функции приложения непосредственно через веб-браузер.
- **Дефолтные учетные данные:**
- **Email:** `tester@tester.com`
- **Пароль:** `password`
- **Live Demo Приложения:**
- [https://murzin.tech/?continue](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. **Перейдите в папку проекта (выполняется из корневой директории репозитория):**
```bash
cd library-management-system/
```

2. **Соберите `.jar` файл проекта в папке `target`:**
```bash
./mvnw clean package -DskipTests
```

3. **Соберите и запустите Docker-окружение и локальный веб-сервер:**
```bash
docker-compose up
```
*(Остановить можно с помощью `Ctrl+C`)*

4. **Откройте приложение в браузере:**
[http://localhost:8080/](http://localhost:8080/)
**Если вам нужно изменить код и применить изменения:**
1. **Остановите и удалите Docker-контейнеры и их тома:**
```bash
docker-compose down
```

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

3. **Повторите шаги 2-4.**
### 📦 Сборка пакетов
Вы можете создать установочные пакеты `.deb` и `.rpm` с помощью `jpackage`. Для этого выполните следующие шаги:
#### 📥 Предварительные требования
- **Для сборки `.deb` пакета:**
- Установите `fakeroot`:
```bash
sudo apt-get update
sudo apt-get install fakeroot
```
- **Для сборки `.rpm` пакета:**
- Установите `rpm-build`:
```bash
sudo apt-get update
sudo apt-get install rpm
```
#### 🏗️ Сборка `.deb` пакета
Выполните следующую команду из корневой директории проекта:
```bash
jpackage --input target \
--name LibraryManagementSystem \
--main-jar library-management-system.jar \
--type deb \
--icon assets/images/icon.png \
--dest out_dir
```

#### 🏗️ Сборка `.rpm` пакета
Выполните следующую команду из корневой директории проекта:
```bash
jpackage --input target \
--name LibraryManagementSystem \
--main-jar library-management-system.jar \
--type rpm \
--icon assets/images/icon.png \
--dest out_dir
```

#### 🛠️ Дополнительные опции
- `--app-version`: Указать версию приложения.
- `--icon`: Добавить иконку приложения (например, `icon.png`).
- `--dest`: Указать директорию для сохранения созданного пакета.
**Пример с иконкой:**
```bash
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/](http://localhost:8025/)

## 👥 Кредиты
**Руководитель проекта, Старший разработчик, Главный архитектор, Технический директор, Менеджер по кофе, Гуру базы данных, Инженер по тестированию, Специалист по деплоям, Дизайнер интерфейсов, Администратор серверов, Главный мотиватор, Ответственный за мемы, Оракул системы, Повелитель багов, Легенда кодинга, Исполнитель танцев с бубном, Чародей коммитов, Сейф-провайдер продакшна, Король консоли, Верховный повелитель логов, Локатор потерянных точек с запятой, Мастер слияний, Документатор хаоса, Ломатель продакшна (по пятницам), Специалист по "работает на моей машине", Властелин веток, Хранитель деплой-ключей, Собиратель стек-трейсов:**
- **Aleksandr Murzin** 😘
---
**Programming in Java**
**Faculty of Electrical Engineering and Information Technology of STU in Bratislava**
---