diff options
author | lain <lain@soykaf.club> | 2020-08-07 10:44:06 +0000 |
---|---|---|
committer | lain <lain@soykaf.club> | 2020-08-07 10:44:06 +0000 |
commit | 34cbe9f44a0266cd5ec652c3e70021ef928a7f31 (patch) | |
tree | c9ad17f8fd0718fd50ae7e489cbd0eaf7e5efcb0 /lib/pleroma/object.ex | |
parent | b9ebb55d2aabdf4c99b05efab9d4ad31b25f888d (diff) | |
parent | 9d7ce1a6d014499eb4d55190b81e55da849b5ad0 (diff) | |
download | pleroma-34cbe9f44a0266cd5ec652c3e70021ef928a7f31.tar.gz |
Merge branch 'features/poll-validation' into 'develop'
Poll and votes pipeline ingestion
Closes #1362 and #1852
See merge request pleroma/pleroma!2635
Diffstat (limited to 'lib/pleroma/object.ex')
-rw-r--r-- | lib/pleroma/object.ex | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 546c4ea01..052ad413b 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -255,6 +255,10 @@ defmodule Pleroma.Object do end end + defp poll_is_multiple?(%Object{data: %{"anyOf" => [_ | _]}}), do: true + + defp poll_is_multiple?(_), do: false + def decrease_replies_count(ap_id) do Object |> where([o], fragment("?->>'id' = ?::text", o.data, ^to_string(ap_id))) @@ -281,10 +285,10 @@ defmodule Pleroma.Object do def increase_vote_count(ap_id, name, actor) do with %Object{} = object <- Object.normalize(ap_id), "Question" <- object.data["type"] do - multiple = Map.has_key?(object.data, "anyOf") + key = if poll_is_multiple?(object), do: "anyOf", else: "oneOf" options = - (object.data["anyOf"] || object.data["oneOf"] || []) + object.data[key] |> Enum.map(fn %{"name" => ^name} = option -> Kernel.update_in(option["replies"]["totalItems"], &(&1 + 1)) @@ -296,11 +300,8 @@ defmodule Pleroma.Object do voters = [actor | object.data["voters"] || []] |> Enum.uniq() data = - if multiple do - Map.put(object.data, "anyOf", options) - else - Map.put(object.data, "oneOf", options) - end + object.data + |> Map.put(key, options) |> Map.put("voters", voters) object |