2025-12-23 21:34:08 +08:00

46 lines
1.4 KiB
Python

import jingrow
from jingrow.query_builder import Not
from jingrow.query_builder.functions import Count
from jingrow.query_builder.terms import QueryBuilder
def check(base_query: QueryBuilder, document_type: str, document_name: str) -> bool | list[str]:
if document_name:
return document(base_query, document_type, document_name)
return documents(base_query, document_type)
def documents(base_query: QueryBuilder, document_type: str) -> list[str]:
PressRole = jingrow.qb.PageType("Jcloude Role")
PressRoleResource = jingrow.qb.PageType("Jcloude Role Resource")
return [
pg.document_name
for pg in base_query.inner_join(PressRoleResource)
.on(
(PressRoleResource.parent == PressRole.name)
& (PressRoleResource.document_type == document_type)
& (Not(PressRoleResource.document_name.isnull()))
)
.select(PressRoleResource.document_name)
.distinct()
.run(as_dict=True)
]
def document(base_query: QueryBuilder, document_type: str, document_name: str) -> bool:
PressRole = jingrow.qb.PageType("Jcloude Role")
PressRoleResource = jingrow.qb.PageType("Jcloude Role Resource")
return (
base_query.inner_join(PressRoleResource)
.on(
(PressRoleResource.parent == PressRole.name)
& (PressRoleResource.document_type == document_type)
& (PressRoleResource.document_name == document_name)
)
.select(Count(PressRole.name).as_("document_count"))
.run(as_dict=True)
.pop()
.get("document_count")
> 0
)