@@ -133,6 +133,15 @@ defmodule Eventos.Actors do
|
||||
Repo.all(from a in Actor, where: a.type == "Group")
|
||||
end
|
||||
|
||||
def get_group_by_name(name) do
|
||||
actor = case String.split(name, "@") do
|
||||
[name] ->
|
||||
Repo.get_by(Actor, preferred_username: name, type: :Group)
|
||||
[name, domain] ->
|
||||
Repo.get_by(Actor, preferred_username: name, domain: domain, type: :Group)
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a group.
|
||||
|
||||
@@ -176,7 +185,7 @@ defmodule Eventos.Actors do
|
||||
|
||||
def insert_or_update_actor(data) do
|
||||
cs = Actor.remote_actor_creation(data)
|
||||
Repo.insert(cs, on_conflict: [set: [public_key: data.public_key, avatar_url: data.avatar_url, banner: data.banner_url, name: data.name]], conflict_target: [:preferred_username, :domain])
|
||||
Repo.insert(cs, on_conflict: [set: [public_key: data.public_key, avatar_url: data.avatar_url, banner_url: data.banner_url, name: data.name]], conflict_target: [:preferred_username, :domain])
|
||||
end
|
||||
|
||||
# def increase_event_count(%Actor{} = actor) do
|
||||
@@ -494,7 +503,8 @@ defmodule Eventos.Actors do
|
||||
def create_member(attrs \\ %{}) do
|
||||
%Member{}
|
||||
|> Member.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
|> Repo.insert!()
|
||||
|> Repo.preload([:actor, :parent])
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -544,6 +554,22 @@ defmodule Eventos.Actors do
|
||||
Member.changeset(member, %{})
|
||||
end
|
||||
|
||||
def groups_for_actor(%Actor{id: id} = _actor) do
|
||||
Repo.all(
|
||||
from m in Member,
|
||||
where: m.actor_id == ^id,
|
||||
preload: [:parent]
|
||||
)
|
||||
end
|
||||
|
||||
def members_for_group(%Actor{type: :Group, id: id} = _group) do
|
||||
Repo.all(
|
||||
from m in Member,
|
||||
where: m.parent_id == ^id,
|
||||
preload: [:parent, :actor]
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
alias Eventos.Actors.Bot
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@ defmodule Eventos.Actors.Member do
|
||||
alias Eventos.Actors.Member
|
||||
alias Eventos.Actors.Actor
|
||||
|
||||
|
||||
@primary_key false
|
||||
schema "members" do
|
||||
field :approved, :boolean
|
||||
field :role, :integer
|
||||
field :approved, :boolean, default: true
|
||||
field :role, :integer, default: 0 # 0 : Member, 1 : Moderator, 2 : Admin
|
||||
belongs_to :parent, Actor
|
||||
belongs_to :actor, Actor
|
||||
|
||||
@@ -20,7 +20,7 @@ defmodule Eventos.Actors.Member do
|
||||
@doc false
|
||||
def changeset(%Member{} = member, attrs) do
|
||||
member
|
||||
|> cast(attrs, [:role])
|
||||
|> validate_required([:role])
|
||||
|> cast(attrs, [:role, :approved, :parent_id, :actor_id])
|
||||
|> validate_required([:parent_id, :actor_id])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,6 +26,5 @@ defmodule Eventos.Addresses.Address do
|
||||
def changeset(%Address{} = address, attrs) do
|
||||
address
|
||||
|> cast(attrs, [:description, :floor, :geom, :addressCountry, :addressLocality, :addressRegion, :postalCode, :streetAddress])
|
||||
|> validate_required([:geom])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -51,6 +51,7 @@ defmodule Eventos.Events.Event do
|
||||
field :thumbnail, :string
|
||||
field :large_image, :string
|
||||
field :publish_at, Timex.Ecto.DateTimeWithTimezone
|
||||
field :uuid, Ecto.UUID, default: Ecto.UUID.generate()
|
||||
belongs_to :organizer_actor, Actor, [foreign_key: :organizer_actor_id]
|
||||
many_to_many :tags, Tag, join_through: "events_tags"
|
||||
belongs_to :category, Category
|
||||
@@ -64,12 +65,17 @@ defmodule Eventos.Events.Event do
|
||||
|
||||
@doc false
|
||||
def changeset(%Event{} = event, attrs) do
|
||||
event
|
||||
changeset = event
|
||||
|> cast(attrs, [:title, :description, :url, :begins_on, :ends_on, :organizer_actor_id, :category_id, :state, :status, :public, :thumbnail, :large_image, :publish_at])
|
||||
|> cast_assoc(:tags)
|
||||
|> cast_assoc(:address)
|
||||
|> validate_required([:title, :description, :begins_on, :ends_on, :organizer_actor_id, :category_id])
|
||||
|> TitleSlug.maybe_generate_slug()
|
||||
|> TitleSlug.unique_constraint()
|
||||
|> put_change(:uuid, Ecto.UUID.generate())
|
||||
|
||||
import Logger
|
||||
Logger.debug(inspect changeset)
|
||||
changeset
|
||||
end
|
||||
end
|
||||
|
||||
@@ -77,6 +77,13 @@ defmodule Eventos.Events do
|
||||
Repo.get_by(Event, url: url)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets an event by it's UUID
|
||||
"""
|
||||
def get_event_by_uuid(uuid) do
|
||||
Repo.get_by(Event, uuid: uuid)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a single event, with all associations loaded.
|
||||
"""
|
||||
@@ -93,6 +100,14 @@ defmodule Eventos.Events do
|
||||
Repo.preload(event, [:organizer_actor, :category, :sessions, :tracks, :tags, :participants, :address])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a full event by it's UUID
|
||||
"""
|
||||
def get_event_full_by_uuid(uuid) do
|
||||
event = Repo.get_by(Event, uuid: uuid)
|
||||
Repo.preload(event, [:organizer_actor, :category, :sessions, :tracks, :tags, :participants, :address])
|
||||
end
|
||||
|
||||
@spec get_event_full_by_name_and_slug!(String.t, String.t) :: Event.t
|
||||
def get_event_full_by_name_and_slug!(name, slug) do
|
||||
query = case String.split(name, "@") do
|
||||
@@ -139,7 +154,8 @@ defmodule Eventos.Events do
|
||||
def create_event(attrs \\ %{}) do
|
||||
%Event{}
|
||||
|> Event.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
|> Repo.insert!()
|
||||
|> Repo.preload([:organizer_actor])
|
||||
end
|
||||
|
||||
@doc """
|
||||
|
||||
@@ -9,7 +9,7 @@ defmodule Eventos.Events.Participant do
|
||||
|
||||
@primary_key false
|
||||
schema "participants" do
|
||||
field :role, :integer
|
||||
field :role, :integer, default: 0 # 0 : participant, 1 : moderator, 2 : administrator, 3 : creator
|
||||
field :approved, :boolean
|
||||
belongs_to :event, Event, primary_key: true
|
||||
belongs_to :actor, Actor, primary_key: true
|
||||
|
||||
@@ -11,7 +11,8 @@ defmodule Eventos.Export.ICalendar do
|
||||
summary: event.title,
|
||||
dtstart: event.begins_on,
|
||||
dtend: event.ends_on,
|
||||
description: event.description
|
||||
description: event.description,
|
||||
uid: event.uuid
|
||||
}]
|
||||
%ICalendar{events: events}
|
||||
|> ICalendar.to_ics()
|
||||
|
||||
Reference in New Issue
Block a user