Packages

An open source two way communication platform for the social sector

Current section

Files

Jump to
glific lib glific clients weunlearn.ex
Raw

lib/glific/clients/weunlearn.ex

defmodule Glific.Clients.Weunlearn do
@moduledoc false
import Ecto.Query, warn: false
alias Glific.{
Contacts.Contact,
Flows.Action,
Groups.ContactGroup,
Groups.UserGroup,
Repo,
Users.User
}
@doc """
Choose the first group the contact belongs to, and send the message
to the first staff member in that group
"""
# codebeat:disable[ABC]
@spec broadcast(Action.t(), Contact.t(), non_neg_integer) :: non_neg_integer
def broadcast(_action, contact, staff_id) do
group_staff_id =
Contact
|> where([c], c.id == ^contact.id)
|> join(:inner, [c], cg in ContactGroup, on: c.id == cg.contact_id)
|> join(:inner, [_c, cg], ug in UserGroup, on: cg.group_id == ug.group_id)
|> join(:inner, [_c, _cg, ug], u in User, on: ug.user_id == u.id)
|> select([_c, _cg, _ug, u], u.contact_id)
|> order_by([_c, _cg, _ug, u], u.contact_id)
|> first()
|> Repo.one()
if is_nil(group_staff_id),
do: staff_id,
else: group_staff_id
end
# codebeat:enable[ABC]
end