You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

search.rb 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. require 'sequel'
  2. require_relative '../db/connect'
  3. def search(params)
  4. db = connect
  5. query = params[:q].strip
  6. offset = (params[:page] - 1) * 10
  7. username = params[:username].strip
  8. case params[:type]
  9. when 'threads'
  10. sort =
  11. case params[:sort]
  12. when 'thread'
  13. 'created_at DESC'
  14. when 'post'
  15. 'last_post_created_at DESC'
  16. else
  17. 'created_at DESC'
  18. end
  19. search_threads(db, query, username, sort, offset)
  20. when 'posts'
  21. search_posts(db, query, username, offset)
  22. else
  23. Array.new
  24. end
  25. end
  26. def search_threads(db, query, username, sort, offset)
  27. db[<<-SQL, query, username, username, offset]
  28. SELECT
  29. threads.*
  30. FROM threads
  31. WHERE
  32. to_tsvector(title) @@ plainto_tsquery(?)
  33. AND (LOWER(threads.creator) = LOWER(?) OR ? = '')
  34. ORDER BY #{sort}
  35. LIMIT 50
  36. OFFSET ?;
  37. SQL
  38. end
  39. def search_posts(db, query, username, offset)
  40. db[<<-SQL, query, username, username, offset]
  41. SELECT
  42. posts.*,
  43. threads.title as thread_title,
  44. threads.remote_id as remote_thread_id
  45. FROM posts
  46. INNER JOIN threads on posts.thread_id = threads.id
  47. WHERE
  48. tsv @@ plainto_tsquery(?)
  49. AND (
  50. (LOWER(posts.creator) = LOWER(?)) OR (? = '')
  51. )
  52. ORDER BY created_at DESC
  53. LIMIT 50
  54. OFFSET ?;
  55. SQL
  56. end