- π General Information
- π Business Requirements
- π Git flow
- π€ Architecture
- π Endpoints
- π Database Model
- π¨ Software Technologies
- βοΈ Setup
- πΈ Screenshots
- π Acknowledgements
- π¬ Contact
The idea of the project is to develop a web-based library management system. This is a project that manages and stores information about books, users, authors and borrows. The system helps both users and admins to keep track of all the books that are available in the library at the current time. It also stores information about borrowed and returned books. This task if carried out manually will be tedious and includes chances of mistakes. These errors are avoided by allowing the system to keep track of information such as date of borrow and date to return the book.
Our app allows to:
- View a list of all books
- Add new books to the list
- Update book info
- Borrow a book
- Add user to the library system
- Delete user from the system
- Update user info
- Users can return books that they have borrowed
- View present borrows in a list
- Search in the borrows list by a keyword
The main branch contains production-ready code that can be released. The main branch was created at the beginning of the project and was maintained throughout the development process.
Many feature branches were used to enable parallel development on the same or on completely different functionalities of the project. The first step is to checkout from the main branch. Once the changes are made to the code, the developer makes what is known as a pull request, or a request to have other developers on the team do a code review to ensure that the local branch does not have any errors, and also that it will not cause any errors when merged into the main branch. Once a branch has been thoroughly reviewed, it can then be merged into the main branch.
The project consists of two layers: front-end and back-end.
Packages:
controller
- all controller classes are in this package, they contain all the endpoints that are supported.dto
- contains all data transfer objects that were used to carry data between processesexceptions
- contains all the custom exceptions that are used throughout the project, the package also includes controller advice that is used for handling the exceptionsmodel
- entities, representing data that can be persisted to the databaserepository
- all interfaces used to access, manage, and persist data between Java object and relational database, automatically generate queries from the method namesservice
- this layer contains business logic, it mediates communication between a controller and repository layer
Packages:
component
model
services
The library data model consists of five tables divided into two subject areas:
- Books
- Members
The Books subject area stores information about two tables: `books` and `authors`.
The first table is the authors
table. It lists all the authors of the books that the library has in its collection. For each author we have:
id
β a unique ID for that authorfirst_name
β The first name of the author.last_name
β The last name of the author.
Next, we have the book
table. This table stores all the relevant details of every title that the library has in its collection. The book table consists of the attributes:
isbn
β A unique ID for each book title, which in the publishing industry is the International Standard Book Number (ISBN).title
β The book's title.category
β The bookβs categorypublication_year
β The year when the book was published.author
- references the authors table
The purpose of this subject area is to manage information about library members and the books they borrow. It consists of two tables `users` and `borrows`.
The first table in this area is the users
table. It contains all the relevant info about library members. Its attributes are as follows:
id
β A unique ID for each member.first_name
β The memberβs first name.last_name
β The memberβs last name.email
- The memberβs email addressjoined_date
-The date when the member was registered
The next table is the borrows
table. It stores information about all the books that have ever been loaned. This way, we can keep track of the library inventory and the status of any loaned books. This table consists of the following attributes:
id
-A unique ID for every loaned book.book_id
β References the books table.user_id
β References the member table.borrow_date
β The date when this book was loaned.returned_date
β The date when this book should be returned.
The database schema:
List of all software technologies used during the development process:
- Java 11
- Spring Boot
- Hibernate
- DB integration(MySQL)
- Git
- Angular
- Postman
- JUnit 5
- Mockito
- Asana
- Clone this repo
- Open the back-end project in IDE
- Press the
run button
- Open the front-end project in IDE
- Run
npm install
command in terminal - Run
ng serve
- Navigate to
http://localhost:4200/
Many thanks to @Georgi Minkov for his guidance and support throughout the whole process of development.
Created by @Michael Ivanov and @Maria Markova