Skip to content

Yashmenaria1/ShelfSync-Library-Management-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java Spring Boot React Maven PostgreSQL License: MIT Tomcat

ShelfSync-Library Management System

ShelfSync is a scalable full-stack Library Management System developed with Spring Boot and React.js, designed to streamline library operations. It supports book cataloging, member management, borrow/return workflows, and fast search functionality with a responsive user interface.

The current codebase in this repository represents a basic LMS backend implementation built using Spring Boot with layered architecture, RESTful APIs, JPA/Hibernate integration, and PostgreSQL database support. I am currently working on the advanced enterprise-level version of ShelfSync with enhanced architecture, security, scalability, and additional production-grade features. Once completed, the full enterprise edition of ShelfSync will be moved to a separate dedicated GitHub repository.


Features

  • Add, update, delete books
  • Borrow and return books
  • Search for books by title, author, or category
  • Manage authors and categories
  • User-friendly frontend built with React
  • RESTful API backend with Spring Boot

Project Structure

ShelfSync-Library-Management-System/
│
├── backend/                                  # Spring Boot Backend
│   │
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/
│   │   │   │       └── shelfsync/
│   │   │   │
│   │   │   │           ├── ShelfSyncApplication.java
│   │   │   │
│   │   │   │           ├── config/                  # Configuration Classes
│   │   │   │           │   ├── SwaggerConfig.java
│   │   │   │           │   ├── RedisConfig.java
│   │   │   │           │   ├── AppConfig.java
│   │   │   │           │   ├── ModelMapperConfig.java
│   │   │   │           │   └── CorsConfig.java
│   │   │   │
│   │   │   │           ├── controller/              # REST Controllers
│   │   │   │           │   ├── AuthController.java
│   │   │   │           │   ├── UserController.java
│   │   │   │           │   ├── BookController.java
│   │   │   │           │   ├── CategoryController.java
│   │   │   │           │   ├── AuthorController.java
│   │   │   │           │   ├── BorrowController.java
│   │   │   │           │   ├── FineController.java
│   │   │   │           │   ├── NotificationController.java
│   │   │   │           │   └── AdminController.java
│   │   │   │
│   │   │   │           ├── service/                 # Service Interfaces
│   │   │   │           │   ├── AuthService.java
│   │   │   │           │   ├── UserService.java
│   │   │   │           │   ├── BookService.java
│   │   │   │           │   ├── CategoryService.java
│   │   │   │           │   ├── AuthorService.java
│   │   │   │           │   ├── BorrowService.java
│   │   │   │           │   ├── FineService.java
│   │   │   │           │   ├── EmailService.java
│   │   │   │           │   ├── RedisCacheService.java
│   │   │   │           │   └── NotificationService.java
│   │   │   │
│   │   │   │           ├── service/impl/            # Service Implementations
│   │   │   │           │   ├── AuthServiceImpl.java
│   │   │   │           │   ├── UserServiceImpl.java
│   │   │   │           │   ├── BookServiceImpl.java
│   │   │   │           │   ├── CategoryServiceImpl.java
│   │   │   │           │   ├── AuthorServiceImpl.java
│   │   │   │           │   ├── BorrowServiceImpl.java
│   │   │   │           │   ├── FineServiceImpl.java
│   │   │   │           │   ├── EmailServiceImpl.java
│   │   │   │           │   ├── RedisCacheServiceImpl.java
│   │   │   │           │   └── NotificationServiceImpl.java
│   │   │   │
│   │   │   │           ├── repository/              # JPA Repositories
│   │   │   │           │   ├── UserRepository.java
│   │   │   │           │   ├── RoleRepository.java
│   │   │   │           │   ├── BookRepository.java
│   │   │   │           │   ├── CategoryRepository.java
│   │   │   │           │   ├── AuthorRepository.java
│   │   │   │           │   ├── BorrowRepository.java
│   │   │   │           │   ├── FineRepository.java
│   │   │   │           │   └── NotificationRepository.java
│   │   │   │
│   │   │   │           ├── entity/                  # Database Entities
│   │   │   │           │   ├── BaseEntity.java
│   │   │   │           │   ├── User.java
│   │   │   │           │   ├── Role.java
│   │   │   │           │   ├── Author.java
│   │   │   │           │   ├── Book.java
│   │   │   │           │   ├── Category.java
│   │   │   │           │   ├── BorrowRecord.java
│   │   │   │           │   ├── Fine.java
│   │   │   │           │   └── Notification.java
│   │   │   │
│   │   │   │           ├── dto/
│   │   │   │           │   ├── request/             # Request DTOs
│   │   │   │           │   │   ├── LoginRequest.java
│   │   │   │           │   │   ├── RegisterRequest.java
│   │   │   │           │   │   ├── BookRequest.java
│   │   │   │           │   │   ├── BorrowRequest.java
│   │   │   │           │   │   └── FineRequest.java
│   │   │   │           │   │
│   │   │   │           │   └── response/            # Response DTOs
│   │   │   │           │       ├── JwtResponse.java
│   │   │   │           │       ├── ApiResponse.java
│   │   │   │           │       ├── BookResponse.java
│   │   │   │           │       ├── UserResponse.java
│   │   │   │           │       └── BorrowResponse.java
│   │   │   │
│   │   │   │           ├── security/
│   │   │   │           │   ├── config/
│   │   │   │           │   │   └── SecurityConfig.java
│   │   │   │           │   │
│   │   │   │           │   ├── jwt/
│   │   │   │           │   │   ├── JwtAuthenticationFilter.java
│   │   │   │           │   │   ├── JwtService.java
│   │   │   │           │   │   ├── JwtAuthenticationEntryPoint.java
│   │   │   │           │   │   ├── JwtUtil.java
│   │   │   │           │   │   └── JwtTokenProvider.java
│   │   │   │           │   │
│   │   │   │           │   └── service/
│   │   │   │           │       └── CustomUserDetailsService.java
│   │   │   │
│   │   │   │           ├── exception/
│   │   │   │           │   ├── GlobalExceptionHandler.java
│   │   │   │           │   ├── ResourceNotFoundException.java
│   │   │   │           │   ├── DuplicateResourceException.java
│   │   │   │           │   ├── UnauthorizedException.java
│   │   │   │           │   ├── InvalidRequestException.java
│   │   │   │           │   └── TokenExpiredException.java
│   │   │   │
│   │   │   │           ├── validation/
│   │   │   │           │   ├── PasswordValidator.java
│   │   │   │           │   └── EmailValidator.java
│   │   │   │
│   │   │   │           ├── mapper/
│   │   │   │           │   └── EntityMapper.java
│   │   │   │
│   │   │   │           ├── util/
│   │   │   │           │   ├── AppConstants.java
│   │   │   │           │   ├── DateUtil.java
│   │   │   │           │   └── PaginationUtil.java
│   │   │   │
│   │   │   │           ├── scheduler/
│   │   │   │           │   ├── FineScheduler.java
│   │   │   │           │   └── NotificationScheduler.java
│   │   │   │
│   │   │   │           ├── aspect/
│   │   │   │           │   ├── PerformanceTrackingAspect.java
│   │   │   │           │   └── LoggingAspect.java
│   │   │   │
│   │   │   │           ├── cache/
│   │   │   │           │   └── RedisCacheManager.java
│   │   │   │
│   │   │   │           └── enums/
│   │   │   │               ├── RoleType.java
│   │   │   │               ├── BookStatus.java
│   │   │   │               └── NotificationType.java
│   │   │   │
│   │   │   └── resources/
│   │   │       ├── application.yml
│   │   │       ├── application-dev.yml
│   │   │       ├── application-prod.yml
│   │   │       ├── data.sql
│   │   │       ├── schema.sql
│   │   │       ├── static/
│   │   │       └── templates/
│   │   │
│   │   └── test/
│   │       └── java/com/shelfsync/
│   │           ├── controller/
│   │           ├── service/
│   │           ├── repository/
│   │           └── security/
│   │
│   ├── docker/
│   │   ├── Dockerfile
│   │   ├── docker-compose.yml
│   │   └── redis.conf
│   │
│   ├── logs/
│   │   └── application.log
│   │
│   ├── .env
│   ├── .gitignore
│   ├── mvnw
│   ├── mvnw.cmd
│   ├── pom.xml
│   └── README.md
│
├── frontend/                                 # React Frontend
│   │
│   ├── public/
│   │   ├── favicon.ico
│   │   ├── index.html
│   │   └── manifest.json
│   │
│   ├── src/
│   │   ├── api/
│   │   │   ├── authApi.js
│   │   │   ├── bookApi.js
│   │   │   ├── borrowApi.js
│   │   │   └── axiosConfig.js
│   │   │
│   │   ├── assets/
│   │   │   ├── images/
│   │   │   ├── icons/
│   │   │   └── styles/
│   │   │
│   │   ├── components/
│   │   │   ├── common/
│   │   │   ├── auth/
│   │   │   ├── books/
│   │   │   ├── borrow/
│   │   │   ├── dashboard/
│   │   │   └── layout/
│   │   │
│   │   ├── context/
│   │   │   └── AuthContext.jsx
│   │   │
│   │   ├── hooks/
│   │   │   └── useAuth.js
│   │   │
│   │   ├── pages/
│   │   │   ├── LoginPage.jsx
│   │   │   ├── RegisterPage.jsx
│   │   │   ├── DashboardPage.jsx
│   │   │   ├── BooksPage.jsx
│   │   │   ├── BorrowPage.jsx
│   │   │   └── AdminPage.jsx
│   │   │
│   │   ├── routes/
│   │   │   ├── AppRoutes.jsx
│   │   │   └── ProtectedRoute.jsx
│   │   │
│   │   ├── services/
│   │   │   ├── authService.js
│   │   │   ├── bookService.js
│   │   │   └── borrowService.js
│   │   │
│   │   ├── utils/
│   │   │   ├── tokenUtils.js
│   │   │   └── constants.js
│   │   │
│   │   ├── App.jsx
│   │   ├── main.jsx
│   │   └── index.css
│   │
│   ├── .env
│   ├── .gitignore
│   ├── package.json
│   ├── vite.config.js
│   └── README.md
│
├── docs/                                     # Project Documentation
│   ├── API_DOCUMENTATION.md
│   ├── DATABASE_SCHEMA.md
│   ├── SECURITY_FLOW.md
│   ├── DEPLOYMENT_GUIDE.md
│   └── PROJECT_ARCHITECTURE.md
│
├── postman/
│   └── ShelfSync_API_Collection.json
│
├── .gitignore
├── LICENSE
├── README.md
└── docker-compose.yml

Backend Flow

React Frontend
        ↓
CORS allows request
        ↓
Controller receives request
        ↓
DTO mapped using ModelMapper
        ↓
Service processes logic
        ↓
Repository accesses PostgreSQL
        ↓
Redis caches result
        ↓
Swagger documents endpoint
        ↓
Logs generated

Installation

1. Clone the Repository

git clone https://github.com/Yashmenaria1/ShelfSync-Library-Management-System.git
cd ShelfSync-Library-Management-System

2. Backend (Spring Boot)

cd backend
mvn clean install
mvn spring-boot:run

3. Frontend (React)

cd frontend
npm install
npm start

The frontend will run on http://localhost:3000 and connect to the backend API.


Technologies Used

  • Backend: Java, Spring Boot, Spring Data JPA, MVC, Microservices, PostgreSQL
  • Frontend: React.js, Bootstrap
  • Version Control: Git & GitHub
  • Build Tools: Maven, npm, Tomcat

License

This project is licensed under the MIT License. See the LICENSE file for details.


Author

Yash MenariaGitHub Profile

About

ShelfSync is a scalable full-stack Library Management System developed with Spring Boot and React.js, designed to streamline library operations. It supports book cataloging, member management, borrow/return workflows, and fast search functionality with a responsive user interface.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors