diff --git a/alembic.ini b/alembic.ini index 63df18a..7fcbe09 100644 --- a/alembic.ini +++ b/alembic.ini @@ -12,7 +12,7 @@ file_template = %%(year)d-%%(month).2d-%%(day).2d_%%(slug)s # sys.path path, will be prepended to sys.path if present. # defaults to the current working directory. -prepend_sys_path = . +prepend_sys_path = . app # timezone to use when rendering the date within the migration file # as well as the filename. diff --git a/app/chat/dao.py b/app/chat/dao.py index 0b5280e..6b77d00 100644 --- a/app/chat/dao.py +++ b/app/chat/dao.py @@ -5,7 +5,12 @@ from app.database import async_session_maker, engine # noqa from app.exceptions import UserAlreadyInChatException, UserAlreadyPinnedChatException from app.chat.shemas import SMessage from app.models.users import Users -from app.models.chat import Chats, Messages, UsersXChats, PinnedChats, PinnedMessages, Answers +from app.models.answer import Answer +from app.models.chat import Chats +from app.models.message import Message +from app.models.pinned_chat import PinnedChats +from app.models.pinned_message import PinnedMessages +from app.models.user_chat import UserChat class ChatDAO(BaseDAO): @@ -22,13 +27,13 @@ class ChatDAO(BaseDAO): @staticmethod async def add_user_to_chat(user_id: int, chat_id: int) -> bool: - query = select(UsersXChats.user_id).where(UsersXChats.chat_id == chat_id) + query = select(UserChat.user_id).where(UserChat.chat_id == chat_id) async with async_session_maker() as session: result = await session.execute(query) result = result.scalars().all() if user_id in result: raise UserAlreadyInChatException - query = insert(UsersXChats).values(user_id=user_id, chat_id=chat_id) + query = insert(UserChat).values(user_id=user_id, chat_id=chat_id) await session.execute(query) await session.commit() return True @@ -36,10 +41,10 @@ class ChatDAO(BaseDAO): @staticmethod async def send_message(user_id: int, chat_id: int, message: str, image_url: str | None = None) -> SMessage: inserted_image = ( - insert(Messages) + insert(Message) .values(chat_id=chat_id, user_id=user_id, message=message, image_url=image_url) .returning( - Messages.id, Messages.message, Messages.image_url, Messages.chat_id, Messages.user_id, Messages.created_at + Message.id, Message.message, Message.image_url, Message.chat_id, Message.user_id, Message.created_at ) .cte("inserted_image") ) @@ -55,12 +60,12 @@ class ChatDAO(BaseDAO): Users.avatar_image, Users.username, Users.avatar_hex, - Answers.self_id, - Answers.answer_id, + Answer.self_id, + Answer.answer_id, ) .select_from(inserted_image) .join(Users, Users.id == inserted_image.c.user_id) - .join(Answers, Answers.self_id == inserted_image.c.id, isouter=True) + .join(Answer, Answer.self_id == inserted_image.c.id, isouter=True) ) async with async_session_maker() as session: @@ -73,22 +78,22 @@ class ChatDAO(BaseDAO): async def get_message_by_id(message_id: int): query = ( select( - Messages.id, - Messages.message, - Messages.image_url, - Messages.chat_id, - Messages.user_id, - Messages.created_at, + Message.id, + Message.message, + Message.image_url, + Message.chat_id, + Message.user_id, + Message.created_at, Users.avatar_image, Users.username, Users.avatar_hex, - Answers.self_id, - Answers.answer_id, + Answer.self_id, + Answer.answer_id, ) - .select_from(Messages) - .join(Users, Users.id == Messages.user_id) - .join(Answers, Answers.self_id == Messages.id, isouter=True) - .where(Messages.id == message_id, Messages.visibility == True) # + .select_from(Message) + .join(Users, Users.id == Message.user_id) + .join(Answer, Answer.self_id == Message.id, isouter=True) + .where(Message.id == message_id, Message.visibility == True) # ) async with async_session_maker() as session: result = await session.execute(query) @@ -98,7 +103,7 @@ class ChatDAO(BaseDAO): @staticmethod async def delete_message(message_id: int) -> bool: - query = update(Messages).where(Messages.id == message_id).values(visibility=False) + query = update(Message).where(Message.id == message_id).values(visibility=False) async with async_session_maker() as session: await session.execute(query) await session.commit() @@ -120,10 +125,10 @@ class ChatDAO(BaseDAO): LIMIT 15 OFFSET 0; """ messages_with_users = ( - select(Messages.__table__.columns, Users.__table__.columns, Answers.__table__.columns) - .select_from(Messages) - .join(Users, Messages.user_id == Users.id) - .join(Answers, Answers.self_id == Messages.id, isouter=True) + select(Message.__table__.columns, Users.__table__.columns, Answer.__table__.columns) + .select_from(Message) + .join(Users, Message.user_id == Users.id) + .join(Answer, Answer.self_id == Message.id, isouter=True) .cte("messages_with_users") ) @@ -155,7 +160,7 @@ class ChatDAO(BaseDAO): @staticmethod async def edit_message(message_id: int, new_message: str, new_image_url: str) -> bool: - query = update(Messages).where(Messages.id == message_id).values(message=new_message, image_url=new_image_url) + query = update(Message).where(Message.id == message_id).values(message=new_message, image_url=new_image_url) async with async_session_maker() as session: await session.execute(query) await session.commit() @@ -164,30 +169,30 @@ class ChatDAO(BaseDAO): @staticmethod async def add_answer(self_id: int, answer_id: int) -> SMessage: answer = ( - insert(Answers) + insert(Answer) .values(self_id=self_id, answer_id=answer_id) - .returning(Answers.self_id, Answers.answer_id) + .returning(Answer.self_id, Answer.answer_id) .cte("answer") ) query = ( select( - Messages.id, - Messages.message, - Messages.image_url, - Messages.chat_id, - Messages.user_id, - Messages.created_at, + Message.id, + Message.message, + Message.image_url, + Message.chat_id, + Message.user_id, + Message.created_at, Users.avatar_image, Users.username, Users.avatar_hex, answer.c.self_id, answer.c.answer_id, ) - .select_from(Messages) - .join(Users, Users.id == Messages.user_id) - .join(answer, answer.c.self_id == Messages.id, isouter=True) - .where(Messages.id == self_id) + .select_from(Message) + .join(Users, Users.id == Message.user_id) + .join(answer, answer.c.self_id == Message.id, isouter=True) + .where(Message.id == self_id) ) async with async_session_maker() as session: @@ -206,7 +211,7 @@ class ChatDAO(BaseDAO): @staticmethod async def delete_user(chat_id: int, user_id: int) -> bool: - query = delete(UsersXChats).where(UsersXChats.chat_id == chat_id, UsersXChats.user_id == user_id) + query = delete(UserChat).where(UserChat.chat_id == chat_id, UserChat.user_id == user_id) async with async_session_maker() as session: await session.execute(query) await session.commit() @@ -236,9 +241,9 @@ class ChatDAO(BaseDAO): @staticmethod async def get_pinned_chats(user_id: int): chats_with_descriptions = ( - select(UsersXChats.__table__.columns, Chats.__table__.columns) - .select_from(UsersXChats) - .join(Chats, UsersXChats.chat_id == Chats.id) + select(UserChat.__table__.columns, Chats.__table__.columns) + .select_from(UserChat) + .join(Chats, UserChat.chat_id == Chats.id) .cte("chats_with_descriptions") ) @@ -306,24 +311,24 @@ class ChatDAO(BaseDAO): async def get_pinned_messages(chat_id: int) -> list[dict]: query = ( select( - Messages.id, - Messages.message, - Messages.image_url, - Messages.chat_id, - Messages.user_id, - Messages.created_at, + Message.id, + Message.message, + Message.image_url, + Message.chat_id, + Message.user_id, + Message.created_at, Users.avatar_image, Users.username, Users.avatar_hex, - Answers.self_id, - Answers.answer_id, + Answer.self_id, + Answer.answer_id, ) .select_from(PinnedMessages) - .join(Messages, PinnedMessages.message_id == Messages.id, isouter=True) + .join(Message, PinnedMessages.message_id == Message.id, isouter=True) .join(Users, PinnedMessages.user_id == Users.id, isouter=True) - .join(Answers, Answers.self_id == Messages.id, isouter=True) - .where(PinnedMessages.chat_id == chat_id, Messages.visibility == True) - .order_by(Messages.created_at.desc()) + .join(Answer, Answer.self_id == Message.id, isouter=True) + .where(PinnedMessages.chat_id == chat_id, Message.visibility == True) + .order_by(Message.created_at.desc()) ) async with async_session_maker() as session: result = await session.execute(query) diff --git a/app/migrations/env.py b/app/migrations/env.py index 008a4ca..dd70e49 100644 --- a/app/migrations/env.py +++ b/app/migrations/env.py @@ -1,15 +1,19 @@ -import sys -from os.path import abspath, dirname from logging.config import fileConfig from sqlalchemy import engine_from_config, pool from alembic import context -sys.path.insert(0, dirname(dirname(abspath(__file__)))) from app.database import DATABASE_URL, Base -from app.models.chat import Users, UsersVerificationCodes # noqa -from app.models.chat import Chats, Messages, UsersXChats, PinnedMessages, PinnedChats # noqa +from app.models.users import Users # noqa +from app.models.answer import Answer # noqa +from app.models.chat import Chats # noqa +from app.models.message import Message # noqa +from app.models.pinned_chat import PinnedChats # noqa +from app.models.pinned_message import PinnedMessages # noqa +from app.models.user_chat import UserChat # noqa +from app.models.user_avatar import UserAvatar # noqa +from app.models.user_verification_code import UserVerificationCode # noqa # this is the Alembic Config object, which provides # access to the values within the .ini file in use. diff --git a/app/models/answer.py b/app/models/answer.py new file mode 100644 index 0000000..6ece951 --- /dev/null +++ b/app/models/answer.py @@ -0,0 +1,11 @@ +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from app.database import Base + + +class Answer(Base): + __tablename__ = "answers" + + self_id: Mapped[int] = mapped_column(ForeignKey("messages.id"), primary_key=True) + answer_id: Mapped[int] = mapped_column(ForeignKey("messages.id")) diff --git a/app/models/chat.py b/app/models/chat.py index a243a76..d90bfca 100644 --- a/app/models/chat.py +++ b/app/models/chat.py @@ -1,7 +1,5 @@ -from datetime import datetime - -from sqlalchemy import func, ForeignKey, DateTime -from sqlalchemy.orm import mapped_column, Mapped, relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import mapped_column, Mapped from app.database import Base @@ -14,82 +12,3 @@ class Chats(Base): chat_for = mapped_column(ForeignKey("users.id")) chat_name: Mapped[str] visibility: Mapped[bool] = mapped_column(server_default="true") - - message = relationship("Messages", back_populates="chat") - usersxchats = relationship("UsersXChats", back_populates="chat") - user_to_exclude = relationship("Users", primaryjoin="Chats.chat_for == Users.id", back_populates="chat") - user_who_create = relationship("Users", primaryjoin="Chats.created_by == Users.id", back_populates="creator") - pinned_messages = relationship("PinnedMessages", back_populates="chat") - pinned_chats = relationship("PinnedChats", back_populates="chat") - - def __str__(self): - return f"Чат #{self.id}. Виден: {self.visibility}. Сделан {self.created_by} для {self.chat_for}" - - -class Messages(Base): - __tablename__ = "messages" - - id: Mapped[int] = mapped_column(primary_key=True) - chat_id = mapped_column(ForeignKey("chats.id")) - user_id = mapped_column(ForeignKey("users.id")) - message: Mapped[str | None] - image_url: Mapped[str | None] - created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) - visibility: Mapped[bool] = mapped_column(server_default="true") - - chat = relationship("Chats", back_populates="message") - user = relationship("Users", back_populates="message") - pinned_messages = relationship("PinnedMessages", back_populates="message") - self_id = relationship("Answers", primaryjoin="Messages.id == Answers.self_id", back_populates="self_message") - answer_id = relationship("Answers", primaryjoin="Messages.id == Answers.answer_id", back_populates="answer_message") - - def __str__(self): - return f"#{self.id} {self.message} от {self.user_id}. Написано {self.created_at}" - - -class Answers(Base): - __tablename__ = "answers" - - self_id: Mapped[int] = mapped_column(ForeignKey("messages.id"), primary_key=True) - answer_id: Mapped[int] = mapped_column(ForeignKey("messages.id")) - - self_message = relationship("Messages", primaryjoin="Answers.self_id == Messages.id", back_populates="self_id") - answer_message = relationship("Messages", primaryjoin="Answers.answer_id == Messages.id", back_populates="answer_id") - - -class UsersXChats(Base): - __tablename__ = "usersxchats" - - id: Mapped[int] = mapped_column(primary_key=True) - user_id = mapped_column(ForeignKey("users.id")) - chat_id = mapped_column(ForeignKey("chats.id")) - - chat = relationship("Chats", back_populates="usersxchats") - user = relationship("Users", back_populates="usersxchats") - - def __str__(self): - return f"Юзер #{self.user_id} допущен к чату {self.chat_id}" - - -class PinnedMessages(Base): - __tablename__ = "pinnedmessages" - - id: Mapped[int] = mapped_column(primary_key=True) - chat_id = mapped_column(ForeignKey("chats.id")) - message_id = mapped_column(ForeignKey("messages.id")) - user_id = mapped_column(ForeignKey("users.id")) - - chat = relationship("Chats", back_populates="pinned_messages") - message = relationship("Messages", back_populates="pinned_messages") - user = relationship("Users", back_populates="pinned_messages") - - -class PinnedChats(Base): - __tablename__ = "pinnedchats" - - id: Mapped[int] = mapped_column(primary_key=True) - user_id = mapped_column(ForeignKey("users.id")) - chat_id = mapped_column(ForeignKey("chats.id")) - - chat = relationship("Chats", back_populates="pinned_chats") - user = relationship("Users", back_populates="pinned_chats") diff --git a/app/models/message.py b/app/models/message.py new file mode 100644 index 0000000..191e81d --- /dev/null +++ b/app/models/message.py @@ -0,0 +1,18 @@ +from datetime import datetime + +from sqlalchemy import ForeignKey, func, DateTime +from sqlalchemy.orm import Mapped, mapped_column + +from app.database import Base + + +class Message(Base): + __tablename__ = "messages" + + id: Mapped[int] = mapped_column(primary_key=True) + chat_id = mapped_column(ForeignKey("chats.id")) + user_id = mapped_column(ForeignKey("users.id")) + message: Mapped[str | None] + image_url: Mapped[str | None] + created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) + visibility: Mapped[bool] = mapped_column(server_default="true") diff --git a/app/models/pinned_chat.py b/app/models/pinned_chat.py new file mode 100644 index 0000000..8cbc9d8 --- /dev/null +++ b/app/models/pinned_chat.py @@ -0,0 +1,12 @@ +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from app.database import Base + + +class PinnedChats(Base): + __tablename__ = "pinnedchats" + + id: Mapped[int] = mapped_column(primary_key=True) + user_id = mapped_column(ForeignKey("users.id")) + chat_id = mapped_column(ForeignKey("chats.id")) diff --git a/app/models/pinned_message.py b/app/models/pinned_message.py new file mode 100644 index 0000000..33dcc22 --- /dev/null +++ b/app/models/pinned_message.py @@ -0,0 +1,13 @@ +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from app.database import Base + + +class PinnedMessages(Base): + __tablename__ = "pinnedmessages" + + id: Mapped[int] = mapped_column(primary_key=True) + chat_id = mapped_column(ForeignKey("chats.id")) + message_id = mapped_column(ForeignKey("messages.id")) + user_id = mapped_column(ForeignKey("users.id")) diff --git a/app/models/user_avatar.py b/app/models/user_avatar.py new file mode 100644 index 0000000..5499e73 --- /dev/null +++ b/app/models/user_avatar.py @@ -0,0 +1,12 @@ +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from app.database import Base + + +class UserAvatar(Base): + __tablename__ = "usersavatars" + + id: Mapped[int] = mapped_column(primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + avatar_image: Mapped[str] diff --git a/app/models/user_chat.py b/app/models/user_chat.py new file mode 100644 index 0000000..bb8c874 --- /dev/null +++ b/app/models/user_chat.py @@ -0,0 +1,12 @@ +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from app.database import Base + + +class UserChat(Base): + __tablename__ = "usersxchats" + + id: Mapped[int] = mapped_column(primary_key=True) + user_id = mapped_column(ForeignKey("users.id")) + chat_id = mapped_column(ForeignKey("chats.id")) diff --git a/app/models/user_verification_code.py b/app/models/user_verification_code.py new file mode 100644 index 0000000..24b1906 --- /dev/null +++ b/app/models/user_verification_code.py @@ -0,0 +1,16 @@ +from datetime import datetime + +from sqlalchemy import func, ForeignKey, DateTime +from sqlalchemy.orm import Mapped, mapped_column + +from app.database import Base + + +class UserVerificationCode(Base): + __tablename__ = "usersverificationcodes" + + id: Mapped[int] = mapped_column(primary_key=True) + user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) + code: Mapped[str] + description: Mapped[str] + date_of_creation: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) diff --git a/app/models/users.py b/app/models/users.py index 3525dce..2b9987b 100644 --- a/app/models/users.py +++ b/app/models/users.py @@ -1,7 +1,7 @@ -from datetime import date, datetime +from datetime import date -from sqlalchemy import func, ForeignKey, DateTime -from sqlalchemy.orm import mapped_column, Mapped, relationship +from sqlalchemy import func +from sqlalchemy.orm import mapped_column, Mapped from app.database import Base @@ -10,51 +10,12 @@ class Users(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(primary_key=True) - email: Mapped[str] - username: Mapped[str] + email: Mapped[str] = mapped_column(unique=True) + username: Mapped[str] = mapped_column(unique=True) hashed_password: Mapped[str] role: Mapped[int] = mapped_column(server_default="0") black_phoenix: Mapped[bool] = mapped_column(server_default="false") - avatar_image: Mapped[str] = mapped_column( - server_default="https://images.black-phoenix.ru/static/images/%D1%82%D1%8B%20%D1%83%D0%B6%D0%B5%20%D0%BF%D0%B5%D1%88%D0%BA%D0%B0%20BP.png" # noqa: E501 - ) + avatar_image: Mapped[str] = mapped_column(server_default="https://images.black-phoenix.ru/static/images/%D1%82%D1%8B%20%D1%83%D0%B6%D0%B5%20%D0%BF%D0%B5%D1%88%D0%BA%D0%B0%20BP.png") # noqa: E501 avatar_hex: Mapped[str] = mapped_column(server_default="#30293f") date_of_birth: Mapped[date] date_of_registration: Mapped[date] = mapped_column(server_default=func.now()) - - message = relationship("Messages", back_populates="user") - usersxchats = relationship("UsersXChats", back_populates="user") - chat = relationship("Chats", primaryjoin="Chats.chat_for == Users.id", back_populates="user_to_exclude") - creator = relationship("Chats", primaryjoin="Chats.created_by == Users.id", back_populates="user_who_create") - verificationcode = relationship("UsersVerificationCodes", back_populates="user") - pinned_messages = relationship("PinnedMessages", back_populates="user") - pinned_chats = relationship("PinnedChats", back_populates="user") - avatars = relationship("UsersAvatars", back_populates="user") - - def __str__(self): - return f"Юзер {self.username}" - - -class UsersVerificationCodes(Base): - __tablename__ = "usersverificationcodes" - - id: Mapped[int] = mapped_column(primary_key=True) - user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) - code: Mapped[str] - description: Mapped[str] - date_of_creation: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) - - user = relationship("Users", back_populates="verificationcode") - - def __str__(self): - return f"Код {self.code} для юзера {self.user_id}. {self.description}" - - -class UsersAvatars(Base): - __tablename__ = "usersavatars" - - id: Mapped[int] = mapped_column(primary_key=True) - user_id: Mapped[int] = mapped_column(ForeignKey("users.id")) - avatar_image: Mapped[str] - - user = relationship("Users", back_populates="avatars") diff --git a/app/tests/conftest.py b/app/tests/conftest.py index dd31a90..577413c 100644 --- a/app/tests/conftest.py +++ b/app/tests/conftest.py @@ -7,8 +7,11 @@ from httpx import AsyncClient from app.config import settings from app.database import Base, async_session_maker, engine -from app.models.chat import Users, UsersVerificationCodes -from app.models.chat import Chats, UsersXChats, Messages +from app.models.users import Users +from app.models.user_verification_code import UserVerificationCode +from app.models.chat import Chats +from app.models.message import Message +from app.models.user_chat import UserChat from app.main import app as fastapi_app @@ -38,10 +41,10 @@ async def prepare_database(): async with async_session_maker() as session: add_users = insert(Users).values(new_users) - add_users_verification_codes = insert(UsersVerificationCodes).values(users_verification_codes) + add_users_verification_codes = insert(UserVerificationCode).values(users_verification_codes) add_chats = insert(Chats).values(chats) - add_users_x_chats = insert(UsersXChats).values(users_x_chats) - add_messages = insert(Messages).values(messages) + add_users_x_chats = insert(UserChat).values(users_x_chats) + add_messages = insert(Message).values(messages) set_verified_user = update(Users).values(role=1).where(Users.id == 3) await session.execute(add_users) diff --git a/app/users/dao.py b/app/users/dao.py index a3a52de..8d3db52 100644 --- a/app/users/dao.py +++ b/app/users/dao.py @@ -2,8 +2,11 @@ from sqlalchemy import update, select, insert, and_, func, text, delete from app.dao.base import BaseDAO from app.database import async_session_maker, engine # noqa -from app.models.chat import UsersXChats, Chats -from app.models.users import Users, UsersVerificationCodes, UsersAvatars +from app.models.chat import Chats +from app.models.user_avatar import UserAvatar +from app.models.users import Users +from app.models.user_verification_code import UserVerificationCode +from app.models.user_chat import UserChat from app.users.schemas import SUser, SUserAvatars @@ -63,9 +66,9 @@ class UserDAO(BaseDAO): WHERE user_id = 1 """ chats_with_descriptions = ( - select(UsersXChats.__table__.columns, Chats.__table__.columns) - .select_from(UsersXChats) - .join(Chats, UsersXChats.chat_id == Chats.id) + select(UserChat.__table__.columns, Chats.__table__.columns) + .select_from(UserChat) + .join(Chats, UserChat.chat_id == Chats.id) ).cte("chats_with_descriptions") chats_with_avatars = ( @@ -108,7 +111,7 @@ class UserDAO(BaseDAO): @staticmethod async def add_user_avatar(user_id: int, avatar: str) -> bool: - query = insert(UsersAvatars).values(user_id=user_id, avatar_image=avatar) + query = insert(UserAvatar).values(user_id=user_id, avatar_image=avatar) async with async_session_maker() as session: await session.execute(query) await session.commit() @@ -121,11 +124,11 @@ class UserDAO(BaseDAO): "user_avatars", select( func.json_agg( func.json_build_object( - "avatar_url", UsersAvatars.avatar_image + "avatar_url", UserAvatar.avatar_image ) ) ) - .where(UsersAvatars.user_id == user_id) + .where(UserAvatar.user_id == user_id) .scalar_subquery() ) ) @@ -136,7 +139,7 @@ class UserDAO(BaseDAO): @staticmethod async def delete_user_avatar(avatar_id: int, user_id: int) -> bool: - query = delete(UsersAvatars).where(and_(UsersAvatars.id == avatar_id, UsersAvatars.user_id == user_id)) + query = delete(UserAvatar).where(and_(UserAvatar.id == avatar_id, UserAvatar.user_id == user_id)) async with async_session_maker() as session: await session.execute(query) await session.commit() @@ -144,12 +147,12 @@ class UserDAO(BaseDAO): class UserCodesDAO(BaseDAO): - model = UsersVerificationCodes + model = UserVerificationCode @classmethod async def set_user_codes(cls, user_id: int, code: str, description: str): query = ( - insert(UsersVerificationCodes) + insert(UserVerificationCode) .values(user_id=user_id, code=code, description=description) .returning(cls.model.code) ) @@ -173,8 +176,8 @@ class UserCodesDAO(BaseDAO): AND now() - usersverificationcodes.date_of_creation < INTERVAL '30 minutes' """ query = ( - select(UsersVerificationCodes.__table__.columns) - .where((func.now() - UsersVerificationCodes.date_of_creation) < text("INTERVAL '10 minutes'")) + select(UserVerificationCode.__table__.columns) + .where((func.now() - UserVerificationCode.date_of_creation) < text("INTERVAL '10 minutes'")) .filter_by(**filter_by) )