瀏覽代碼

Add relationships to masto api.

tags/v0.9.9
Roger Braun 6 年之前
父節點
當前提交
49929321c7
共有 5 個文件被更改,包括 65 次插入0 次删除
  1. +9
    -0
      lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
  2. +17
    -0
      lib/pleroma/web/mastodon_api/views/account_view.ex
  3. +2
    -0
      lib/pleroma/web/router.ex
  4. +20
    -0
      test/web/mastodon_api/account_view_test.exs
  5. +17
    -0
      test/web/mastodon_api/mastodon_api_controller_test.exs

+ 9
- 0
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex 查看文件

@@ -7,6 +7,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.TwitterAPI.TwitterAPI
alias Pleroma.Web.CommonAPI
import Ecto.Query
import Logger

def create_app(conn, params) do
@@ -177,6 +178,14 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|> json(result)
end

def relationships(%{assigns: %{user: user}} = conn, %{"id" => id}) do
id = List.wrap(id)
q = from u in User,
where: u.id in ^id
targets = Repo.all(q)
render conn, AccountView, "relationships.json", %{user: user, targets: targets}
end

def empty_array(conn, _) do
Logger.debug("Unimplemented, returning an empty array")
json(conn, [])


+ 17
- 0
lib/pleroma/web/mastodon_api/views/account_view.ex 查看文件

@@ -1,6 +1,7 @@
defmodule Pleroma.Web.MastodonAPI.AccountView do
use Pleroma.Web, :view
alias Pleroma.User
alias Pleroma.Web.MastodonAPI.AccountView

defp image_url(%{"url" => [ %{ "href" => href } | t ]}), do: href
defp image_url(_), do: nil
@@ -38,4 +39,20 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
url: user.ap_id
}
end

def render("relationship.json", %{user: user, target: target}) do
%{
id: target.id,
following: User.following?(target, user),
followed_by: User.following?(user, target),
blocking: false,
muting: false,
requested: false,
domain_blocking: false
}
end

def render("relationships.json", %{user: user, targets: targets}) do
render_many(targets, AccountView, "relationship.json", user: user, as: :target)
end
end

+ 2
- 0
lib/pleroma/web/router.ex 查看文件

@@ -56,6 +56,8 @@ defmodule Pleroma.Web.Router do
pipe_through :authenticated_api

get "/accounts/verify_credentials", MastodonAPIController, :verify_credentials
get "/accounts/relationships", MastodonAPIController, :relationships

get "/timelines/home", MastodonAPIController, :home_timeline

post "/statuses", MastodonAPIController, :post_status


+ 20
- 0
test/web/mastodon_api/account_view_test.exs 查看文件

@@ -2,6 +2,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.User

test "Represent a user account" do
user = insert(:user, %{info: %{"note_count" => 5, "follower_count" => 3}, nickname: "shp@shitposter.club"})
@@ -39,4 +40,23 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do

assert expected == AccountView.render("mention.json", %{user: user})
end

test "represent a relationship" do
user = insert(:user)
other_user = insert(:user)

{:ok, user} = User.follow(user, other_user)

expected = %{
id: other_user.id,
following: false,
followed_by: true,
blocking: false,
muting: false,
requested: false,
domain_blocking: false
}

assert expected == AccountView.render("relationship.json", %{user: user, target: other_user})
end
end

+ 17
- 0
test/web/mastodon_api/mastodon_api_controller_test.exs 查看文件

@@ -181,4 +181,21 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
assert id == note_two.id
end
end

describe "user relationships" do
test "returns the relationships for the current user", %{conn: conn} do
user = insert(:user)
other_user = insert(:user)

{:ok, user} = User.follow(user, other_user)

conn = conn
|> assign(:user, user)
|> get("/api/v1/accounts/relationships", %{"id" => [other_user.id]})

assert [relationship] = json_response(conn, 200)

assert other_user.id == relationship["id"]
end
end
end

Loading…
取消
儲存