search.nim 946 B

123456789101112131415161718192021222324252627282930
  1. import strutils, sequtils, uri
  2. import jester
  3. import router_utils
  4. import ".."/[query, types, api, agents, prefs]
  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 users:
  16. if "," in @"text":
  17. redirect("/" & @"text")
  18. let users = await getSearch[Profile](query, @"after", getAgent())
  19. resp renderMain(renderUserSearch(users, prefs), prefs, cfg.title, path=getPath())
  20. of custom:
  21. let tweets = await getSearch[Tweet](query, @"after", getAgent())
  22. resp renderMain(renderTweetSearch(tweets, prefs, getPath()), prefs, cfg.title, path=getPath())
  23. else:
  24. resp Http404, showError("Invalid search.", cfg.title)