felicity-lims/felicity/api/gql/noticeboard/query.py

43 lines
1.4 KiB
Python
Raw Normal View History

from typing import List, Optional
import strawberry # noqa
2024-02-16 23:48:19 +08:00
from felicity.api.gql.noticeboard.types import NoticeType
from felicity.api.gql.permissions import IsAuthenticated
2024-05-22 12:29:25 +08:00
from felicity.core.dtz import get_time_now
2024-07-26 15:29:24 +08:00
from felicity.apps.noticeboard.services import NoticeService
@strawberry.type
class NoticeQuery:
2023-07-26 15:23:28 +08:00
@strawberry.field(permission_classes=[IsAuthenticated])
async def notice_by_uid(self, info, uid: str) -> Optional[NoticeType]:
2024-07-26 15:29:24 +08:00
return await NoticeService().get(uid=uid)
2023-07-26 15:23:28 +08:00
@strawberry.field(permission_classes=[IsAuthenticated])
2023-09-11 13:02:05 +08:00
async def notices_by_creator(self, info, uid: str) -> Optional[List[NoticeType]]:
2024-07-26 15:29:24 +08:00
return await NoticeService().get_all(created_by_uid=uid, expiry__gt=get_time_now(str_format=False))
2023-07-26 15:23:28 +08:00
@strawberry.field(permission_classes=[IsAuthenticated])
async def notice_filter(
2024-02-16 23:48:19 +08:00
self,
info,
group_uid: str | None,
department_uid: str | None,
) -> List[NoticeType]:
filters = {}
if group_uid:
filters["groups__uid__in"] = [group_uid]
if department_uid:
filters["departments__uid__in"] = [department_uid]
2024-07-26 15:29:24 +08:00
notice_stmt = NoticeService().smart_query(
filters=filters, sort_attrs=["-created_at"]
)
2024-02-16 23:48:19 +08:00
notices = (
2024-07-26 15:29:24 +08:00
(await NoticeService().session.execute(notice_stmt)).scalars().all()
2024-02-16 23:48:19 +08:00
)
return list(notices)