from typing import List from sqlalchemy.orm import Session from sqlalchemy import or_ from app.crud.base import CRUDBase from app.models.message import Message from app.schemas.message import MessageCreate, MessageUpdate class CRUDMessage(CRUDBase[Message, MessageCreate, MessageUpdate]): def get_by_match( self, db: Session, *, match_id: int, skip: int = 0, limit: int = 100 ) -> List[Message]: return db.query(Message).filter( Message.match_id == match_id ).order_by(Message.created_at).offset(skip).limit(limit).all() def get_user_messages( self, db: Session, *, user_id: int, skip: int = 0, limit: int = 100 ) -> List[Message]: return db.query(Message).filter( or_( Message.sender_id == user_id, Message.receiver_id == user_id ) ).order_by(Message.created_at.desc()).offset(skip).limit(limit).all() def mark_as_read( self, db: Session, *, user_id: int, match_id: int ) -> int: messages = db.query(Message).filter( Message.match_id == match_id, Message.receiver_id == user_id, not Message.is_read ).all() count = 0 for message in messages: message.is_read = True count += 1 if count: db.commit() return count message = CRUDMessage(Message)