const express = require("express");
var
passport = require("passport");
var
router = express.Router();
var
{ User, Book, BorrowerRecord, ReturnRecord } = require("./db");
router.get("/", (req, res) => {
res.send("Welcome To Library Management System");
});
router.get("/getbooks", async (req, res) => {
const books = await Book.find({});
res.send({ status: 200, books: books });
});
router.get("/getusers", async (req, res) => {
const users = await User.find({});
res.send({ status: 200, users: users });
});
router.post("/createbook", async (req, res) => {
var
book =
new
Book(req.body);
passport.authenticate("jwt", { session:
false
}, async (err, user) => {
if
(err || !user) {
res.send({ status: 401, message: "Not Authorized" });
}
else
{
if
(user.admin) {
await book.save().then(
function
(saveres) {
if
(saveres) {
res.send({ status: 200, message: saveres });
}
},
function
(err) {
res.send({
status: 500,
message: "Internal Server Error",
});
}
);
}
else
{
res.send({
status: 401,
message: "You are not authorized to perform
this
action",
});
}
}
})(req, res);
});
router.post("/borrowbook", async (req, res) => {
var
bookid = req.body.bookid;
var
borrowerusername = req.body.username;
passport.authenticate("jwt", { session:
false
}, async (err, user) => {
if
(err || !user) {
res.send({ status: 401, message: "Not Authorized" });
}
else
{
if
(user.admin) {
User.findOne({ username: borrowerusername })
.then((user) => {
console.log(user);
if
(user) {
Book.findOne({ _id: bookid })
.then((book) => {
console.log("book");
if
(book) {
if
(book.available) {
var
newBorrowerRecord =
new
BorrowerRecord({
username: user.username,
bookid: book["_id"],
});
newBorrowerRecord
.save()
.then((saveres) => {
if
(saveres) {
Book.where({
_id: book["_id"],
})
.updateOne({
available:
false
,
})
.then((updtres) => {
res.send({
status: 200,
message:
"book borrowed successfully by " +
user.username,
});
});
}
else
{
res.send({
status: 500,
message:
"Error Borrowing Book",
});
}
})
.
catch
((err) => {
res.send({
status: 500,
message:
"Error Borrowing Book",
});
});
}
else
{
res.send({
status: 500,
message:
"Book Is not available",
});
}
}
else
{
res.send({
status: 500,
message:
"Book
with
Id Does Not Exist",
});
}
})
.
catch
((err) => {
res.send({
status: 500,
message: "Internal Server Error",
});
});
}
else
{
res.send({
status: 500,
message: "Borrower Does Not Exist",
});
}
})
.
catch
((err) => {
res.send({
status: 500,
message: "Internal Server Error",
});
});
}
else
{
res.send({
status: 401,
message: "You are not authorized to perform
this
action",
});
}
}
})(req, res);
});
router.post("/returnbook", async (req, res, next) => {
var
bookid = req.body.bookid;
var
borrowerusername = req.body.username;
passport.authenticate("jwt", { session:
false
}, async (err, user) => {
if
(err || !user) {
res.send({ status: 401, message: "Not Authorized" });
}
else
{
if
(user.admin) {
BorrowerRecord.findOne({
bookid: bookid,
username: borrowerusername,
})
.then((borrowrec) => {
if
(borrowrec) {
var
todaysdate =
new
Date().toISOString();
const fine = 0;
if
(todaysdate > borrowrec.submitdate) {
const diffTime = Math.abs(
todaysdate - borrowrec.submitdate
);
const diffDays = Math.ceil(
diffTime / (1000 * 60 * 60 * 24)
);
fine = diffDays * 2;
}
var
returnrec =
new
ReturnRecord({
username: borrowerusername,
bookid: bookid,
duedate: borrowrec.submitdate,
fine: fine,
});
returnrec
.save()
.then((saveres) => {
if
(saveres) {
Book.findOne({ _id: bookid })
.updateOne({ available:
true
})
.then((updtres) => {
if
(updtres) {
res.send({
status: 200,
message:
"Book Returned Successfully",
});
}
else
{
res.send({
status: 500,
message:
"Error Creating Return Record",
});
}
});
}
else
{
res.send({
status: 500,
message:
"Error Creating Return Record",
});
}
})
.
catch
((err) => {
res.send({
status: 500,
message: "Internal Server Error",
});
});
}
else
{
res.send({
status: 500,
message: "No Record Found",
});
}
})
.
catch
((err) => {
res.send({
status: 500,
message: "Internal Server Error",
});
});
}
else
{
res.send({
status: 401,
message: "You are not authorized to perform
this
action",
});
}
}
})(req, res);
});
router.post("/payfine", (req, res) => {
var
returnrecid = req.body.returnrecordid;
passport.authenticate("jwt", { session:
false
}, async (err, user) => {
if
(err || !user) {
res.send({ status: 401, message: "Not Authorized" });
}
else
{
if
(user.admin) {
ReturnRecord.findOne({ _id: returnrecid })
.updateOne({ fine: 0 })
.then((updtres) => {
if
(updtres) {
res.send({
status: 200,
message: "Fine Paid Successfully",
});
}
else
{
res.send({
status: 500,
message: "Error paying Fine",
});
}
})
.
catch
((err) => {
res.send({
status: 500,
message: "Internal Server Error",
});
});
}
else
{
res.send({
status: 401,
message: "You are not authorized to perform
this
action",
});
}
}
})(req, res);
});
module.exports = router;