notifier/resolvers/seen.py

46 lines
1.7 KiB
Python
Raw Normal View History

2023-12-22 09:09:03 +00:00
from orm.notification import NotificationSeen
from services.db import local_session
from resolvers.model import NotificationSeenResult
from resolvers.load import get_notifications_grouped
import strawberry
import logging
from sqlalchemy.exc import SQLAlchemyError
logger = logging.getLogger(__name__)
@strawberry.type
class Mutation:
@strawberry.mutation
async def mark_notification_as_read(self, info, notification_id: int) -> NotificationSeenResult:
author_id = info.context.get("author_id")
if author_id:
with local_session() as session:
try:
ns = NotificationSeen(notification=notification_id, viewer=author_id)
session.add(ns)
session.commit()
except SQLAlchemyError as e:
session.rollback()
logger.error(
f"[mark_notification_as_read] Ошибка при обновлении статуса прочтения уведомления: {str(e)}"
)
return NotificationSeenResult(error="cant mark as read")
return NotificationSeenResult(error=None)
@strawberry.mutation
async def mark_all_notifications_as_read(self, info, limit: int = 10, offset: int = 0) -> NotificationSeenResult:
# TODO: use latest loaded notification_id as input offset parameter
ngroups = {}
error = None
try:
author_id = info.context.get("author_id")
if author_id:
ngroups = get_notifications_grouped(author_id, limit, offset, mark_as_read=True)
except Exception as e:
print(e)
error = "cant mark as read"
return NotificationSeenResult(error=error)