Functional programming Phoenix框架查询参数

Functional programming Phoenix框架查询参数,functional-programming,elixir,phoenix-framework,Functional Programming,Elixir,Phoenix Framework,我正在尝试根据查询字符串中的参数构建查询。我刚开始学习Elixir/OTP和函数式编程,所以我试图找到实现这一点的函数式方法。目前,我正在减少传递到操作中的映射,并使用找到的参数构建一个查询。有没有一种更实用或更灵丹妙药的方法 query = Enum.reduce params, Event, fn(param, query) -> case param do {"after", date} -> date = DateTimeParser.parse!(d

我正在尝试根据查询字符串中的参数构建查询。我刚开始学习Elixir/OTP和函数式编程,所以我试图找到实现这一点的函数式方法。目前,我正在减少传递到操作中的映射,并使用找到的参数构建一个查询。有没有一种更实用或更灵丹妙药的方法

query = Enum.reduce params, Event, fn(param, query) ->
  case param do
    {"after", date} ->
      date = DateTimeParser.parse!(date, "{ISO:Extended:Z}")
      from e in query,
        where: e.time > ^date
    {"before", date} ->
      date = DateTimeParser.parse!(date, "{ISO:Extended:Z}")
      from e in query,
        where: e.time < ^date
    {"eventType", type} ->
      from e in query,
        where: e.event_type_id == ^type
    _ -> query
  end
end 
query=Enum.reduce参数,事件,fn(参数,查询)->
case param do
{“之后”,日期}->
date=DateTimeParser.parse!(日期,“{ISO:Extended:Z}”)
从查询中的e,
其中:e.time>^日期
{“之前”,日期}->
date=DateTimeParser.parse!(日期,“{ISO:Extended:Z}”)
从查询中的e,
地点:e.时间<^日期
{“eventType”,type}->
从查询中的e,
其中:e.event_type_id==^type
_->查询
结束
结束

我真正看到的唯一改进是使用函数而不是案例,这在添加更多案例之前不会有多大影响

query = Enum.reduce params, Event, build_query/2

def build_query({"after", date}, query) do
  date = DateTimeParser.parse!(date, "{ISO:Extended:Z}")
  from e in query,
    where: e.time > ^date
end

# etc ...

def build_query(_, query), do: query
如果我的语法有任何错误,请原谅我,但我现在不在家。希望你得到改变的精神