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.
- 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
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.ymlReact Frontend
↓
CORS allows request
↓
Controller receives request
↓
DTO mapped using ModelMapper
↓
Service processes logic
↓
Repository accesses PostgreSQL
↓
Redis caches result
↓
Swagger documents endpoint
↓
Logs generatedgit clone https://github.com/Yashmenaria1/ShelfSync-Library-Management-System.git
cd ShelfSync-Library-Management-Systemcd backend
mvn clean install
mvn spring-boot:runcd frontend
npm install
npm startThe frontend will run on http://localhost:3000 and connect to the backend API.
- Backend: Java, Spring Boot, Spring Data JPA, MVC, Microservices, PostgreSQL
- Frontend: React.js, Bootstrap
- Version Control: Git & GitHub
- Build Tools: Maven, npm, Tomcat
This project is licensed under the MIT License. See the LICENSE file for details.
Yash Menaria – GitHub Profile