filters-fix
This commit is contained in:
parent
44b7a3da98
commit
64e8c8afd7
|
@ -55,19 +55,18 @@ def apply_filters(q, filters, author_id=None):
|
||||||
'authors': [ShoutVisibility.PUBLIC, ShoutVisibility.COMMUNITY, ShoutVisibility.AUTHORS]
|
'authors': [ShoutVisibility.PUBLIC, ShoutVisibility.COMMUNITY, ShoutVisibility.AUTHORS]
|
||||||
}
|
}
|
||||||
q = q.filter(Shout.visibility.in_(visibility.get(by_visibility) or []))
|
q = q.filter(Shout.visibility.in_(visibility.get(by_visibility) or []))
|
||||||
|
by_layouts = filters.get("layouts")
|
||||||
if filters.get("layouts"):
|
if by_layouts:
|
||||||
q = q.filter(Shout.layout.in_(filters.get("layouts")))
|
q = q.filter(Shout.layout.in_(by_layouts))
|
||||||
if filters.get("author"):
|
by_author = filters.get("author")
|
||||||
q = q.filter(Shout.authors.any(slug=filters.get("author")))
|
if by_author:
|
||||||
if filters.get("topic"):
|
q = q.filter(Shout.authors.any(slug=by_author))
|
||||||
q = q.filter(Shout.topics.any(slug=filters.get("topic")))
|
by_topic = filters.get("topic")
|
||||||
if filters.get("title"):
|
if by_topic:
|
||||||
q = q.filter(Shout.title.ilike(f'%{filters.get("title")}%'))
|
q = q.filter(Shout.topics.any(slug=by_topic))
|
||||||
if filters.get("body"):
|
by_after = filters.get("after")
|
||||||
q = q.filter(Shout.body.ilike(f'%{filters.get("body")}%s'))
|
if by_after:
|
||||||
if filters.get("after"):
|
ts = int(by_after)
|
||||||
ts = int(filters.get("after"))
|
|
||||||
q = q.filter(Shout.created_at > ts)
|
q = q.filter(Shout.created_at > ts)
|
||||||
|
|
||||||
return q
|
return q
|
||||||
|
@ -150,28 +149,7 @@ async def load_shouts_by(_, info, options):
|
||||||
)
|
)
|
||||||
|
|
||||||
q = add_stat_columns(q)
|
q = add_stat_columns(q)
|
||||||
|
q = apply_filters(q, options.get("filters", {}))
|
||||||
filters = options.get("filters")
|
|
||||||
if filters:
|
|
||||||
layouts = filters.get("layouts")
|
|
||||||
if layouts:
|
|
||||||
q = q.filter(Shout.layout.in_(layouts))
|
|
||||||
by_author = filters.get("author")
|
|
||||||
if by_author:
|
|
||||||
q = q.filter(Shout.authors.contains(by_author))
|
|
||||||
by_topic = filters.get("topic")
|
|
||||||
if by_topic:
|
|
||||||
q = q.filter(Shout.topics.contains(by_topic))
|
|
||||||
by_visibility = {
|
|
||||||
"authors": ShoutVisibility.AUTHORS,
|
|
||||||
"community": ShoutVisibility.COMMUNITY,
|
|
||||||
"public": ShoutVisibility.PUBLIC,
|
|
||||||
}[filters.get("visibility")]
|
|
||||||
if by_visibility:
|
|
||||||
q = q.filter(Shout.visibility > by_visibility)
|
|
||||||
after = filters.get("after")
|
|
||||||
if after:
|
|
||||||
q = q.filter(Shout.created_at > after)
|
|
||||||
|
|
||||||
order_by = options.get("order_by", Shout.published_at)
|
order_by = options.get("order_by", Shout.published_at)
|
||||||
query_order_by = desc(order_by) if options.get("order_by_desc", True) else asc(order_by)
|
query_order_by = desc(order_by) if options.get("order_by_desc", True) else asc(order_by)
|
||||||
|
|
|
@ -262,6 +262,7 @@ input LoadShoutsFilters {
|
||||||
layouts: [String]
|
layouts: [String]
|
||||||
visibility: String
|
visibility: String
|
||||||
after: Int
|
after: Int
|
||||||
|
reacted: Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
input LoadShoutsOptions {
|
input LoadShoutsOptions {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user