Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

50 satır
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