a0af5255b7ab8415a3bf06ea32e7fe361f119687
[akkoma] / lib / pleroma / activity_expiration.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.ActivityExpiration do
6 use Ecto.Schema
7
8 alias Pleroma.Activity
9 alias Pleroma.ActivityExpiration
10 alias Pleroma.FlakeId
11 alias Pleroma.Repo
12
13 import Ecto.Changeset
14 import Ecto.Query
15
16 @type t :: %__MODULE__{}
17
18 schema "activity_expirations" do
19 belongs_to(:activity, Activity, type: FlakeId)
20 field(:scheduled_at, :naive_datetime)
21 end
22
23 def changeset(%ActivityExpiration{} = expiration, attrs) do
24 expiration
25 |> cast(attrs, [:scheduled_at])
26 |> validate_required([:scheduled_at])
27 end
28
29 def get_by_activity_id(activity_id) do
30 ActivityExpiration
31 |> where([exp], exp.activity_id == ^activity_id)
32 |> Repo.one()
33 end
34
35 def create(%Activity{} = activity, scheduled_at) do
36 %ActivityExpiration{activity_id: activity.id}
37 |> changeset(%{scheduled_at: scheduled_at})
38 |> Repo.insert()
39 end
40
41 def due_expirations(offset \\ 0) do
42 naive_datetime =
43 NaiveDateTime.utc_now()
44 |> NaiveDateTime.add(offset, :millisecond)
45
46 ActivityExpiration
47 |> where([exp], exp.scheduled_at < ^naive_datetime)
48 |> Repo.all()
49 end
50 end