Commit 0d67bd1c by Ngô Trung Hưng

factory code function search

parent 5bdd43ef
Pipeline #1040 failed with stages
in 0 seconds
...@@ -27,3 +27,8 @@ ...@@ -27,3 +27,8 @@
# Ignore master key for decrypting credentials and more. # Ignore master key for decrypting credentials and more.
/config/master.key /config/master.key
/lib/csv /lib/csv
.vscode
config/settings.local.yml
config/settings/*.local.yml
config/environments/*.local.yml
...@@ -36,6 +36,7 @@ gem 'carrierwave' ...@@ -36,6 +36,7 @@ gem 'carrierwave'
gem 'rails-i18n' gem 'rails-i18n'
gem 'i18n-js' gem 'i18n-js'
gem 'rsolr' gem 'rsolr'
gem 'config'
# Use ActiveStorage variant # Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8' # gem 'mini_magick', '~> 4.8'
......
...@@ -89,7 +89,11 @@ GEM ...@@ -89,7 +89,11 @@ GEM
execjs execjs
coffee-script-source (1.12.2) coffee-script-source (1.12.2)
concurrent-ruby (1.1.6) concurrent-ruby (1.1.6)
config (2.2.1)
deep_merge (~> 1.2, >= 1.2.1)
dry-validation (~> 1.0, >= 1.0.0)
crass (1.0.6) crass (1.0.6)
deep_merge (1.2.1)
devise (4.7.2) devise (4.7.2)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
...@@ -106,6 +110,44 @@ GEM ...@@ -106,6 +110,44 @@ GEM
activemodel-serializers-xml (>= 1.0) activemodel-serializers-xml (>= 1.0)
activesupport (>= 5.0) activesupport (>= 5.0)
request_store (>= 1.0) request_store (>= 1.0)
dry-configurable (0.11.6)
concurrent-ruby (~> 1.0)
dry-core (~> 0.4, >= 0.4.7)
dry-equalizer (~> 0.2)
dry-container (0.7.2)
concurrent-ruby (~> 1.0)
dry-configurable (~> 0.1, >= 0.1.3)
dry-core (0.4.9)
concurrent-ruby (~> 1.0)
dry-equalizer (0.3.0)
dry-inflector (0.2.0)
dry-initializer (3.0.3)
dry-logic (1.0.7)
concurrent-ruby (~> 1.0)
dry-core (~> 0.2)
dry-equalizer (~> 0.2)
dry-schema (1.5.3)
concurrent-ruby (~> 1.0)
dry-configurable (~> 0.8, >= 0.8.3)
dry-core (~> 0.4)
dry-equalizer (~> 0.2)
dry-initializer (~> 3.0)
dry-logic (~> 1.0)
dry-types (~> 1.4)
dry-types (1.4.0)
concurrent-ruby (~> 1.0)
dry-container (~> 0.3)
dry-core (~> 0.4, >= 0.4.4)
dry-equalizer (~> 0.3)
dry-inflector (~> 0.1, >= 0.1.2)
dry-logic (~> 1.0, >= 1.0.2)
dry-validation (1.5.4)
concurrent-ruby (~> 1.0)
dry-container (~> 0.7, >= 0.7.1)
dry-core (~> 0.4)
dry-equalizer (~> 0.2)
dry-initializer (~> 3.0)
dry-schema (~> 1.5)
erubi (1.9.0) erubi (1.9.0)
execjs (2.7.0) execjs (2.7.0)
faraday (1.0.1) faraday (1.0.1)
...@@ -290,6 +332,7 @@ DEPENDENCIES ...@@ -290,6 +332,7 @@ DEPENDENCIES
carrierwave carrierwave
chromedriver-helper chromedriver-helper
coffee-rails (~> 4.2) coffee-rails (~> 4.2)
config
devise devise
dotenv-rails dotenv-rails
draper draper
......
...@@ -5,6 +5,6 @@ class HistoriesController < ApplicationController ...@@ -5,6 +5,6 @@ class HistoriesController < ApplicationController
def index def index
histories = current_user.histories.order(created_at: :desc) histories = current_user.histories.order(created_at: :desc)
@jobs = histories.map(&:job).select { |val| val.present? } @jobs = histories.map(&:job).compact
end end
end end
...@@ -5,14 +5,13 @@ class SearchController < ApplicationController ...@@ -5,14 +5,13 @@ class SearchController < ApplicationController
def multi_search def multi_search
solr = connect_solr solr = connect_solr
@keyword = params[:keyword] @keyword = params[:keyword]
@industry = Industry.find_by(id: params[:industry]) if params[:industry].present? @industry = Industry.find_by(id: params[:industry_id]) if params[:industry_id].present?
@city = City.find_by(id: params[:city]) if params[:city].present? @city = City.find_by(id: params[:city_id]) if params[:city_id].present?
# Value data is Array, index[0]: name_job or company name, index[1]: id industry, index[2]: id location data = sub_space_params!(params[:keyword], params[:industry_id], params[:city_id])
data = sub_space_params!(params[:keyword], params[:industry], params[:city]) query = if params[:keyword].blank? && params[:industry_id].blank? && params[:city_id].blank?
query = if params[:keyword].blank? && params[:industry].blank? && params[:city].blank?
'*:*' '*:*'
else else
"solr((name: #{data[0]}) OR (company_name: #{data[0]})) AND (industry_id: #{data[1]}) AND (location_id: #{data[2]})" "solr((name: #{data[:keyword]}) OR (company_name: #{data[:keyword]})) AND (industry_id: #{data[:industry_id]}) AND (location_id: #{data[:location_id]})"
end end
response = solr.paginate(params[:page], NUMBER_RECORD_IN_PAGE, 'select', params: { q: query }) response = solr.paginate(params[:page], NUMBER_RECORD_IN_PAGE, 'select', params: { q: query })
@results = Kaminari.paginate_array(response['response']['docs'], total_count: response['response']['numFound']).page(params[:page]).per(NUMBER_RECORD_IN_PAGE) @results = Kaminari.paginate_array(response['response']['docs'], total_count: response['response']['numFound']).page(params[:page]).per(NUMBER_RECORD_IN_PAGE)
...@@ -22,16 +21,15 @@ class SearchController < ApplicationController ...@@ -22,16 +21,15 @@ class SearchController < ApplicationController
end end
def sub_space_params!(keyword, industry_id, location_id) def sub_space_params!(keyword, industry_id, location_id)
arr_params = [] arr_params = {}
keyword = keyword.present? ? RSolr.solr_escape(keyword) : '' arr_params[:keyword] = RSolr.solr_escape(keyword)
industry_id = industry_id.present? ? RSolr.solr_escape(industry_id) : '' arr_params[:industry_id] = RSolr.solr_escape(industry_id)
location_id = location_id.present? ? RSolr.solr_escape(location_id) : '' arr_params[:location_id] = RSolr.solr_escape(location_id)
arr_params << keyword << industry_id << location_id arr_params.each_value { |val| val.sub!('', '*') if val.blank? }
arr_params.each { |val| val.sub!('', '*') if val.blank? }
end end
def load_data_dropdown def load_data_dropdown
@industries = Industry.order(name: :asc).all @industries = Industry.order(name: :asc)
@cities = City.select(:id, :name) @cities = City.select(:id, :name)
end end
......
...@@ -32,14 +32,14 @@ ...@@ -32,14 +32,14 @@
<i class="fa fa-list-ul" aria-hidden="true"></i> <i class="fa fa-list-ul" aria-hidden="true"></i>
</div> </div>
<% selected = @industry.blank? ? '*' : @industry.id %> <% selected = @industry.blank? ? '*' : @industry.id %>
<%= select_tag 'industry', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %> <%= select_tag 'industry_id', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %>
</div> </div>
<div class="search_location"> <div class="search_location">
<div class="icon_list"> <div class="icon_list">
<i class="fas fa-map-marker-alt"></i> <i class="fas fa-map-marker-alt"></i>
</div> </div>
<% selected = @city.blank? ? '*' : @city.id %> <% selected = @city.blank? ? '*' : @city.id %>
<%= select_tag 'city', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %> <%= select_tag 'city_id', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %>
</div> </div>
<div class="search_submit"> <div class="search_submit">
<%= f.submit t('pages.banner.btn_text_search'), name: nil, class: 'btn_search_submit'%> <%= f.submit t('pages.banner.btn_text_search'), name: nil, class: 'btn_search_submit'%>
...@@ -64,14 +64,14 @@ ...@@ -64,14 +64,14 @@
<i class="fa fa-list-ul" aria-hidden="true"></i> <i class="fa fa-list-ul" aria-hidden="true"></i>
</div> </div>
<% selected = @industry.blank? ? '*' : @industry.id %> <% selected = @industry.blank? ? '*' : @industry.id %>
<%= select_tag 'industry', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %> <%= select_tag 'industry_id', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %>
</div> </div>
<div class="search_location"> <div class="search_location">
<div class="icon_list"> <div class="icon_list">
<i class="fas fa-map-marker-alt"></i> <i class="fas fa-map-marker-alt"></i>
</div> </div>
<% selected = @city.blank? ? '*' : @city.id %> <% selected = @city.blank? ? '*' : @city.id %>
<%= select_tag 'city', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %> <%= select_tag 'city_id', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %>
</div> </div>
<div class="search_submit"> <div class="search_submit">
<%= f.submit t('pages.banner.btn_text_search'), name: nil, class: 'btn_search_submit'%> <%= f.submit t('pages.banner.btn_text_search'), name: nil, class: 'btn_search_submit'%>
...@@ -95,13 +95,13 @@ ...@@ -95,13 +95,13 @@
<div class="col-sm-6 col-xs-12"> <div class="col-sm-6 col-xs-12">
<div class="search_industries_mobile"> <div class="search_industries_mobile">
<% selected = @industry.blank? ? '*' : @industry.id %> <% selected = @industry.blank? ? '*' : @industry.id %>
<%= select_tag 'industry', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries_mobile' %> <%= select_tag 'industry_id', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries_mobile' %>
</div> </div>
</div> </div>
<div class="col-sm-6 col-xs-12"> <div class="col-sm-6 col-xs-12">
<div class="search_location_mobile"> <div class="search_location_mobile">
<% selected = @city.blank? ? '*' : @city.id %> <% selected = @city.blank? ? '*' : @city.id %>
<%= select_tag 'city', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities_mobile' %> <%= select_tag 'city_id', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities_mobile' %>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -11,15 +11,12 @@ module Venjob ...@@ -11,15 +11,12 @@ module Venjob
# Initialize configuration defaults for originally generated Rails version. # Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2 config.load_defaults 5.2
config.exceptions_app = self.routes config.exceptions_app = self.routes
config.autoload_paths << Rails.root.join('lib/service') config.autoload_paths += Dir[Rails.root.join('lib', '{service,src}')]
config.autoload_paths << Rails.root.join('lib/src') config.eager_load_paths += Dir[Rails.root.join('lib', '{business,solr}')]
config.eager_load_paths << Rails.root.join('lib/business')
config.eager_load_paths << Rails.root.join('lib/solr')
# i18n # i18n
config.i18n.available_locales = [:en, :vi] config.i18n.available_locales = [:en, :vi]
config.i18n.default_locale = :vi config.i18n.default_locale = :vi
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')] config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
# Settings in config/environments/* take precedence over those specified here. # Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers # Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading # -- all .rb files in that directory are automatically loaded after loading
......
Config.setup do |config|
# Name of the constant exposing loaded settings
config.const_name = 'Settings'
# Ability to remove elements of the array set in earlier loaded settings file. For example value: '--'.
#
# config.knockout_prefix = nil
# Overwrite an existing value when merging a `nil` value.
# When set to `false`, the existing value is retained after merge.
#
# config.merge_nil_values = true
# Overwrite arrays found in previously loaded settings file. When set to `false`, arrays will be merged.
#
# config.overwrite_arrays = true
# Load environment variables from the `ENV` object and override any settings defined in files.
#
# config.use_env = false
# Define ENV variable prefix deciding which variables to load into config.
#
# Reading variables from ENV is case-sensitive. If you define lowercase value below, ensure your ENV variables are
# prefixed in the same way.
#
# When not set it defaults to `config.const_name`.
#
config.env_prefix = 'SETTINGS'
# What string to use as level separator for settings loaded from ENV variables. Default value of '.' works well
# with Heroku, but you might want to change it for example for '__' to easy override settings from command line, where
# using dots in variable names might not be allowed (eg. Bash).
#
# config.env_separator = '.'
# Ability to process variables names:
# * nil - no change
# * :downcase - convert to lower case
#
# config.env_converter = :downcase
# Parse numeric values as integers instead of strings.
#
# config.env_parse_values = true
# Validate presence and type of specific config values. Check https://github.com/dry-rb/dry-validation for details.
#
# config.schema do
# required(:name).filled
# required(:age).maybe(:int?)
# required(:email).filled(format?: EMAIL_REGEX)
# end
end
url_server_solr: 'http://localhost:8983/solr/venjob'
url_server_solr: 'http://.../solr/venjob'
\ No newline at end of file
...@@ -2,10 +2,9 @@ ...@@ -2,10 +2,9 @@
module SolrSetting module SolrSetting
class SolrServer class SolrServer
URL_SERVER_SOLR = 'http://localhost:8983/solr/venjob'
def self.connection def self.connection
RSolr.connect url: URL_SERVER_SOLR RSolr.connect url: Settings.url_server_solr
end end
end end
end end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment