from sqlalchemy import insert, select, update, and_ from app.dao.base import BaseDAO from app.database import async_session_maker from app.users.models import Users from app.users.chat.models import Chats, Messages class ChatDAO(BaseDAO): model = Chats @classmethod async def create(cls, user_id): query = insert(Chats).values(chat_for=user_id) async with async_session_maker() as session: await session.execute(query) await session.commit() return True @classmethod async def send_message(cls, user_id, chat_id, message): query = insert(Messages).values(chat_id=chat_id, user_id=user_id, message=message, image_url=None) async with async_session_maker() as session: await session.execute(query) await session.commit() return True @classmethod async def get_message_by_id(cls, message_id): query = select(Messages.__table__.columns).where( and_( Messages.id == message_id, Messages.visibility == True ) ) async with async_session_maker() as session: result = await session.execute(query) result = result.mappings().all() if result: return result[0] @classmethod async def get_last_message(cls, chat_id): query = select(Messages.__table__.columns).where( and_( Messages.chat_id == chat_id, Messages.visibility == True ) ).order_by(Messages.created_at.desc()).limit(1) async with async_session_maker() as session: result = await session.execute(query) result = result.mappings().all() if result: return result[0] @classmethod async def delete_message(cls, message_id): query = update(Messages).where(Messages.id == message_id).values(visibility=False) async with async_session_maker() as session: await session.execute(query) await session.commit() return True