Update
This commit is contained in:
parent
3a57d74357
commit
df548a4943
12 changed files with 137 additions and 179 deletions
|
@ -1,6 +1,7 @@
|
|||
defmodule Nulla.Models.Relation do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
import Ecto.Query
|
||||
alias Nulla.Repo
|
||||
alias Nulla.Snowflake
|
||||
alias Nulla.Models.Actor
|
||||
|
@ -21,8 +22,8 @@ defmodule Nulla.Models.Relation do
|
|||
field :requested, :boolean, default: false
|
||||
field :note, :string
|
||||
|
||||
belongs_to :local_actor_id, Actor
|
||||
belongs_to :remote_actor_id, Actor
|
||||
belongs_to :local_actor, Actor
|
||||
belongs_to :remote_actor, Actor
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
@ -44,19 +45,65 @@ defmodule Nulla.Models.Relation do
|
|||
:domain_blocking,
|
||||
:requested,
|
||||
:note,
|
||||
:source_id,
|
||||
:target_id
|
||||
:local_actor_id,
|
||||
:remote_actor_id
|
||||
])
|
||||
|> validate_required([:id, :local_actor_id, :remote_actor_id])
|
||||
|> unique_constraint([:local_actor_id, :remote_actor_id])
|
||||
end
|
||||
|
||||
def create_relation(attrs) do
|
||||
def create_relation(attrs) do
|
||||
id = Snowflake.next_id()
|
||||
|
||||
%__MODULE__{}
|
||||
|> __MODULE__.changeset(attrs)
|
||||
|> Changeset.put_change(:id, id)
|
||||
|> put_change(:id, id)
|
||||
|> Repo.insert()
|
||||
end
|
||||
end
|
||||
|
||||
def count_following(local_actor_id) do
|
||||
__MODULE__
|
||||
|> where([r], r.local_actor_id == ^local_actor_id and r.following == true)
|
||||
|> select([r], count(r.id))
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
def get_following(local_actor_id, page, limit) when is_integer(page) and page > 0 do
|
||||
offset = (page - 1) * limit
|
||||
|
||||
query =
|
||||
from r in __MODULE__,
|
||||
join: a in Actor,
|
||||
on: a.id == r.remote_actor_id,
|
||||
where: r.local_actor_id == ^local_actor_id and r.following == true,
|
||||
order_by: [asc: a.published],
|
||||
offset: ^offset,
|
||||
limit: ^limit,
|
||||
select: a
|
||||
|
||||
Repo.all(query)
|
||||
end
|
||||
|
||||
def count_followers(local_actor_id) do
|
||||
__MODULE__
|
||||
|> where([r], r.local_actor_id == ^local_actor_id and r.followed_by == true)
|
||||
|> select([r], count(r.id))
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
def get_followers(local_actor_id, page, limit) when is_integer(page) and page > 0 do
|
||||
offset = (page - 1) * limit
|
||||
|
||||
query =
|
||||
from r in __MODULE__,
|
||||
join: a in Actor,
|
||||
on: a.id == r.remote_actor_id,
|
||||
where: r.local_actor_id == ^local_actor_id and r.followed_by == true,
|
||||
order_by: [asc: a.published],
|
||||
offset: ^offset,
|
||||
limit: ^limit,
|
||||
select: a
|
||||
|
||||
Repo.all(query)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue