এর আগে আমরা যখন book মডেল বানিয়েছিলাম তখন কোন quantity ঘর রাখিনি এখন যখন স্টক নিয়ে কাজ করতে হবে তাই বুক মডেল এ quantity ফিল্ড যোগ করি।
// Book Schema
const bookSchema = new mongoose.Schema({
quantity: { type: Number, default: 0 }, // Inventory quantity field
});
const stockbookSchema = new mongoose.Schema({
book: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Book',
required: true,
},
quantity: { type: Number, required: true },
dateAdded: { type: Date, default: Date.now },
});
const Stockbook = mongoose.model('Stockbook', stockbookSchema);
module.exports = { Author, Book ,Member,Loan,Stockbook};
routes ফাইলটি আপডেট করি
এখন যখন আমরা অ্যাড স্টক করবো তখন তার একটি এন্ট্রি addstock কালেকশন এ জমা হবে এবং সেভ হওয়ার সময় বুক মডেলের quantity আপডেট করবে।
const { Author, Book,Member,Loan,Stockbook } = require('./models');
// Save a stockbook entry
router.post('/add-stockbook', async (req, res) => {
try {
const { book, quantity } = req.body;
// Create a stockbook entry
const stockbookEntry = new Stockbook({ book: book, quantity });
await stockbookEntry.save();
// Update the book's quantity
await Book.findByIdAndUpdate(book, { $inc: { quantity } });
res.json(stockbookEntry);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Failed to save stockbook entry' });
}
});
আমরা সাধারণত একটি বই একজনকে এক কপি করে দেব এজন্য যখন বই লোন দেব তখন বুক মডেল থেকে এক কপি বই কমিয়ে বুক মডেলের কোয়ান্টিটি আপডেট করবো।
router.post('/loans', async (req, res) => {
try {
const { bookId, memberId, dueDate } = req.body;
// Decrement the book's quantity in the inventory
await Book.findByIdAndUpdate(bookId, { $inc: { quantity: -1 } });
// Create a loan record
const loan = new Loan({ book: bookId, member: memberId, dueDate });
await loan.save();
res.json(loan);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Failed to loan the book' });
}
});
আবার বই যখন মেম্বার ফেরত দেবে তখন বইয়ের স্টক আপডেট করে দেব।
// Receive a returned book
router.put('/receive-book/:loanId', async (req, res) => {
try {
const loanId = req.params.loanId;
// Increment the book's quantity in the inventory
const loan = await Loan.findById(loanId);
await Book.findByIdAndUpdate(loan.book, { $inc: { quantity: 1 } });
// Update the loan record with the return date
const returnDate = new Date();
await Loan.findByIdAndUpdate(loanId, { returnDate });
res.json({ message: 'Book received and loan record updated' });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Failed to receive the book' });
}
});