aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/user_note.ex
diff options
context:
space:
mode:
authormarcin mikołajczak <git@mkljczk.pl>2021-11-21 16:53:30 +0100
committermarcin mikołajczak <git@mkljczk.pl>2021-11-21 16:56:26 +0100
commit40414bf177c93b39d75c6091ef0ce1db093edb6f (patch)
tree449c02c847c2385387dc0ee1d1fc58520d6716b1 /lib/pleroma/user_note.ex
parentc97f99ccf2a51c7f1078d7a20006deae2df3d12c (diff)
downloadpleroma-40414bf177c93b39d75c6091ef0ce1db093edb6f.tar.gz
MastoAPI: Add user notes on accounts
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
Diffstat (limited to 'lib/pleroma/user_note.ex')
-rw-r--r--lib/pleroma/user_note.ex52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/pleroma/user_note.ex b/lib/pleroma/user_note.ex
new file mode 100644
index 000000000..5e82d359f
--- /dev/null
+++ b/lib/pleroma/user_note.ex
@@ -0,0 +1,52 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.UserNote do
+ use Ecto.Schema
+
+ import Ecto.Changeset
+ import Ecto.Query
+
+ alias Pleroma.Repo
+ alias Pleroma.User
+ alias Pleroma.UserNote
+
+ schema "user_notes" do
+ belongs_to(:source, User, type: FlakeId.Ecto.CompatType)
+ belongs_to(:target, User, type: FlakeId.Ecto.CompatType)
+ field(:comment, :string)
+
+ timestamps()
+ end
+
+ def changeset(%UserNote{} = user_note, params \\ %{}) do
+ user_note
+ |> cast(params, [:source_id, :target_id, :comment])
+ |> validate_required([:source_id, :target_id])
+ end
+
+ def show(%User{} = source, %User{} = target) do
+ with %UserNote{} = note <-
+ UserNote
+ |> where(source_id: ^source.id, target_id: ^target.id)
+ |> Repo.one() do
+ note.comment
+ else
+ _ -> ""
+ end
+ end
+
+ def create(%User{} = source, %User{} = target, comment) do
+ %UserNote{}
+ |> changeset(%{
+ source_id: source.id,
+ target_id: target.id,
+ comment: comment
+ })
+ |> Repo.insert(
+ on_conflict: {:replace, [:comment]},
+ conflict_target: [:source_id, :target_id]
+ )
+ end
+end