Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

50 строки
1.4KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2021 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