search.nim 1002 B

123456789101112131415161718192021222324252627282930313233
  1. import strutils, sequtils, uri
  2. import jester
  3. import router_utils
  4. import ".."/[query, types, api, agents]
  5. import ../views/[general, search]
  6. export search
  7. proc createSearchRouter*(cfg: Config) =
  8. router search:
  9. get "/search":
  10. if @"text".len > 200:
  11. resp Http400, showError("Search input too long.", cfg.title)
  12. let prefs = cookiePrefs()
  13. let query = initQuery(params(request))
  14. case query.kind
  15. of userSearch:
  16. if "," in @"text":
  17. redirect("/" & @"text")
  18. let users = await getSearch[Profile](query, @"after", getAgent())
  19. resp renderMain(renderUserSearch(users, prefs), request, cfg.title)
  20. of custom:
  21. let tweets = await getSearch[Tweet](query, @"after", getAgent())
  22. resp renderMain(renderTweetSearch(tweets, prefs, getPath()), request, cfg.title)
  23. else:
  24. resp Http404, showError("Invalid search.", cfg.title)
  25. get "/hashtag/@hash":
  26. redirect("/search?text=" & encodeUrl("#" & @"hash"))