Доделанно получение сообщений
This commit is contained in:
parent
b4a624dc6e
commit
e6d6421f01
3 changed files with 54 additions and 36 deletions
|
@ -10,7 +10,7 @@ class ChatDAO(BaseDAO):
|
|||
model = Chats
|
||||
|
||||
@classmethod
|
||||
async def create(cls, user_id):
|
||||
async def create(cls, user_id: int):
|
||||
query = insert(Chats).values(chat_for=user_id)
|
||||
async with async_session_maker() as session:
|
||||
await session.execute(query)
|
||||
|
@ -18,7 +18,7 @@ class ChatDAO(BaseDAO):
|
|||
return True
|
||||
|
||||
@classmethod
|
||||
async def send_message(cls, user_id, chat_id, message):
|
||||
async def send_message(cls, user_id, chat_id: int, message: str):
|
||||
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)
|
||||
|
@ -26,7 +26,7 @@ class ChatDAO(BaseDAO):
|
|||
return True
|
||||
|
||||
@classmethod
|
||||
async def get_message_by_id(cls, message_id):
|
||||
async def get_message_by_id(cls, message_id: int):
|
||||
query = select(Messages.__table__.columns).where(
|
||||
and_(
|
||||
Messages.id == message_id,
|
||||
|
@ -41,7 +41,15 @@ class ChatDAO(BaseDAO):
|
|||
return result[0]
|
||||
|
||||
@classmethod
|
||||
async def get_last_message(cls, chat_id):
|
||||
async def delete_message(cls, message_id: int):
|
||||
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
|
||||
|
||||
@classmethod
|
||||
async def get_some_messages(cls, chat_id: int, message_number_from: int, messages_to_get: int):
|
||||
"""
|
||||
WITH messages_with_users AS (
|
||||
SELECT *
|
||||
|
@ -53,7 +61,7 @@ class ChatDAO(BaseDAO):
|
|||
FROM messages_with_users
|
||||
WHERE visibility = true AND chat_id = 2
|
||||
ORDER BY created_at DESC
|
||||
LIMIT 1;
|
||||
LIMIT 15 OFFSET 0;
|
||||
"""
|
||||
messages_with_users = (
|
||||
select(Messages.__table__.columns, Users.__table__.columns)
|
||||
|
@ -68,20 +76,10 @@ class ChatDAO(BaseDAO):
|
|||
messages_with_users.c.chat_id == chat_id,
|
||||
messages_with_users.c.visibility == True
|
||||
)
|
||||
).order_by(messages_with_users.c.created_at.desc()).limit(1))
|
||||
).order_by(messages_with_users.c.created_at.desc()).limit(messages_to_get).offset(message_number_from))
|
||||
async with async_session_maker() as session:
|
||||
result = await session.execute(messages)
|
||||
result = result.mappings().all()
|
||||
print(result)
|
||||
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
|
||||
|
||||
return result
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends, status
|
|||
|
||||
from app.exceptions import UserDontHavePermissionException, MessageNotFoundException, UsersIdIsTheSameException
|
||||
from app.users.chat.dao import ChatDAO
|
||||
from app.users.chat.shemas import SMessage
|
||||
from app.users.chat.shemas import SMessage, SLastMessages
|
||||
|
||||
from app.users.dao import UserDAO
|
||||
from app.users.dependencies import get_current_user, validate_user_access_to_chat
|
||||
|
@ -50,15 +50,6 @@ async def delete_message_from_chat(
|
|||
return deleted_message
|
||||
|
||||
|
||||
@router.get("/get_last_message", response_model=SMessage)
|
||||
async def get_last_message(chat_id: int, user: Users = Depends(get_current_user)):
|
||||
await validate_user_access_to_chat(chat_id=chat_id, user_id=user.id)
|
||||
message = await ChatDAO.get_last_message(chat_id=chat_id)
|
||||
if message is None:
|
||||
raise MessageNotFoundException
|
||||
return message
|
||||
|
||||
|
||||
# Не доделан
|
||||
@router.post("/create_chat", status_code=status.HTTP_201_CREATED)
|
||||
async def create_chat(
|
||||
|
@ -71,6 +62,25 @@ async def create_chat(
|
|||
return created_chat
|
||||
|
||||
|
||||
@router.get("/last_messages")
|
||||
async def get_last_messages():
|
||||
pass
|
||||
@router.get("/get_last_message/{chat_id}", response_model=list[SMessage])
|
||||
async def get_last_message(chat_id: int, user: Users = Depends(get_current_user)):
|
||||
await validate_user_access_to_chat(chat_id=chat_id, user_id=user.id)
|
||||
message = await ChatDAO.get_some_messages(chat_id=chat_id, message_number_from=0, messages_to_get=1)
|
||||
if message is None:
|
||||
raise MessageNotFoundException
|
||||
return message
|
||||
|
||||
|
||||
@router.get("/get_some_messages/{chat_id}", response_model=list[SMessage])
|
||||
async def get_some_messages(
|
||||
chat_id: int, last_messages: SLastMessages = Depends(), user: Users = Depends(get_current_user)
|
||||
):
|
||||
await validate_user_access_to_chat(chat_id=chat_id, user_id=user.id)
|
||||
messages = await ChatDAO.get_some_messages(
|
||||
chat_id=chat_id,
|
||||
message_number_from=last_messages.messages_count,
|
||||
messages_to_get=last_messages.messages_to_get
|
||||
)
|
||||
if not messages:
|
||||
raise MessageNotFoundException
|
||||
return messages
|
||||
|
|
|
@ -14,3 +14,13 @@ class SMessage(BaseModel):
|
|||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class SLastMessages:
|
||||
def __init__(
|
||||
self,
|
||||
messages_count: int,
|
||||
messages_to_get: int,
|
||||
):
|
||||
self.messages_count = messages_count
|
||||
self.messages_to_get = messages_to_get
|
||||
|
|
Loading…
Add table
Reference in a new issue