filters-fix

This commit is contained in:
Untone 2023-11-29 12:29:09 +03:00
parent 44b7a3da98
commit 64e8c8afd7
2 changed files with 14 additions and 35 deletions

View File

@ -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)

View File

@ -262,6 +262,7 @@ input LoadShoutsFilters {
layouts: [String] layouts: [String]
visibility: String visibility: String
after: Int after: Int
reacted: Boolean
} }
input LoadShoutsOptions { input LoadShoutsOptions {