Вроде доделал создание чата

This commit is contained in:
urec56 2024-02-11 15:12:02 +03:00
parent 82c57b3134
commit 2a4502815d
6 changed files with 41 additions and 12 deletions

View file

@ -72,3 +72,8 @@ class UserCanNotReadThisChatException(BlackPhoenixException):
class WrongCodeException(BlackPhoenixException):
status_code = status.HTTP_409_CONFLICT
detail = 'Введён не верный код подтверждения'
class UserNotFoundException(BlackPhoenixException):
status_code = status.HTTP_404_NOT_FOUND
detail = 'Юзер не найден'

View file

@ -6,6 +6,7 @@ from fastapi.middleware.cors import CORSMiddleware
from app.admin.auth import authentication_backend
from app.admin.views import UsersAdmin, ChatsAdmin, MessagesAdmin, UsersXChatsAdmin
from app.database import engine
from app.users.auth import check_verificated_user
from app.users.chat.router import router as chat_router
from app.users.router import router as user_router
from app.pages.router import router as pages_router
@ -48,5 +49,5 @@ app.mount("/static", StaticFiles(directory="app/static"), name="static")
@app.get('/')
async def root():
pass
async def root(user_id: int):
return await check_verificated_user(user_id)

View file

@ -5,7 +5,8 @@ from passlib.context import CryptContext
from pydantic import EmailStr
from app.config import settings
from app.exceptions import UserDontHavePermissionException, IncorrectAuthDataException, UserAlreadyExistsException
from app.exceptions import UserDontHavePermissionException, IncorrectAuthDataException, UserAlreadyExistsException, \
UserNotFoundException
from app.users.dao import UserDAO
from app.users.models import Users
from app.users.schemas import SUserRegister
@ -13,6 +14,7 @@ from app.users.schemas import SUserRegister
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
ADMIN_USER = 100
ADMIN_USER_ID = 21
REGISTRATED_USER = 0
VERIFICATED_USER = 1
@ -70,6 +72,13 @@ async def check_existing_user(user_data: SUserRegister) -> None:
raise UserAlreadyExistsException
async def check_verificated_user(user_id: int) -> bool:
user = await UserDAO.find_one_or_none(id=user_id)
if not user:
raise UserNotFoundException
return user.role >= VERIFICATED_USER
async def get_user_allowed_chats_id(user_id: int):
user_allowed_chats = await UserDAO.get_user_allowed_chats(user_id)
user_allowed_chats_id = (chat['chat_id'] for chat in user_allowed_chats)

View file

@ -3,15 +3,24 @@ 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
from app.users.chat.models import Chats, Messages, UsersXChats
class ChatDAO(BaseDAO):
model = Chats
@classmethod
async def create(cls, user_id: int, chat_name: str):
query = insert(Chats).values(chat_for=user_id, chat_name=chat_name)
async def create(cls, user_id: int, chat_name: str) -> int:
query = insert(Chats).values(chat_for=user_id, chat_name=chat_name).returning(Chats.id)
async with async_session_maker() as session:
result = await session.execute(query)
await session.commit()
result = result.scalar()
return result
@classmethod
async def add_user_to_chat(cls, user_id: int, chat_id: int):
query = insert(UsersXChats).values(user_id=user_id, chat_id=chat_id)
async with async_session_maker() as session:
await session.execute(query)
await session.commit()

View file

@ -6,7 +6,7 @@ from app.users.chat.shemas import SMessage, SLastMessages
from app.users.dao import UserDAO
from app.users.dependencies import get_current_user
from app.users.auth import validate_user_access_to_chat, validate_user_admin
from app.users.auth import validate_user_access_to_chat, validate_user_admin, get_user_allowed_chats_id, ADMIN_USER_ID
from app.users.models import Users
router = APIRouter(
@ -26,6 +26,9 @@ async def add_message_to_chat(
message: str,
user: Users = Depends(get_current_user)
):
chats = await get_user_allowed_chats_id(user.id)
if chat_id not in chats:
raise UserDontHavePermissionException
send_message_to_chat = await ChatDAO.send_message(
user_id=user.id,
chat_id=chat_id,
@ -48,7 +51,7 @@ async def delete_message_from_chat(
return deleted_message
# Не доделан
@router.post("/create_chat", status_code=status.HTTP_201_CREATED)
async def create_chat(
user_to_exclude: int,
@ -57,8 +60,10 @@ async def create_chat(
):
if user.id == user_to_exclude:
raise UserCanNotReadThisChatException
created_chat = await ChatDAO.create(user_id=user_to_exclude, chat_name=chat_name)
return created_chat
chat_id = await ChatDAO.create(user_id=user_to_exclude, chat_name=chat_name)
user_added_to_chat = await ChatDAO.add_user_to_chat(user.id, chat_id)
await ChatDAO.add_user_to_chat(ADMIN_USER_ID, chat_id)
return user_added_to_chat
@router.get("/get_last_message/{chat_id}", response_model=list[SMessage])

View file

@ -16,7 +16,7 @@ class Users(Base):
hashed_password: Mapped[str]
role: Mapped[int]
black_phoenix: Mapped[bool]
avatar_image: Mapped[Optional[str]] = mapped_column(server_default='app/static/images/ты уже пешка BP.png')
avatar_image: Mapped[Optional[str]] = mapped_column(server_default='static/images/ты уже пешка BP.png')
date_of_birth: Mapped[date]
date_of_registration: Mapped[date] = mapped_column(server_default=func.now())
@ -41,4 +41,4 @@ class UsersVerificationCodes(Base):
user = relationship("Users", back_populates="verificationcode")
def __str__(self):
return f"Код {self.code} для юзера {self.user}. {self.description}"
return f"Код {self.code} для юзера {self.user_id}. {self.description}"