Move to GraphQL

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2018-11-06 10:30:27 +01:00
parent 7e137d1a1c
commit b54dae7e15
149 changed files with 5605 additions and 4665 deletions

View File

@@ -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

View File

@@ -86,7 +86,6 @@ defmodule Mobilizon.Events.Event do
|> validate_required([
:title,
:begins_on,
:ends_on,
:organizer_actor_id,
:category_id,
:url,

View File

@@ -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.