Improvements to group page

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2020-09-02 17:42:17 +02:00
parent 69e2a36d03
commit b0e8a32d2a
19 changed files with 298 additions and 87 deletions

View File

@@ -405,7 +405,7 @@ defmodule Mobilizon.Events do
def list_public_events_for_actor(actor, page \\ nil, limit \\ nil)
def list_public_events_for_actor(%Actor{type: :Group} = group, page, limit),
do: list_organized_events_for_group(group, page, limit)
do: list_organized_events_for_group(group, :public, nil, page, limit)
def list_public_events_for_actor(%Actor{id: actor_id}, page, limit) do
actor_id
@@ -424,10 +424,25 @@ defmodule Mobilizon.Events do
|> Page.build_page(page, limit)
end
@spec list_organized_events_for_group(Actor.t(), integer | nil, integer | nil) :: Page.t()
def list_organized_events_for_group(%Actor{id: group_id}, page \\ nil, limit \\ nil) do
@spec list_organized_events_for_group(
Actor.t(),
DateTime.t() | nil,
DateTime.t() | nil,
integer | nil,
integer | nil
) :: Page.t()
def list_organized_events_for_group(
%Actor{id: group_id},
visibility \\ :public,
after_datetime \\ nil,
before_datetime \\ nil,
page \\ nil,
limit \\ nil
) do
group_id
|> event_for_group_query()
|> event_filter_visibility(visibility)
|> event_filter_begins_on(after_datetime, before_datetime)
|> preload_for_event()
|> Page.build_page(page, limit)
end
@@ -1643,6 +1658,45 @@ defmodule Mobilizon.Events do
from(p in query, where: p.role == ^role)
end
defp event_filter_visibility(query, :all), do: query
defp event_filter_visibility(query, :public) do
query
|> where(visibility: ^:public)
end
defp event_filter_begins_on(query, nil, nil),
do: event_order_begins_on_desc(query)
defp event_filter_begins_on(query, %DateTime{} = after_datetime, nil) do
query
|> where([e], e.begins_on > ^after_datetime)
|> event_order_begins_on_asc()
end
defp event_filter_begins_on(query, nil, %DateTime{} = before_datetime) do
query
|> where([e], e.begins_on < ^before_datetime)
|> event_order_begins_on_desc()
end
defp event_filter_begins_on(
query,
%DateTime{} = after_datetime,
%DateTime{} = before_datetime
) do
query
|> where([e], e.begins_on < ^before_datetime)
|> where([e], e.begins_on > ^after_datetime)
|> event_order_begins_on_asc()
end
defp event_order_begins_on_asc(query),
do: order_by(query, [e], asc: e.begins_on)
defp event_order_begins_on_desc(query),
do: order_by(query, [e], desc: e.begins_on)
defp participation_filter_begins_on(query, nil, nil),
do: participation_order_begins_on_desc(query)