giant massive dep upgrade and dialyxir-found error emporium (#371)
[akkoma] / lib / pleroma / web / akkoma_api / controllers / translation_controller.ex
1 defmodule Pleroma.Web.AkkomaAPI.TranslationController do
2 use Pleroma.Web, :controller
3
4 alias Pleroma.Web.Plugs.OAuthScopesPlug
5
6 require Logger
7
8 @cachex Pleroma.Config.get([:cachex, :provider], Cachex)
9
10 @unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []}
11 plug(
12 OAuthScopesPlug,
13 %{@unauthenticated_access | scopes: ["read:statuses"]}
14 when action in [
15 :languages
16 ]
17 )
18
19 plug(Pleroma.Web.ApiSpec.CastAndValidate)
20 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.TranslationOperation
21
22 action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
23
24 @doc "GET /api/v1/akkoma/translation/languages"
25 def languages(conn, _params) do
26 with {:enabled, true} <- {:enabled, Pleroma.Config.get([:translator, :enabled])},
27 {:ok, source_languages, dest_languages} <- get_languages() do
28 conn
29 |> json(%{source: source_languages, target: dest_languages})
30 else
31 {:enabled, false} ->
32 json(conn, %{})
33
34 e ->
35 Logger.error("Translation language list error: #{inspect(e)}")
36 {:error, e}
37 end
38 end
39
40 defp get_languages do
41 module = Pleroma.Config.get([:translator, :module])
42
43 @cachex.fetch!(:translations_cache, "languages:#{module}}", fn _ ->
44 with {:ok, source_languages, dest_languages} <- module.languages() do
45 {:ok, source_languages, dest_languages}
46 else
47 {:error, err} -> {:ignore, {:error, err}}
48 end
49 end)
50 end
51 end