1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Delivery do
18 schema "deliveries" do
19 belongs_to(:user, User, type: FlakeId)
20 belongs_to(:object, Object)
23 def changeset(delivery, params \\ %{}) do
25 |> cast(params, [:user_id, :object_id])
26 |> validate_required([:user_id, :object_id])
27 |> foreign_key_constraint(:object_id)
28 |> foreign_key_constraint(:user_id)
29 |> unique_constraint(:user_id, name: :deliveries_user_id_object_id_index)
32 def create(object_id, user_id) do
34 |> changeset(%{user_id: user_id, object_id: object_id})
35 |> Repo.insert(on_conflict: :nothing)
38 def get(object_id, user_id) do
39 from(d in Delivery, where: d.user_id == ^user_id and d.object_id == ^object_id)
43 # A hack because user delete activities have a fake id for whatever reason
44 # TODO: Get rid of this
45 def delete_all_by_object_id("pleroma:fake_object_id"), do: {0, []}
47 def delete_all_by_object_id(object_id) do
48 from(d in Delivery, where: d.object_id == ^object_id)