diff options
author | Alex Gleason <alex@alexgleason.me> | 2021-12-25 01:41:12 +0000 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2021-12-25 01:41:12 +0000 |
commit | 73609211a425922a5068d3912a36b82abe24e12c (patch) | |
tree | 1e3fc250ab6cc843d75cb324964c226d0adc183a /lib/pleroma/user_note.ex | |
parent | b96a58ff280d57e06505228f9d8a172d47ec8578 (diff) | |
parent | 588bcbac55ebbaa1ea68792a1f60aa92c9915f69 (diff) | |
download | pleroma-73609211a425922a5068d3912a36b82abe24e12c.tar.gz |
Merge branch 'account-notes' into 'develop'
MastoAPI: Add user notes on accounts
See merge request pleroma/pleroma!3540
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 |