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.ScheduledActivity do
9 alias Pleroma.ScheduledActivity
15 @min_offset :timer.minutes(5)
17 schema "scheduled_activities" do
18 belongs_to(:user, User, type: Pleroma.FlakeId)
19 field(:scheduled_at, :naive_datetime)
25 def changeset(%ScheduledActivity{} = scheduled_activity, attrs) do
27 |> cast(attrs, [:scheduled_at, :params])
30 def update_changeset(%ScheduledActivity{} = scheduled_activity, attrs) do
32 |> cast(attrs, [:scheduled_at])
35 def far_enough?(scheduled_at) when is_binary(scheduled_at) do
36 with {:ok, scheduled_at} <- Ecto.Type.cast(:naive_datetime, scheduled_at) do
37 far_enough?(scheduled_at)
43 def far_enough?(scheduled_at) do
44 now = NaiveDateTime.utc_now()
45 diff = NaiveDateTime.diff(scheduled_at, now, :millisecond)
49 def new(%User{} = user, attrs) do
50 %ScheduledActivity{user_id: user.id}
54 def create(%User{} = user, attrs) do
60 def get(%User{} = user, scheduled_activity_id) do
62 |> where(user_id: ^user.id)
63 |> where(id: ^scheduled_activity_id)
67 def update(%User{} = user, scheduled_activity_id, attrs) do
68 with %ScheduledActivity{} = scheduled_activity <- get(user, scheduled_activity_id) do
70 |> update_changeset(attrs)
73 nil -> {:error, :not_found}
77 def delete(%User{} = user, scheduled_activity_id) do
78 with %ScheduledActivity{} = scheduled_activity <- get(user, scheduled_activity_id) do
82 nil -> {:error, :not_found}
86 def for_user_query(%User{} = user) do
88 |> where(user_id: ^user.id)