@@ -62,7 +62,7 @@ defmodule Eventos.Actors.Actor do
|
||||
field :preferred_username, :string
|
||||
field :public_key, :string
|
||||
field :private_key, :string
|
||||
field :manually_approves_followers, :boolean
|
||||
field :manually_approves_followers, :boolean, default: false
|
||||
field :suspended, :boolean, default: false
|
||||
many_to_many :followers, Actor, join_through: Follower
|
||||
has_many :organized_events, Event, [foreign_key: :organizer_actor_id]
|
||||
@@ -92,7 +92,7 @@ defmodule Eventos.Actors.Actor do
|
||||
changes =
|
||||
%Actor{}
|
||||
|> Ecto.Changeset.cast(params, [:url, :outbox_url, :inbox_url, :following_url, :followers_url, :type, :name, :domain, :summary, :preferred_username, :public_key, :manually_approves_followers])
|
||||
|> validate_required([:url, :outbox_url, :inbox_url, :following_url, :followers_url, :type, :name, :domain, :summary, :preferred_username, :public_key, :manually_approves_followers])
|
||||
|> validate_required([:url, :outbox_url, :inbox_url, :type, :name, :domain, :summary, :preferred_username, :public_key])
|
||||
|> unique_constraint(:preferred_username, name: :actors_preferred_username_domain_index)
|
||||
|> validate_length(:summary, max: 5000)
|
||||
|> validate_length(:preferred_username, max: 100)
|
||||
@@ -101,21 +101,6 @@ defmodule Eventos.Actors.Actor do
|
||||
Logger.debug("Remote actor creation")
|
||||
Logger.debug(inspect changes)
|
||||
changes
|
||||
# if changes.valid? do
|
||||
# case changes.changes[:info]["source_data"] do
|
||||
# %{"followers" => followers} ->
|
||||
# changes
|
||||
# |> put_change(:follower_address, followers)
|
||||
#
|
||||
# _ ->
|
||||
# followers = User.ap_followers(%User{nickname: changes.changes[:nickname]})
|
||||
#
|
||||
# changes
|
||||
# |> put_change(:follower_address, followers)
|
||||
# end
|
||||
# else
|
||||
# changes
|
||||
# end
|
||||
end
|
||||
|
||||
def get_or_fetch_by_url(url) do
|
||||
|
||||
@@ -150,10 +150,6 @@ defmodule Eventos.Actors do
|
||||
defp blank?(n), do: n
|
||||
|
||||
def insert_or_update_actor(data) do
|
||||
data =
|
||||
data
|
||||
|> Map.put(:name, blank?(data[:preferred_username]) || data[:name])
|
||||
|
||||
cs = Actor.remote_actor_creation(data)
|
||||
Repo.insert(cs, on_conflict: [set: [public_key: data.public_key]], conflict_target: [:preferred_username, :domain])
|
||||
end
|
||||
@@ -207,6 +203,19 @@ defmodule Eventos.Actors do
|
||||
Repo.one from a in Actor, where: a.preferred_username == ^name and is_nil(a.domain)
|
||||
end
|
||||
|
||||
def get_local_actor_by_name_with_everything(name) do
|
||||
actor = Repo.one from a in Actor, where: a.preferred_username == ^name and is_nil(a.domain)
|
||||
Repo.preload(actor, :organized_events)
|
||||
end
|
||||
|
||||
def get_actor_by_name_with_everything(name) do
|
||||
actor = case String.split(name, "@") do
|
||||
[name] -> Repo.one from a in Actor, where: a.preferred_username == ^name and is_nil(a.domain)
|
||||
[name, domain] -> Repo.one from a in Actor, where: a.preferred_username == ^name and a.domain == ^domain
|
||||
end
|
||||
Repo.preload(actor, :organized_events)
|
||||
end
|
||||
|
||||
def get_or_fetch_by_url(url) do
|
||||
if actor = get_actor_by_url(url) do
|
||||
actor
|
||||
|
||||
@@ -32,7 +32,7 @@ defmodule Eventos.Events.Event do
|
||||
"""
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Eventos.Events.{Event, Participant, Request, Tag, Category, Session, Track}
|
||||
alias Eventos.Events.{Event, Participant, Tag, Category, Session, Track}
|
||||
alias Eventos.Events.Event.TitleSlug
|
||||
alias Eventos.Actors.Actor
|
||||
alias Eventos.Addresses.Address
|
||||
@@ -55,7 +55,6 @@ defmodule Eventos.Events.Event do
|
||||
many_to_many :tags, Tag, join_through: "events_tags"
|
||||
belongs_to :category, Category
|
||||
many_to_many :participants, Actor, join_through: Participant
|
||||
has_many :event_request, Request
|
||||
has_many :tracks, Track
|
||||
has_many :sessions, Session
|
||||
belongs_to :address, Address
|
||||
|
||||
@@ -20,7 +20,8 @@ defmodule Eventos.Events do
|
||||
|
||||
"""
|
||||
def list_events do
|
||||
Repo.all(Event)
|
||||
events = Repo.all(Event)
|
||||
Repo.preload(events, [:organizer_actor])
|
||||
end
|
||||
|
||||
def get_events_for_actor(%Actor{id: actor_id} = _actor, page \\ 1, limit \\ 10) do
|
||||
@@ -94,12 +95,17 @@ defmodule Eventos.Events do
|
||||
|
||||
@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
|
||||
event = Repo.one(
|
||||
from e in Event,
|
||||
join: a in Actor,
|
||||
on: a.id == e.organizer_actor_id and a.name == ^name,
|
||||
where: e.slug == ^slug
|
||||
)
|
||||
query = case String.split(name, "@") do
|
||||
[name, domain] -> from e in Event,
|
||||
join: a in Actor,
|
||||
on: a.id == e.organizer_actor_id and a.preferred_username == ^name and a.domain == ^domain,
|
||||
where: e.slug == ^slug
|
||||
[name] -> from e in Event,
|
||||
join: a in Actor,
|
||||
on: a.id == e.organizer_actor_id and a.preferred_username == ^name and is_nil(a.domain),
|
||||
where: e.slug == ^slug
|
||||
end
|
||||
event = Repo.one(query)
|
||||
Repo.preload(event, [:organizer_actor, :category, :sessions, :tracks, :tags, :participants, :address])
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user