Created
April 8, 2016 18:46
-
-
Save sadfuzzy/d046d3875ed8d643b7a32aa1a36e9c76 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class RecountMediamapService | |
def initialize(task) | |
@task = task | |
@comparisons_ids = Film.where.not(kinopoisk_rate: nil).where.not(kinopoisk_rate: 0).where('kinopoisk_num > 10').order(year: :desc, kinopoisk_rate: :desc, kinopoisk_num: :desc).limit(20000).pluck(:id) | |
@film = Film.includes(:genres, :subgenres, :countries, :tags, :people).find(@task.task.to_i) | |
end | |
def recount | |
begin | |
kbs = {} | |
@comparisons_ids.each do |comparison_id| | |
comparison = Film.includes(:genres, :subgenres, :countries, :tags, :people).find(comparison_id) | |
unless comparison.id == @film.id | |
kb = genres_count(comparison) + subgenres_count(comparison) + tags_count(comparison) + countries_count(comparison) + people_count(comparison) | |
kbs.update({ comparison.id => kb }) | |
end | |
end | |
kbs = kbs.sort {|a,b| b[1]<=>a[1]} | |
kbs[0...50].each do |item| | |
Likefilm.where(film_id: @film.id, likefilm_id: item[0]).first_or_create(kb: item[1]) | |
end | |
@task.complete | |
rescue => e | |
@task.error(e) | |
end | |
end | |
protected | |
def genres_count(comparison) | |
genres_ids = [] | |
@film.genres.each do |genre| | |
genres_ids << genre.id | |
end | |
like_genres_ids = [] | |
comparison.genres.each do |genre| | |
like_genres_ids << genre.id | |
end | |
ids = genres_ids & like_genres_ids | |
genres_size = ids.size | |
if genres_size == 0 | |
genres_count = 0 | |
elsif genres_size == 1 | |
genres_count = 10 | |
elsif genres_size == 2 | |
genres_count = 20 | |
elsif genres_size >= 3 | |
genres_count = 30 | |
end | |
end | |
def subgenres_count(comparison) | |
subgenres_ids = [] | |
@film.subgenres.each do |subgenre| | |
subgenres_ids << subgenre.id | |
end | |
like_subgenres_ids = [] | |
comparison.subgenres.each do |subgenre| | |
like_subgenres_ids << subgenre.id | |
end | |
if subgenres_ids.size == 0 || like_subgenres_ids.size == 0 | |
subgenres_count=0 | |
else | |
ids = subgenres_ids & like_subgenres_ids | |
subgenres_size = ids.size | |
if subgenres_size >= 1 | |
subgenres_count = 30 | |
elsif subgenres_size == 0 | |
subgenres_count = 0 | |
end | |
end | |
end | |
def tags_count(comparison) | |
tags_ids = [] | |
@film.tags.each do |tag| | |
tags_ids << tag.id | |
end | |
like_tags_ids = [] | |
comparison.tags.each do |tag| | |
like_tags_ids << tag.id | |
end | |
ids = tags_ids & like_tags_ids | |
tags_size = ids.size | |
if tags_size == 0 | |
tags_count = 0 | |
elsif tags_size == 1 | |
tags_count = 20 | |
elsif tags_size == 2 | |
tags_count = 25 | |
elsif tags_size >= 3 | |
tags_count = 30 | |
end | |
end | |
def countries_count(comparison) | |
countries_ids = [] | |
@film.countries.each do |country| | |
countries_ids << country.id | |
end | |
like_countries_ids = [] | |
comparison.countries.each do |country| | |
like_countries_ids << country.id | |
end | |
ids = countries_ids & like_countries_ids | |
if ids.size >= 1 | |
countries_count = 10 | |
else | |
countries_count = 0 | |
end | |
end | |
def people_count(comparison) | |
directors_ids = [] | |
writers_ids = [] | |
actors_ids = [] | |
@film.films_people.each do |person| | |
case person.role | |
when 1 | |
directors_ids << person.person_id | |
when 2 | |
writers_ids << person.person_id | |
when 3 | |
actors_ids << person.person_id | |
end | |
end | |
like_directors_ids = [] | |
like_writers_ids = [] | |
like_actors_ids = [] | |
comparison.films_people.each do |person| | |
case person.role | |
when 1 | |
like_directors_ids << person.person_id | |
when 2 | |
like_writers_ids << person.person_id | |
when 3 | |
like_actors_ids << person.person_id | |
end | |
end | |
directors = directors_ids & like_directors_ids | |
writers = writers_ids & like_writers_ids | |
actors = actors_ids & like_actors_ids | |
directors_size = directors.size | |
if directors_size == 0 | |
directors_count = 0 | |
elsif directors_size >= 1 | |
directors_count = 20 | |
end | |
writers_size = writers.size | |
if writers_size == 0 | |
writers_count = 0 | |
elsif writers_size >= 1 | |
writers_count = 20 | |
end | |
actors_size = actors.size | |
if actors_size == 0 | |
actors_count = 0 | |
elsif actors_size == 1 | |
actors_count = 7 | |
elsif actors_size >= 2 | |
actors_count = 10 | |
end | |
people_count = directors_count + writers_count + actors_count | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment