Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def search_performers_in_contacts_relations(skill_id, contacts_ids) do
- Repo.get! Skill, skill_id # 404 handle
- users_query = from(
- u in User,
- left_join: us in "users_skills", on: u.id == us.user_id,
- where: us.skill_id == ^skill_id,
- group_by: u.id,
- preload: [:skills],
- select: u
- )
- users = Repo.all users_query
- user_ids = users |> Enum.map(fn each_user -> each_user.id end)
- relations_query = from(
- r in Relation,
- where:
- r.state == @confirmed_state
- and r.skill_id == ^skill_id
- and r.performer_id in ^user_ids
- )
- relations = Repo.all(relations_query)
- newcomers = users
- |> Enum.map(
- fn each_user ->
- # учитываем contact_ids
- performer_relations_count = relations
- |> Enum.filter(
- fn each_relation ->
- each_relation.performer_id == each_user.id
- && each_relation.consumer_id in contacts_ids
- end
- )
- |> Enum.count()
- # не учитываем contact_ids
- all_relations_count = relations
- |> Enum.filter(
- fn each_relation ->
- each_relation.performer_id == each_user.id
- end
- )
- |> Enum.count()
- %{ each_user | performer_relations_count: performer_relations_count | all_relations_count: all_relations_count }
- end
- )
- newcomers
- |> Enum.sort(fn (user1, user2) -> user1.performer_relations_count > user2.performer_relations_count end)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement