Introduce follower, add tests

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2018-08-01 14:45:18 +02:00
parent 979aad5acb
commit 115d1d1a3e
15 changed files with 477 additions and 138 deletions

View File

@@ -0,0 +1,43 @@
defmodule EventosWeb.FollowerController do
use EventosWeb, :controller
alias Eventos.Actors
alias Eventos.Actors.Follower
action_fallback(EventosWeb.FallbackController)
def index(conn, _params) do
followers = Actors.list_followers()
render(conn, "index.json", followers: followers)
end
def create(conn, %{"follower" => follower_params}) do
with {:ok, %Follower{} = follower} <- Actors.create_follower(follower_params) do
conn
|> put_status(:created)
|> put_resp_header("location", follower_path(conn, :show, follower))
|> render("show.json", follower: follower)
end
end
def show(conn, %{"id" => id}) do
follower = Actors.get_follower!(id)
render(conn, "show.json", follower: follower)
end
def update(conn, %{"id" => id, "follower" => follower_params}) do
follower = Actors.get_follower!(id)
with {:ok, %Follower{} = follower} <- Actors.update_follower(follower, follower_params) do
render(conn, "show.json", follower: follower)
end
end
def delete(conn, %{"id" => id}) do
follower = Actors.get_follower!(id)
with {:ok, %Follower{}} <- Actors.delete_follower(follower) do
send_resp(conn, :no_content, "")
end
end
end

View File

@@ -15,8 +15,15 @@ defmodule EventosWeb.GroupController do
end
def create(conn, %{"group" => group_params}) do
with actor_admin = Guardian.Plug.current_resource(conn).actor,
{:ok, %Actor{} = group} <- Actors.create_group(group_params) do
with {:ok, %Actor{} = group} <- Actors.create_group(group_params) do
%Member{} =
_member =
Actors.create_member(%{
"parent_id" => group.id,
"actor_id" => Actors.get_local_actor_by_name(group_params["actor_admin"]).id,
"role" => 2
})
conn
|> put_status(:created)
|> put_resp_header("location", actor_path(conn, :show, group))
@@ -24,9 +31,9 @@ defmodule EventosWeb.GroupController do
end
end
def join(conn, %{"name" => group_name}) do
with actor = Guardian.Plug.current_resource(conn).actor,
group <- Actors.get_group_by_name(group_name),
def join(conn, %{"name" => group_name, "actor_name" => actor_name}) do
with group <- Actors.get_group_by_name(group_name),
actor <- Actors.get_local_actor_by_name(actor_name),
%Member{} = member <-
Actors.create_member(%{"parent_id" => group.id, "actor_id" => actor.id}) do
conn
@@ -34,7 +41,7 @@ defmodule EventosWeb.GroupController do
|> render(EventosWeb.MemberView, "member.json", member: member)
else
err ->
import Logger
require Logger
Logger.debug(inspect(err))
end
end

View File

@@ -57,6 +57,9 @@ defmodule EventosWeb.Router do
get("/actors", ActorController, :index)
get("/actors/search/:name", ActorController, :search)
get("/actors/:name", ActorController, :show)
resources("/followers", FollowerController, except: [:new, :edit])
resources("/tags", TagController, only: [:index, :show])
resources("/categories", CategoryController, only: [:index, :show])
resources("/sessions", SessionController, only: [:index, :show])
@@ -67,7 +70,7 @@ defmodule EventosWeb.Router do
end
end
# Other scopes may use custom stacks.
# Authentificated API
scope "/api", EventosWeb do
pipe_through(:api_auth)

View File

@@ -13,8 +13,7 @@ defmodule EventosWeb.ActivityPub.ActorView do
import Ecto.Query
def render("actor.json", %{actor: actor}) do
pem = Actor.get_keys_for_actor(actor)
public_key = Eventos.Service.ActivityPub.Utils.pem_to_public_key_pem(pem)
public_key = Eventos.Service.ActivityPub.Utils.pem_to_public_key_pem(actor.keys)
%{
"id" => actor.url,

View File

@@ -0,0 +1,18 @@
defmodule EventosWeb.FollowerView do
use EventosWeb, :view
alias EventosWeb.FollowerView
def render("index.json", %{followers: followers}) do
%{data: render_many(followers, FollowerView, "follower.json")}
end
def render("show.json", %{follower: follower}) do
%{data: render_one(follower, FollowerView, "follower.json")}
end
def render("follower.json", %{follower: follower}) do
%{id: follower.id,
approved: follower.approved,
score: follower.score}
end
end