Мне нужно отфильтровать индекс, который может принимать в некоторых случаях значения, разделенные запятыми.Я работаю с Ecto, без Phoenix (с ковбоем).
мой индекс будет поддерживать такой поиск, как этот
/users?ids=1,2,3&email=simple@email.com&another=something
, где в поле электронной почты не допускается более одного параметра, а идентификаторы поддерживают болеечем 1 id
Это то, что я пробовал
def list_all(query_params) do
filtered_params = prepare_list_query(query_params)
User
|> where(^filtered_params)
|> Repo.all()
end
# In order to simplify queries I decided to manage all queries as IN clause
# it will returns [id: [1,2,3], email:["something@mymail.com"]]
defp prepare_list_query(query_params) do
query_params
|> Map.take(~w(ids email another))
# Careful: read reference #1 above
|> Enum.map(fn {name, value} ->
case name do
"ids" -> {:id, String.split(value, ",")}
single_param -> {String.to_atom(single_param), [value]}
end
end)
end
Это сложно, но моя идея состоит в том, чтобы вернуть
[id: [1,2,3], email:["something@mymail.com"]]
, а затем работать все фильтры как предложение IN.
Этот фильтр должен поддерживать отправку нуля, одного или всех параметров.
Я новичок в мире эликсира и делаю свои первые шаги.
Заранее спасибо:).