Introduce get_by_id in Activity, replace newlines with spaces
[akkoma] / lib / pleroma / user.ex
index 68128053903e5f070b3a88413f3010e8a2f9ab7f..5707ba7a2d0df25de30d5a03e789497fff8d468c 100644 (file)
@@ -404,6 +404,10 @@ defmodule Pleroma.User do
     user.info.locked || false
   end
 
+  def get_by_id(id) do
+    Repo.get_by(User, id: id)
+  end
+
   def get_by_ap_id(ap_id) do
     Repo.get_by(User, ap_id: ap_id)
   end
@@ -439,11 +443,33 @@ defmodule Pleroma.User do
     Cachex.fetch!(:user_cache, key, fn _ -> get_by_ap_id(ap_id) end)
   end
 
+  def get_cached_by_id(id) do
+    key = "id:#{id}"
+    Cachex.fetch!(:user_cache, key, fn _ -> get_by_id(id) end)
+  end
+
   def get_cached_by_nickname(nickname) do
     key = "nickname:#{nickname}"
     Cachex.fetch!(:user_cache, key, fn _ -> get_or_fetch_by_nickname(nickname) end)
   end
 
+  def get_cached_by_nickname_or_id(nickname_or_id) do
+    try do
+      # TODO: convert to UUIDs when !654 is merged
+      maybe_id = String.to_integer(nickname_or_id)
+      user = get_cached_by_id(maybe_id)
+
+      if user == nil do
+        raise ArgumentError, message: "No such user id"
+      else
+        user
+      end
+    rescue
+      ArgumentError ->
+        get_cached_by_nickname(nickname_or_id)
+    end
+  end
+
   def get_by_nickname(nickname) do
     Repo.get_by(User, nickname: nickname) ||
       if Regex.match?(~r(@#{Pleroma.Web.Endpoint.host()})i, nickname) do