From d9c9da7cd245775aed241ab9a15b392ae4e9923c Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 23 Nov 2024 21:43:55 +0000 Subject: add search page --- src/routes/index.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/routes/index.js') diff --git a/src/routes/index.js b/src/routes/index.js index e585d3d..c56b73e 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -103,6 +103,38 @@ router.get("/subs", authenticateToken, async (req, res) => { res.render("subs", { subs, user: req.user }); }); +// GET /search-subreddits +router.get("/search", authenticateToken, async (req, res) => { + if (!req.query || !req.query.q) { + res.render("sub-search", {}); + } else { + const { q, options } = req.query.q.split(/\s+/).reduce( + (acc, word) => { + if (word.startsWith("+")) { + acc.options.push(word.slice(1)); + } else { + acc.q += `${word} `; + } + return acc; + }, + { options: [], q: "" }, + ); + + const { items, after } = await G.searchSubreddits(q, { + include_over_18: options.includes("nsfw"), + }); + const subs = db + .query("SELECT subreddit FROM subscriptions WHERE user_id = $id") + .all({ id: req.user.id }) + .map((res) => res.subreddit); + const message = + items.length === 0 + ? "no results found" + : `showing ${items.length} results`; + res.render("sub-search", { items, subs, after, message }); + } +}); + // GET /dashboard router.get("/dashboard", authenticateToken, async (req, res) => { let invites = null; -- cgit v1.2.3