chat_back/chat_test/app/users/chat/dao.py

65 lines
2 KiB
Python

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