Skip to content

Instantly share code, notes, and snippets.

@sillypog
Last active November 30, 2016 01:16
Show Gist options
  • Save sillypog/0f8888d9a67229c3467c6fb02300d417 to your computer and use it in GitHub Desktop.
Save sillypog/0f8888d9a67229c3467c6fb02300d417 to your computer and use it in GitHub Desktop.
Portmeirion.IdentifyController V2
defp find_user(params) do
if params["login_id"] || params["device_id"] || params["prism_id"] do
from(u in Portmeirion.User, limit: 1, select: %{warehouse_id: u.warehouse_id})
|> join_device_clause(params)
|> where_clause(params)
|> order_clause(params)
|> Repo.one
else
nil
end
end
defp join_device_clause(query, %{"device_id" => _device_id}), do: from u in query, full_join: d in Portmeirion.Device, on: d.user_id == u.id
defp join_device_clause(query, _), do: query
defp order_clause(query, %{"device_id" => _device_id}), do: from [u, d] in query, order_by: [u.login_id, d.device_id, u.prism_id]
defp order_clause(query, _), do: from u in query, order_by: [u.login_id, u.prism_id]
defp where_clause(query, %{"login_id" => login_id, "device_id" => device_id, "prism_id" => prism_id}) do
from [u, d] in query, where: u.login_id == ^login_id or u.prism_id == ^prism_id or d.device_id == ^device_id
end
defp where_clause(query, %{"login_id" => login_id, "device_id" => device_id}) do
from [u, d] in query, where: u.login_id == ^login_id or d.device_id == ^device_id
end
defp where_clause(query, %{"login_id" => login_id, "prism_id" => prism_id}) do
from u in query, where: u.login_id == ^login_id or u.prism_id == ^prism_id
end
defp where_clause(query, %{"device_id" => device_id, "prism_id" => prism_id}) do
from [u, d] in query, where: d.device_id == ^device_id or u.prism_id == ^prism_id
end
defp where_clause(query, %{"login_id" => login_id}), do: from u in query, where: u.login_id == ^login_id
defp where_clause(query, %{"device_id" => device_id}), do: from [u,d] in query, where: d.device_id == ^device_id
defp where_clause(query, %{"prism_id" => prism_id}), do: from u in query, where: u.prism_id == ^prism_id
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment