Advertisement
Guest User

Untitled

a guest
Nov 1st, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.54 KB | None | 0 0
  1. def search_performers_in_contacts_relations(skill_id, contacts_ids) do
  2.     Repo.get! Skill, skill_id   # 404 handle
  3.  
  4.     users_query = from(
  5.       u in User,
  6.       left_join: us in "users_skills", on: u.id == us.user_id,
  7.       where: us.skill_id == ^skill_id,
  8.       group_by: u.id,
  9.       preload: [:skills],
  10.       select: u
  11.     )
  12.     users = Repo.all users_query
  13.     user_ids = users |> Enum.map(fn each_user -> each_user.id end)
  14.  
  15.     relations_query = from(
  16.       r in Relation,
  17.       where:
  18.         r.state == @confirmed_state
  19.         and r.skill_id == ^skill_id
  20.         and r.performer_id in ^user_ids
  21.     )
  22.     relations = Repo.all(relations_query)
  23.  
  24.     newcomers = users
  25.     |> Enum.map(
  26.       fn each_user ->  
  27.         # учитываем contact_ids
  28.         performer_relations_count = relations
  29.         |> Enum.filter(
  30.           fn each_relation ->
  31.             each_relation.performer_id == each_user.id
  32.             && each_relation.consumer_id in contacts_ids
  33.           end
  34.         )
  35.         |> Enum.count()
  36.  
  37.         # не учитываем contact_ids
  38.         all_relations_count = relations
  39.         |> Enum.filter(
  40.           fn each_relation ->
  41.             each_relation.performer_id == each_user.id
  42.           end
  43.         )
  44.         |> Enum.count()
  45.  
  46.         %{ each_user | performer_relations_count: performer_relations_count | all_relations_count: all_relations_count }
  47.       end
  48.     )
  49.  
  50.     newcomers
  51.     |> Enum.sort(fn (user1, user2) -> user1.performer_relations_count > user2.performer_relations_count end)
  52. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement