router.get('/books', async (req, res) => { try { const books = await Book.list(); res.json(books); } catch (err) { res.json({ error: err.message || err.toString() }); } });
static async getBySlug({ slug }) { const bookDoc = await this.findOne({ slug }); if (!bookDoc) { throw new Error('Book not found'); } const book = bookDoc.toObject(); book.chapters = (await Chapter.find({ bookId: book._id }, 'title slug').sort({ order: 1 })).map( (chapter) => chapter.toObject(), ); return book; }
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.post('/books/edit', async (req, res) => { try { const editedBook = await Book.edit(req.body); res.json(editedBook); } catch (err) { res.json({ error: err.message || err.toString() }); } });
async function getEmailTemplate(name, params) { const source = await EmailTemplate.findOne({ name }); if (!source) { throw new Error(`No EmailTemplates found. Please check that at least one is generated at server startup, restart your server and try again.`); } return { message: _.template(source.message)(params), subject: _.template(source.subject)(params), }; }
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('/my-books', async (req, res) => { try { const { purchasedBookIds = [] } = req.user; const { purchasedBooks } = await Book.getPurchasedBooks({ purchasedBookIds }); res.json({ purchasedBooks }); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.post('/books/edit', async (req, res) => { try { const editedBook = await Book.edit(req.body); res.json(editedBook); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books', async (req, res) => { try { const books = await Book.list(); res.json(books); } catch (err) { res.json({ error: err.message || err.toString() }); } });
async function getEmailTemplate(name, params) { const source = await EmailTemplate.findOne({ name }); if (!source) { throw new Error(`No EmailTemplates found. Please check that at least one is generated at server startup, restart your server and try again.`); } return { message: _.template(source.message)(params), subject: _.template(source.subject)(params), }; }
static async getBySlug({ slug }) { const bookDoc = await this.findOne({ slug }); if (!bookDoc) { throw new Error('Book not found'); } const book = bookDoc.toObject(); book.chapters = (await Chapter.find({ bookId: book._id }, 'title slug').sort({ order: 1 })).map( (chapter) => chapter.toObject(), ); return book; }
async function getEmailTemplate(name, params) { const source = await EmailTemplate.findOne({ name }); if (!source) { throw new Error(`No EmailTemplates found. Please check that at least one is generated at server startup, restart your server and try again.`); } return { message: _.template(source.message)(params), subject: _.template(source.subject)(params), }; }
router.post('/books/edit', async (req, res) => { try { await Book.edit(req.body); res.json({ done: 1 }); } catch (err) { res.json({ error: err.message || err.toString() }); } });
router.get('/books', async (req, res) => { try { const books = await Book.list(); res.json(books); } catch (err) { res.json({ error: err.message || err.toString() }); } });
async function getEmailTemplate(name, params) { const source = await EmailTemplate.findOne({ name }); if (!source) { throw new Error(`No EmailTemplates found. Please check that at least one is generated at server startup, restart your server and try again.`); } return { message: _.template(source.message)(params), subject: _.template(source.subject)(params), }; }