126 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Annotated
 | 
						|
 | 
						|
from fastapi import APIRouter, Depends, UploadFile
 | 
						|
from sqlalchemy.ext.asyncio import AsyncSession
 | 
						|
 | 
						|
from backend.session import get_session
 | 
						|
from models import User
 | 
						|
from schemas.chat import *
 | 
						|
from services.auth import get_current_user
 | 
						|
from services.chat import ChatService
 | 
						|
 | 
						|
chat_router = APIRouter(
 | 
						|
    prefix='/chat',
 | 
						|
    tags=['chat'],
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
@chat_router.post(
 | 
						|
    '/message',
 | 
						|
    operation_id='send_text_message',
 | 
						|
    response_model=SendTextMessageResponse,
 | 
						|
)
 | 
						|
async def send_text_message(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        user: Annotated[User, Depends(get_current_user)],
 | 
						|
        request: SendTextMessageRequest,
 | 
						|
):
 | 
						|
    return await ChatService(session).send_message(request, user)
 | 
						|
 | 
						|
 | 
						|
@chat_router.post(
 | 
						|
    '/message/repeat',
 | 
						|
    operation_id='repeat_sending_text_message',
 | 
						|
    response_model=RepeatSendingTextMessageResponse,
 | 
						|
)
 | 
						|
async def repeat_sending_text_message(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: RepeatSendingTextMessageRequest,
 | 
						|
):
 | 
						|
    return await ChatService(session).repeat_sending_message(request)
 | 
						|
 | 
						|
 | 
						|
@chat_router.post(
 | 
						|
    '/message/files',
 | 
						|
    operation_id='send_messages_with_files',
 | 
						|
    response_model=LoadMessagesResponse,
 | 
						|
)
 | 
						|
async def send_messages_with_files(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        user: Annotated[User, Depends(get_current_user)],
 | 
						|
        files: list[UploadFile],
 | 
						|
        chat_id: int,
 | 
						|
        caption: str,
 | 
						|
):
 | 
						|
    return await ChatService(session).send_messages_with_files(files, chat_id, caption, user)
 | 
						|
 | 
						|
 | 
						|
@chat_router.delete(
 | 
						|
    '/message/{message_id}',
 | 
						|
    operation_id='delete_message',
 | 
						|
    response_model=DeleteMessageResponse,
 | 
						|
)
 | 
						|
async def delete_message(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        message_id: int,
 | 
						|
):
 | 
						|
    return await ChatService(session).delete_message(message_id)
 | 
						|
 | 
						|
 | 
						|
@chat_router.patch(
 | 
						|
    '/message',
 | 
						|
    operation_id='edit_message',
 | 
						|
    response_model=EditMessageResponse,
 | 
						|
)
 | 
						|
async def edit_message(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: EditMessageRequest,
 | 
						|
):
 | 
						|
    return await ChatService(session).edit_message(request)
 | 
						|
 | 
						|
 | 
						|
@chat_router.post(
 | 
						|
    '/',
 | 
						|
    operation_id='get_chat',
 | 
						|
    response_model=GetChatResponse,
 | 
						|
)
 | 
						|
async def get_chat(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: GetChatRequest,
 | 
						|
):
 | 
						|
    return await ChatService(session).get_chat(request)
 | 
						|
 | 
						|
 | 
						|
@chat_router.post(
 | 
						|
    '/create',
 | 
						|
    operation_id='create_chat',
 | 
						|
    response_model=CreateChatResponse,
 | 
						|
)
 | 
						|
async def create_chat(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: CreateChatRequest,
 | 
						|
):
 | 
						|
    return await ChatService(session).create_chat(request)
 | 
						|
 | 
						|
 | 
						|
@chat_router.post(
 | 
						|
    '/messages',
 | 
						|
    operation_id='get_messages',
 | 
						|
    response_model=GetMessagesResponse,
 | 
						|
)
 | 
						|
async def get_messages(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: GetMessagesRequest,
 | 
						|
):
 | 
						|
    return await ChatService(session).get_messages(request)
 | 
						|
 | 
						|
 | 
						|
@chat_router.get(
 | 
						|
    '/tg-file/{file_id}',
 | 
						|
)
 | 
						|
async def get_tg_file(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        file_id: int,
 | 
						|
):
 | 
						|
    return await ChatService(session).get_tg_file(file_id)
 |