mirror of
https://github.com/beak-insights/felicity-lims.git
synced 2025-02-23 16:33:11 +08:00
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from typing import List, Optional
|
|
|
|
import strawberry # noqa
|
|
from api.gql.notification.types import NotificationType
|
|
from apps.notification import models
|
|
from core.uid_gen import FelicityID
|
|
|
|
|
|
@strawberry.type
|
|
class StreamNotificationQuery:
|
|
@strawberry.field
|
|
async def notification_filter(
|
|
self,
|
|
info,
|
|
group_uid: FelicityID | None,
|
|
department_uid: FelicityID | None,
|
|
user_uid: FelicityID | None,
|
|
) -> List[NotificationType]:
|
|
filters = {}
|
|
|
|
if group_uid:
|
|
filters["groups__uid__in"] = [group_uid]
|
|
|
|
if department_uid:
|
|
filters["departments__uid__in"] = [department_uid]
|
|
|
|
if user_uid:
|
|
filters["users__uid__in"] = [user_uid]
|
|
|
|
notif_stmt = models.Notification.smart_query(
|
|
filters=filters, sort_attrs=["-created_at"]
|
|
)
|
|
|
|
notifications = (
|
|
(await models.Notification.session.execute(notif_stmt)).scalars().all()
|
|
)
|
|
return list(notifications)
|
|
|
|
@strawberry.field
|
|
async def notification_by_uid(
|
|
self, info, uid: FelicityID
|
|
) -> Optional[NotificationType]:
|
|
return await models.Notification.get(uid=uid)
|