123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- require 'sequel'
-
- require_relative '../db/connect'
-
- def search(params)
- db = connect
- query = params[:q].strip
- offset = (params[:page] - 1) * 10
- username = params[:username].strip
- case params[:type]
- when 'threads'
- sort =
- case params[:sort]
- when 'thread'
- 'created_at DESC'
- when 'post'
- 'last_post_created_at DESC'
- else
- 'created_at DESC'
- end
- search_threads(db, query, username, sort, offset)
- when 'posts'
- search_posts(db, query, username, offset)
- else
- Array.new
- end
- end
-
- def search_threads(db, query, username, sort, offset)
- db[<<-SQL, query, username, username, offset]
- SELECT
- threads.*
- FROM threads
- WHERE
- to_tsvector(title) @@ plainto_tsquery(?)
- AND (LOWER(threads.creator) = LOWER(?) OR ? = '')
- ORDER BY #{sort}
- LIMIT 50
- OFFSET ?;
- SQL
- end
-
- def search_posts(db, query, username, offset)
- db[<<-SQL, query, username, username, offset]
- SELECT
- posts.*,
- threads.title as thread_title,
- threads.remote_id as remote_thread_id
- FROM posts
- INNER JOIN threads on posts.thread_id = threads.id
- WHERE
- tsv @@ plainto_tsquery(?)
- AND (
- (LOWER(posts.creator) = LOWER(?)) OR (? = '')
- )
- ORDER BY created_at DESC
- LIMIT 50
- OFFSET ?;
- SQL
- end
|