The purpose of the API is to provide a management system for a library. There are two types of users in a Library.
AdminMember/User
Admin : Admin have the permission to Create, Update, Remove books from library. S/he has also the permission of accept and reject book loan requested by the users. If the book loan is issued and returned then S/he update the database.
Users : Users have only the permission to view books details, book-loans and also search by an author.
- This api server has implemented by using
go-macaron. That's why at first you need to have a knowledge about go-macaron. Actually this library is compatible togo http. - Then you need to have a knowledge of about go-xrom
- And also have a little bit of knowledge about cobra flag
Clone repository and enter the working dir :
$ git clone git@github.com:suaas21/library-management-api.git
$ cd library-management-apiImport database postgress :
$ sudo -u postgres psql < database.sqlPrint server version and start the server :
$ go install
$ library-management-api version
$ library-management-api startThere are four types of data model we have introduced to design the api. the following data model are introduced shortly below :
- User Model : All user information are described in this model , like: user name, image, phone number, mail, password, user type, created at, updated at etc.
- Book Model : All book information are described in this model, like: book name, author, book available for loan etc.
- Book Loan History Model : This model describes which book will be issued for which user for loan. That's why this model hold the information of user id and book id. It also describes the book loan data and loan returned date etc.
- Book Loan Request Model : This model describes which book a user will request for. That's why it holds the information of user id and book id. And also status section to describe the request is accepted or rejected.
| Method | API Endpoint | Authentication Type | Access Permission | Description |
|---|---|---|---|---|
| POST | /register | No auth | Any type of user | Registration for user/member |
| PATCH | /change-user-image | Bearer token | Any type of user | change the user profile image |
| GET | /login | Basic or Bearer token | Any type of user | Return jwt token in response for successful authentication |
| GET | /user-profile/{userId} | No auth | Any type of user | Return a specific user in response |
| PATCH | /edit-profile | Bearer token | User/Member | Return the updated user profile data in response |
| POST | /loan-book | Bearer token | Admin | Admin can issue a book loan for the users |
| PUT | /returned-book | Bearer token | Admin | Admin can put the returned book |
| GET | /loan-history | No Auth | Any type of User | User can view loan book details |
| POST | /book | Bearer token | Admin | Admin can create a new book |
| PATCH | /edit-book | Bearer token | Admin | Admin can update book author |
| GET | /book/{bookId} | No Auth | Any type of user | Users can view specific book |
| GET | /books | No Auth | Any type of user | Users can view all listed book |
| GET | /books?author=azad | No Auth | Any type of user | search book by author |
| DELETE | /delete-book/{id} | Bearer token | Admin | Delete the book data and returned the updated data in response |
| POST | /request | Bearer token | User | User can request for book loan |
| GET | /requests | No Auth | Any type of user | User/Admin can get requested book loan info |
| PATCH | /edit-request | Bearer token | Admin | Only amin can edit the request for book loan(Accepted/Rejected) |
| DELETE | /delete-request | Bearer token | Admin | Only admin delete the request for book loan |
| Flag | Shorthand | Default value | Example | Description |
|---|---|---|---|---|
| server-port | - | 4000 | library-management-api start --port=8090 | Start API server in the given port otherwise in default port |
| db-port | - | 5432 | library-management-api --db-port=5432 | database will be started in this port |
| db-password | - | pass | library-management-api --db-password=pass | database password |
| db-name | - | library_management | library-management-api --db-name=library_management | database name |
| db-user | - | postgres | library-management-api --db-user=postgres | database user |
Initialize database
$ sudo -u postgres psql < database.sqlRun API server
$ library-management-api startRegistration for Admin
$ curl -X POST -v -H "Content-Type:application/json" -d '{"name":"azad","mail":"azad@gmail.com","password":"password","phone_no":"017771","user_type":"admin"}' http://localhost:4000/registerRegistration for user
$ curl -X POST -v -H "Content-Type:application/json" -d '{"name":"sagor","mail":"sagor@gmail.com","password":"password","phone_no":"017771","user_type":"user"}' http://localhost:4000/registerChange user profile image
curl is not suitable to hold Content-Type multipart/form-data. so we can skip this.
Login for Admin/User(you will get bearer token)
$ curl -X GET -H "Content-Type:application/json" -d '{"mail":"sagor@gmail.com","password":"password"}' http://localhost:4000/login
$ curl -X GET -H "Content-Type:application/json" -d '{"mail":"azad@gmail.com","password":"password"}' http://localhost:4000/loginUpdate user profile
$ curl -X PATCH -H "Authorization: Bearer <user bearer token>" -d '{"name":"sagor","mail":"sagor@gmail.com","password":"password","phone_no":"017771885","user_type":"user"}' http://localhost:4000/edit-profile
Get user profile with id 1
$ curl -X GET http://localhost:4000/user-profile/1Add some New book
$ curl -X POST -H "Authorization: Bearer <admin bearer token>" -H "Content-Type:application/json" -d '{"book_name":"hello world", "author":"sagor"}' http://localhost:4000/book
$ curl -X POST -H "Authorization: Bearer <admin bearer token>" -H "Content-Type:application/json" -d '{"book_name":"Azad life story", "author":"azad"}' http://localhost:4000/bookUpdate book
$ curl -X PATCH -H "Authorization: Bearer <admin bearer token>" -d '{"book_name":"Azad life story","author":"arya azad"}' http://localhost:4000/edit-bookGet loan book
$ curl -X POST -H "Authorization: Bearer <admin bearer token>" -d '{"user_id":2,"book_id":2}' http://localhost:4000/loan-bookShow book loan history
$ curl -X GET http://localhost:4000/loan-historyReturn book from loan
$ curl -X PUT -H "Authorization: Bearer <admin bearer token>" -d '{"user_id":2,"book_id":2}' http://localhost:4000/return-bookGet all books info
$ curl -X GET http://localhost:4000/booksGet a specific book with id 1
$ curl -X GET http://localhost:4000/book/1Search book by author
$ curl -X GET http://localhost:4000/books?author=azadRequest book loan
$ curl -X POST -v -H "Content-Type:application/json" -H "Authorization: Bearer <user bearer token>" -d '{"user_id":1,"book_id":1}' http://localhost:4000/requestShow Requested book loan
$ curl -X GET http://localhost:4000/requests
$ curl -X GET http://localhost:4000/request/2Update Requested Book Loan(Accepted/Rejected depends on availability)
$ curl -X PATCH -H -H "Content-Type:application/json" -H "Authorization: Bearer <admin bearer token>" -d '{"user_id":1,"book_id":1}' http://localhost:4000/edit-requestDelete Request Book Loan
$ curl -X DELETE -H "Authorization: Bearer <admin bearer token>" http://localhost:4000/delete-request/1Delete book with given id
$ curl -X DELETE -H "Authorization: Bearer <admin berear token>" http://localhost:4000/delete-book/1Export Loan Data to CSV format
Partially implemented data export and convert to csv format. This feature is not ready yet. You can export all loan book data to csv file by using the below curl cmd:
$ curl -X GET http://localhost:4000/csv