@@ -5,10 +5,11 @@ defmodule Mobilizon.Events.Category do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Mobilizon.Events.Category
|
||||
use Arc.Ecto.Schema
|
||||
|
||||
schema "categories" do
|
||||
field(:description, :string)
|
||||
field(:picture, :string)
|
||||
field(:picture, MobilizonWeb.Uploaders.Category.Type)
|
||||
field(:title, :string, null: false)
|
||||
|
||||
timestamps()
|
||||
@@ -17,7 +18,8 @@ defmodule Mobilizon.Events.Category do
|
||||
@doc false
|
||||
def changeset(%Category{} = category, attrs) do
|
||||
category
|
||||
|> cast(attrs, [:title, :description, :picture])
|
||||
|> cast(attrs, [:title, :description])
|
||||
|> cast_attachments(attrs, [:picture])
|
||||
|> validate_required([:title])
|
||||
|> unique_constraint(:title)
|
||||
end
|
||||
|
||||
@@ -86,7 +86,6 @@ defmodule Mobilizon.Events.Event do
|
||||
|> validate_required([
|
||||
:title,
|
||||
:begins_on,
|
||||
:ends_on,
|
||||
:organizer_actor_id,
|
||||
:category_id,
|
||||
:url,
|
||||
|
||||
@@ -6,23 +6,16 @@ defmodule Mobilizon.Events do
|
||||
import Ecto.Query, warn: false
|
||||
alias Mobilizon.Repo
|
||||
|
||||
alias Mobilizon.Events.Event
|
||||
alias Mobilizon.Events.Comment
|
||||
alias Mobilizon.Events.{Event, Comment, Participant}
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Addresses.Address
|
||||
|
||||
@doc """
|
||||
Returns the list of events.
|
||||
def data() do
|
||||
Dataloader.Ecto.new(Mobilizon.Repo, query: &query/2)
|
||||
end
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_events()
|
||||
[%Event{}, ...]
|
||||
|
||||
"""
|
||||
def list_events do
|
||||
events = Repo.all(Event)
|
||||
Repo.preload(events, [:organizer_actor])
|
||||
def query(queryable, _params) do
|
||||
queryable
|
||||
end
|
||||
|
||||
def get_events_for_actor(%Actor{id: actor_id} = _actor, page \\ 1, limit \\ 10) do
|
||||
@@ -179,15 +172,47 @@ defmodule Mobilizon.Events do
|
||||
])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the list of events.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_events()
|
||||
[%Event{}, ...]
|
||||
|
||||
"""
|
||||
def list_events(page \\ 1, limit \\ 10) do
|
||||
start = (page - 1) * limit
|
||||
|
||||
query =
|
||||
from(e in Event,
|
||||
limit: ^limit,
|
||||
offset: ^start,
|
||||
preload: [:organizer_actor]
|
||||
)
|
||||
|
||||
Repo.all(query)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Find events by name
|
||||
"""
|
||||
def find_events_by_name(name) when name == "", do: []
|
||||
def find_events_by_name(name, page \\ 1, limit \\ 10)
|
||||
def find_events_by_name("", page, limit), do: list_events(page, limit)
|
||||
|
||||
def find_events_by_name(name) do
|
||||
def find_events_by_name(name, page, limit) do
|
||||
name = String.trim(name)
|
||||
events = Repo.all(from(a in Event, where: ilike(a.title, ^like_sanitize(name))))
|
||||
Repo.preload(events, [:organizer_actor])
|
||||
start = (page - 1) * limit
|
||||
|
||||
query =
|
||||
from(e in Event,
|
||||
limit: ^limit,
|
||||
offset: ^start,
|
||||
where: ilike(e.title, ^like_sanitize(name)),
|
||||
preload: [:organizer_actor]
|
||||
)
|
||||
|
||||
Repo.all(query)
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -210,9 +235,16 @@ defmodule Mobilizon.Events do
|
||||
|
||||
"""
|
||||
def create_event(attrs \\ %{}) do
|
||||
case %Event{} |> Event.changeset(attrs) |> Repo.insert() do
|
||||
{:ok, %Event{} = event} -> {:ok, Repo.preload(event, [:organizer_actor])}
|
||||
err -> err
|
||||
with {:ok, %Event{} = event} <- %Event{} |> Event.changeset(attrs) |> Repo.insert(),
|
||||
{:ok, %Participant{} = _participant} <-
|
||||
%Participant{}
|
||||
|> Participant.changeset(%{
|
||||
actor_id: attrs.organizer_actor_id,
|
||||
role: 4,
|
||||
event_id: event.id
|
||||
})
|
||||
|> Repo.insert() do
|
||||
{:ok, Repo.preload(event, [:organizer_actor])}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -475,6 +507,27 @@ defmodule Mobilizon.Events do
|
||||
Repo.all(Participant)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns the list of participants for an event.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> list_participants_for_event(someuuid)
|
||||
[%Participant{}, ...]
|
||||
|
||||
"""
|
||||
def list_participants_for_event(uuid) do
|
||||
Repo.all(
|
||||
from(
|
||||
p in Participant,
|
||||
join: e in Event,
|
||||
on: p.event_id == e.id,
|
||||
where: e.uuid == ^uuid,
|
||||
preload: [:actor]
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single participant.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user