router.get('/books/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug, userId: req.user && req.user.id }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
static async getBySlug({ bookSlug, chapterSlug }) { const book = await Book.getBySlug({ slug: bookSlug }); if (!book) { throw new Error('Book not found'); } const chapter = await this.findOne({ bookId: book._id, slug: chapterSlug }); if (!chapter) { throw new Error('Chapter not found'); } const chapterObj = chapter.toObject(); chapterObj.book = book; return chapterObj; }
router.get('/get-chapter-detail', async (req, res) => { try { const { bookSlug, chapterSlug } = req.query; const chapter = await Chapter.getBySlug({ bookSlug, chapterSlug, userId: req.user && req.user.id, isAdmin: req.user && req.user.isAdmin, }); res.json(chapter); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/detail/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug, userId: req.user && req.user.id }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug, userId: req.user && req.user.id }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/detail/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/detail/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug, userId: req.user && req.user.id }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/detail/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/detail/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug, userId: req.user && req.user.id }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/detail/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug, userId: req.user && req.user.id }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books/detail/:slug', async (req, res) => { try { const book = await Book.getBySlug({ slug: req.params.slug }); res.json(book); } catch (err) { res.json({ error: err.message || err.toString() }); } });