diff options
author | marcin mikołajczak <git@mkljczk.pl> | 2021-11-21 16:53:30 +0100 |
---|---|---|
committer | marcin mikołajczak <git@mkljczk.pl> | 2021-11-21 16:56:26 +0100 |
commit | 40414bf177c93b39d75c6091ef0ce1db093edb6f (patch) | |
tree | 449c02c847c2385387dc0ee1d1fc58520d6716b1 /lib/pleroma/user_note.ex | |
parent | c97f99ccf2a51c7f1078d7a20006deae2df3d12c (diff) | |
download | pleroma-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.ex | 52 |
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 |