codedamn

Book Directory project in Node fundamentals

Asked by Anurag Gupta about 2 years ago

3

I can not clear all challenges in the Book directory project in the end of Node fundamentals. Here's my Api.js file. Can someone tell me what's wrong?

const router = require('express').Router()
const books = require('./data')
const fs = require('fs')

let booksDirectory = books

router.get('/reset', function (req, res) {
    booksDirectory = books
    res.send('ok')
})

router.get('/books', function (req, res) {
    res.json(booksDirectory)
})


router.get('/books/:id', function (req, res) {
    let flag = true
    booksDirectory.map(book => {
        if (req.params.id === book.isbn) {
            flag = false
            res.json(book)
        }
    })

    if (flag) {
        res.status(404).json({
            'success': false,
            'message': `Not found`,
        })
    }

})


router.post('/books', function (req, res) {
    const {
        title,
        isbn,
        pageCount,
        publishedDate,
        thumbnailUrl,
        shortDescription,
        longDescription,
        status,
        authors,
        categories,
    } = req.body

    const json = {
        'title': title,
        'isbn': isbn,
        'pageCount': pageCount,
        'publishedDate': publishedDate,
        'thumbnailUrl': thumbnailUrl,
        'shortDescription': shortDescription,
        'longDescription': longDescription,
        'status': status,
        'authors': authors,
        'categories': categories
    }

    booksDirectory.concat(json)
    fs.writeFileSync('./data.js', `module.exports = ${JSON.stringify(booksDirectory)}`)
    res.json(booksDirectory)
})

router.put('/books/:id', function (req, res) {
    const { id } = req.params

    let flag = true
    const {
        title,
        isbn,
        pageCount,
        publishedDate,
        thumbnailUrl,
        shortDescription,
        longDescription,
        status,
        authors,
        categories,
    } = req.body

    booksDirectory.map(book => {
        if (req.params.id === book.isbn) {
            flag = false
            if (title) book.title = title
            if (isbn) book.isbn = isbn
            if (pageCount) book.pageCount = pageCount
            if (publishedDate) book.publishedDate = publishedDate
            if (thumbnailUrl) book.thumbnailUrl = thumbnailUrl
            if (shortDescription) book.shortDescription = shortDescription
            if (longDescription) book.longDescription = longDescription
            if (status) book.status = status
            if (authors) book.authors = authors
            if (categories) book.categories = categories
        }
    })
    fs.writeFileSync('./data.js', `module.exports = ${JSON.stringify(booksDirectory)}`)

    if (flag) {
        res.status(404).json({
            'success': false,
            'message': `Not found`,
        })
    }

})

router.delete('/books/:id', function (req, res) {
    // add code
    booksDirectory = booksDirectory.filter(book => req.params.id !== book.isbn)
    fs.writeFileSync('./data.js', `module.exports = ${JSON.stringify(booksDirectory)}`)
})

module.exports = router

1 Answer

    2

    First of all, after some tweaks, the end-points work in my local environment. So, one case could be that, the codedamn checker program needs some specific format to pass a test case. This inturn makes sense. But, even if I don't make any changes and simply keep checking, I get different evaluation every time. Once it show 2 passed then another reload 5 test cases and so on.

    Some thing similar happened in tiktok exercises. So, yea I'm marking it as completeeven though only 4/6 cases passed

    @anuraag

    Anurag Gupta

    @anuraag

Your answer