logo

pleroma

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

delivery.ex (1397B)


  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.Delivery do
  5. use Ecto.Schema
  6. alias Pleroma.Delivery
  7. alias Pleroma.Object
  8. alias Pleroma.Repo
  9. alias Pleroma.User
  10. import Ecto.Changeset
  11. import Ecto.Query
  12. schema "deliveries" do
  13. belongs_to(:user, User, type: FlakeId.Ecto.CompatType)
  14. belongs_to(:object, Object)
  15. end
  16. def changeset(delivery, params \\ %{}) do
  17. delivery
  18. |> cast(params, [:user_id, :object_id])
  19. |> validate_required([:user_id, :object_id])
  20. |> foreign_key_constraint(:object_id)
  21. |> foreign_key_constraint(:user_id)
  22. |> unique_constraint(:user_id, name: :deliveries_user_id_object_id_index)
  23. end
  24. def create(object_id, user_id) do
  25. %Delivery{}
  26. |> changeset(%{user_id: user_id, object_id: object_id})
  27. |> Repo.insert(on_conflict: :nothing)
  28. end
  29. def get(object_id, user_id) do
  30. from(d in Delivery, where: d.user_id == ^user_id and d.object_id == ^object_id)
  31. |> Repo.one()
  32. end
  33. # A hack because user delete activities have a fake id for whatever reason
  34. # TODO: Get rid of this
  35. def delete_all_by_object_id("pleroma:fake_object_id"), do: {0, []}
  36. def delete_all_by_object_id(object_id) do
  37. from(d in Delivery, where: d.object_id == ^object_id)
  38. |> Repo.delete_all()
  39. end
  40. end