Cache objects in dev and prod.
authorRoger Braun <roger@rogerbraun.net>
Mon, 1 May 2017 14:12:20 +0000 (16:12 +0200)
committerRoger Braun <roger@rogerbraun.net>
Mon, 1 May 2017 14:12:20 +0000 (16:12 +0200)
lib/pleroma/object.ex
lib/pleroma/web/twitter_api/twitter_api.ex

index a924c3199d53698cdaf247e3181b920f62313129..168843bd97a34e601594cc413e5c7f9172b9493a 100644 (file)
@@ -14,6 +14,15 @@ defmodule Pleroma.Object do
       where: fragment("? @> ?", object.data, ^%{id: ap_id}))
   end
 
+  def get_cached_by_ap_id(ap_id) do
+    if Mix.env == :test do
+      get_by_ap_id(ap_id)
+    else
+      key = "object:#{ap_id}"
+      Cachex.get!(:user_cache, key, fallback: fn(_) -> get_by_ap_id(ap_id) end)
+    end
+  end
+
   def context_mapping(context) do
     %Object{data: %{"id" => context}}
   end
index 85fac914626b547a651b6bdb1922b0531f7505cc..941bacaa94e713076ef6c88c9f8d25a98659224a 100644 (file)
@@ -317,7 +317,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
 
   def context_to_conversation_id(context) do
     {:ok, id} = Repo.transaction(fn ->
-      with %Object{id: id} <- Object.get_by_ap_id(context) do
+      with %Object{id: id} <- Object.get_cached_by_ap_id(context) do
         id
       else _e ->
         changeset = Object.context_mapping(context)