- status_count = Repo.one(status_query)
- user_count = Repo.aggregate(User.local_user_query(), :count, :id)
+ def public_statuses_query do
+ from(o in Object,
+ where: fragment("(?)->'to' \\? ?", o.data, ^Pleroma.Constants.as_public())
+ )
+ end
+
+ def unlisted_statuses_query do
+ from(o in Object,
+ where: not fragment("(?)->'to' \\? ?", o.data, ^Pleroma.Constants.as_public()),
+ where: fragment("(?)->'cc' \\? ?", o.data, ^Pleroma.Constants.as_public())
+ )
+ end
+
+ def direct_statuses_query do
+ private_statuses_ids = from(p in private_statuses_query(), select: p.id) |> Repo.all()
+
+ from(o in Object,
+ where:
+ fragment(
+ "? \\? 'directMessage' AND (?->>'directMessage')::boolean = true",
+ o.data,
+ o.data
+ ) or
+ (not fragment("(?)->'to' \\? ?", o.data, ^Pleroma.Constants.as_public()) and
+ not fragment("(?)->'cc' \\? ?", o.data, ^Pleroma.Constants.as_public()) and
+ o.id not in ^private_statuses_ids)
+ )
+ end
+
+ def private_statuses_query do
+ from(o in subquery(recipients_query()),
+ where: ilike(o.recipients, "%/followers%")
+ )
+ end