formatting
[akkoma] / lib / pleroma / activity.ex
index c065f3b6ce690a688ead5a087135f46e44f13ba8..e3aa4eb976ae5b9ec2287dca86f216c9ffd3ef62 100644 (file)
@@ -1,7 +1,7 @@
 defmodule Pleroma.Activity do
   use Ecto.Schema
-  alias Pleroma.{Repo, Activity, Notification}
-  import Ecto.Query
+  alias Pleroma.{Repo, Activity, Notification, Object}
+  import Ecto.{Query, Changeset}
 
   schema "activities" do
     field(:data, :map)
@@ -22,6 +22,13 @@ defmodule Pleroma.Activity do
     )
   end
 
+  def change(struct, params \\ %{}) do
+    struct
+    |> cast(params, [:data])
+    |> validate_required([:data])
+    |> unique_constraint(:ap_id, name: :activities_unique_apid_index)
+  end
+
   # TODO:
   # Go through these and fix them everywhere.
   # Wrong name, only returns create activities
@@ -79,13 +86,17 @@ defmodule Pleroma.Activity do
 
   def get_create_activity_by_object_ap_id(_), do: nil
 
-  def normalize(obj) when is_map(obj), do: Activity.get_by_ap_id(obj["id"])
-  def normalize(ap_id) when is_binary(ap_id), do: Activity.get_by_ap_id(ap_id)
+  def normalize(obj) when is_map(obj), do: normalize(obj["id"])
+  def normalize(ap_id) when is_binary(ap_id), do: get_by_ap_id(ap_id)
   def normalize(_), do: nil
 
-  def get_in_reply_to_activity(%Activity{data: %{"object" => %{"inReplyTo" => ap_id}}}) do
+  defp get_in_reply_to_activity_from_object(%Object{data: %{"inReplyTo" => ap_id}}) do
     get_create_activity_by_object_ap_id(ap_id)
   end
 
-  def get_in_reply_to_activity(_), do: nil
+  defp get_in_reply_to_activity_from_object(_), do: nil
+
+  def get_in_reply_to_activity(%Activity{data: %{"object" => object}}) do
+    get_in_reply_to_activity_from_object(Object.normalize(object))
+  end
 end