added Tag
schema
This commit is contained in:
parent
35e8573483
commit
34d8ce945f
37
lib/pleroma/tag.ex
Normal file
37
lib/pleroma/tag.ex
Normal file
@ -0,0 +1,37 @@
|
||||
# Pleroma: A lightweight social networking server
|
||||
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Tag do
|
||||
use Ecto.Schema
|
||||
|
||||
import Ecto.Query
|
||||
|
||||
alias Pleroma.Repo
|
||||
alias Pleroma.Web.ActivityPub.MRF
|
||||
|
||||
@type t :: %__MODULE__{}
|
||||
|
||||
schema "tags" do
|
||||
field(:name, :string)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@spec upsert(String.t()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
|
||||
def upsert(name) do
|
||||
%__MODULE__{}
|
||||
|> Ecto.Changeset.change(name: name)
|
||||
|> Ecto.Changeset.unique_constraint(:name)
|
||||
|> Repo.insert(on_conflict: :nothing, conflict_target: :name)
|
||||
end
|
||||
|
||||
@spec list_tags() :: list(String.t())
|
||||
def list_tags do
|
||||
from(u in __MODULE__, select: u.name)
|
||||
|> Repo.all()
|
||||
|> Kernel.++(MRF.TagPolicy.policy_tags())
|
||||
|> Enum.uniq()
|
||||
|> Enum.sort()
|
||||
end
|
||||
end
|
@ -1259,15 +1259,6 @@ defmodule Pleroma.User do
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@spec list_tags() :: list(String.t())
|
||||
def list_tags do
|
||||
from(
|
||||
u in __MODULE__,
|
||||
select: type(fragment("DISTINCT unnest(?)", u.tags), :string)
|
||||
)
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
def increase_note_count(%User{} = user) do
|
||||
User
|
||||
|> where(id: ^user.id)
|
||||
|
@ -25,11 +25,7 @@ defmodule Pleroma.Web.AdminAPI.TagController do
|
||||
action_fallback(AdminAPI.FallbackController)
|
||||
|
||||
def list(%{assigns: %{user: _admin}} = conn, _) do
|
||||
tags =
|
||||
Pleroma.User.list_tags()
|
||||
|> Kernel.++(Pleroma.Web.ActivityPub.MRF.TagPolicy.policy_tags())
|
||||
|> Enum.uniq()
|
||||
|> Enum.sort()
|
||||
tags = Pleroma.Tag.list_tags()
|
||||
|
||||
json(conn, tags)
|
||||
end
|
||||
|
27
priv/repo/migrations/20201012093959_create_tags.exs
Normal file
27
priv/repo/migrations/20201012093959_create_tags.exs
Normal file
@ -0,0 +1,27 @@
|
||||
defmodule Pleroma.Repo.Migrations.CreateTags do
|
||||
use Ecto.Migration
|
||||
|
||||
def up do
|
||||
create_if_not_exists table(:tags) do
|
||||
add(:name, :string, null: false)
|
||||
timestamps()
|
||||
end
|
||||
|
||||
create_if_not_exists(unique_index(:tags, :name))
|
||||
flush()
|
||||
|
||||
execute(collect_user_tags_query())
|
||||
end
|
||||
|
||||
def down do
|
||||
drop_if_exists(table(:tags))
|
||||
end
|
||||
|
||||
defp collect_user_tags_query do
|
||||
"""
|
||||
INSERT INTO tags(name, inserted_at, updated_at)
|
||||
SELECT DISTINCT unnest(tags), now(), now() from users
|
||||
ON CONFLICT DO NOTHING
|
||||
"""
|
||||
end
|
||||
end
|
@ -490,4 +490,8 @@ defmodule Pleroma.Factory do
|
||||
context: ["home"]
|
||||
}
|
||||
end
|
||||
|
||||
def tag_factory do
|
||||
%Pleroma.Tag{name: "verify"}
|
||||
end
|
||||
end
|
||||
|
@ -32,9 +32,9 @@ defmodule Pleroma.Web.AdminAPI.TagControllerTest do
|
||||
|
||||
describe "GET /api/pleroma/admin/users/tag" do
|
||||
test "it returns user tags and mrf policy tags", %{conn: conn} do
|
||||
insert(:user, %{tags: ["x"]})
|
||||
insert(:user, %{tags: ["y"]})
|
||||
insert(:user, %{tags: ["unchanged"]})
|
||||
insert(:tag, name: "x")
|
||||
insert(:tag, name: "y")
|
||||
insert(:tag, name: "unchanged")
|
||||
|
||||
response =
|
||||
conn
|
||||
|
Loading…
Reference in New Issue
Block a user