const express = require("express"); const BibleVerse = require("../models/BibleVerse"); const router = express.Router(); const pickRandomVerse = async (filter) => { const results = await BibleVerse.aggregate([ { $match: filter }, { $sample: { size: 1 } }, ]); return results[0] || null; }; router.get("/today", async (req, res) => { try { const targetDate = req.query.date || new Date().toISOString().slice(0, 10); const datedVerse = await pickRandomVerse({ active: true, date: targetDate, }); if (datedVerse) { return res.json(datedVerse); } const undatedVerse = await pickRandomVerse({ active: true, $or: [{ date: { $exists: false } }, { date: null }, { date: "" }], }); if (undatedVerse) { return res.json(undatedVerse); } const anyVerse = await pickRandomVerse({ active: true }); if (!anyVerse) { return res.status(404).json({ message: "No bible verses available" }); } return res.json(anyVerse); } catch (error) { res.status(500).json({ message: "Failed to fetch bible verse" }); } }); router.get("/verses", async (req, res) => { try { const filter = {}; if (req.query.active === "true") { filter.active = true; } const verses = await BibleVerse.find(filter).sort({ date: -1, createdAt: -1, }); res.json(verses); } catch (error) { res.status(500).json({ message: "Failed to fetch bible verses" }); } }); router.post("/verses", async (req, res) => { try { const verse = await BibleVerse.create(req.body); res.status(201).json(verse); } catch (error) { res.status(400).json({ message: "Failed to create bible verse" }); } }); router.put("/verses/:id", async (req, res) => { try { const verse = await BibleVerse.findByIdAndUpdate(req.params.id, req.body, { new: true, }); if (!verse) { return res.status(404).json({ message: "Bible verse not found" }); } res.json(verse); } catch (error) { res.status(400).json({ message: "Failed to update bible verse" }); } }); router.delete("/verses/:id", async (req, res) => { try { const verse = await BibleVerse.findByIdAndDelete(req.params.id); if (!verse) { return res.status(404).json({ message: "Bible verse not found" }); } res.json({ ok: true }); } catch (error) { res.status(400).json({ message: "Failed to delete bible verse" }); } }); module.exports = router;