From a08a889e7dc930771ff02b2bd584f63cfc4dad55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Geonizeli?= Date: Mon, 28 Feb 2022 13:45:28 -0300 Subject: [PATCH] add search by terms on posts --- Gemfile | 6 +++--- Gemfile.lock | 4 ++++ app/controllers/posts_controller.rb | 2 +- app/models/post.rb | 8 ++++---- app/services/posts_query_resolver_service.rb | 4 ++++ 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index 8224856..6a028cd 100644 --- a/Gemfile +++ b/Gemfile @@ -2,11 +2,12 @@ source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby "3.1.1" + gem "rails", "~> 7.0.2", ">= 7.0.2.2" gem "pg", "~> 1.1" gem "puma", "~> 5.0" gem "jbuilder" - +gem "pg_search", "~> 2.3" gem "bootsnap", require: false group :development, :test do @@ -14,6 +15,5 @@ group :development, :test do gem "rspec-rails", "~> 5.1" gem "factory_bot_rails", "~> 6.2" + gem "faker", "~> 2.19" end - -gem "faker", "~> 2.19" diff --git a/Gemfile.lock b/Gemfile.lock index 2a9fd44..fa71a15 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -124,6 +124,9 @@ GEM nokogiri (1.13.3-x86_64-linux) racc (~> 1.4) pg (1.3.3) + pg_search (2.3.6) + activerecord (>= 5.2) + activesupport (>= 5.2) puma (5.6.2) nio4r (~> 2.0) racc (1.6.0) @@ -196,6 +199,7 @@ DEPENDENCIES faker (~> 2.19) jbuilder pg (~> 1.1) + pg_search (~> 2.3) puma (~> 5.0) rails (~> 7.0.2, >= 7.0.2.2) rspec-rails (~> 5.1) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 0e7f1bf..68722ef 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -29,7 +29,7 @@ class PostsController < ApplicationController private def query_params - params.permit(:scope) || {} + params.permit(:scope, :terms) end def post_params diff --git a/app/models/post.rb b/app/models/post.rb index 6b55839..f34a55c 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1,15 +1,15 @@ class Post < ApplicationRecord + include PgSearch::Model + belongs_to :user belongs_to :quoted_post, optional: true, class_name: 'Post' validates :content, length: { maximum: 777 } validates :content, presence: true, unless: :repost? - validate :user, :limit_of_post_per_day - scope :by_user_follows, ->(user) { - where(user_id: user.following_ids) - } + pg_search_scope :by_terms, against: :content + scope :by_user_follows, ->(user) { where(user_id: user.following_ids) } def repost? kind == :quoted_post diff --git a/app/services/posts_query_resolver_service.rb b/app/services/posts_query_resolver_service.rb index 91d52a8..afe86eb 100644 --- a/app/services/posts_query_resolver_service.rb +++ b/app/services/posts_query_resolver_service.rb @@ -17,6 +17,10 @@ class PostsQueryResolverService scope = scope.by_user_follows(current_user) end + if filter[:terms] + scope = scope.by_terms(filter[:terms]) + end + scope end end \ No newline at end of file