logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

announcement_read_relationship.ex (1473B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.AnnouncementReadRelationship do
  5. use Ecto.Schema
  6. import Ecto.Changeset
  7. alias FlakeId.Ecto.CompatType
  8. alias Pleroma.Announcement
  9. alias Pleroma.Repo
  10. alias Pleroma.User
  11. @type t :: %__MODULE__{}
  12. schema "announcement_read_relationships" do
  13. belongs_to(:user, User, type: CompatType)
  14. belongs_to(:announcement, Announcement, type: CompatType)
  15. timestamps(updated_at: false)
  16. end
  17. def mark_read(user, announcement) do
  18. %__MODULE__{}
  19. |> cast(%{user_id: user.id, announcement_id: announcement.id}, [:user_id, :announcement_id])
  20. |> validate_required([:user_id, :announcement_id])
  21. |> foreign_key_constraint(:user_id)
  22. |> foreign_key_constraint(:announcement_id)
  23. |> unique_constraint([:user_id, :announcement_id])
  24. |> Repo.insert()
  25. end
  26. def mark_unread(user, announcement) do
  27. with relationship <- get(user, announcement),
  28. {:exists, true} <- {:exists, not is_nil(relationship)},
  29. {:ok, _} <- Repo.delete(relationship) do
  30. :ok
  31. else
  32. {:exists, false} ->
  33. :ok
  34. _ ->
  35. :error
  36. end
  37. end
  38. def get(user, announcement) do
  39. Repo.get_by(__MODULE__, user_id: user.id, announcement_id: announcement.id)
  40. end
  41. def exists?(user, announcement) do
  42. not is_nil(get(user, announcement))
  43. end
  44. end