defp restrict_since(query, _), do: query
- defp restrict_tag(query, %{"tag" => tag, "tag_reject" => tag_reject}) when tag_reject != [] do
+ defp restrict_tag(query, %{"tag" => tag, "tag_reject" => tag_reject})
+ when is_list(tag) and tag_reject != [] do
from(
activity in query,
- where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data),
- where: fragment("? @> (? #> '{\"object\",\"tag\"}')", ^tag_reject, activity.data)
+ where:
+ fragment(
+ "? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))",
+ ^tag,
+ activity.data
+ ),
+ where:
+ fragment(
+ "(not ? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))))",
+ ^tag_reject,
+ activity.data
+ )
+ )
+ end
+
+ defp restrict_tag(query, %{"tag" => tag}) when is_list(tag) do
+ from(
+ activity in query,
+ where:
+ fragment(
+ "? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))",
+ ^tag,
+ activity.data
+ )
)
end
- defp restrict_tag(query, %{"tag" => tag}) do
+ defp restrict_tag(query, %{"tag" => tag}) when is_binary(tag) do
from(
activity in query,
- where: fragment("? && jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))", ^tag, activity.data)
+ where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data)
)
end