From 174ddfd0ce04eaa184f01235161f1aa575749817 Mon Sep 17 00:00:00 2001 From: "o.vodianov" Date: Mon, 11 Aug 2025 22:56:45 +0400 Subject: [PATCH] change db model --- src/core/config.py | 1 + src/core/utils.py | 4 +-- src/db/models.py | 28 ++++++++----------- .../handlers/doctors/add_payments_method.py | 2 +- .../handlers/doctors/register_handler.py | 7 +++-- src/docbot/services/doctors_service.py | 2 +- 6 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/core/config.py b/src/core/config.py index 1998685..52405ba 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -8,6 +8,7 @@ class Settings(BaseSettings): DATABASE_URL: str ADMIN_API_KEY: str LOGGING_LEVEL: str + PRODAMUS_TOKEN: str settings = Settings() diff --git a/src/core/utils.py b/src/core/utils.py index 61cbd1a..7e5133b 100644 --- a/src/core/utils.py +++ b/src/core/utils.py @@ -6,12 +6,12 @@ from datetime import datetime from urllib.parse import urlparse -def UUID_code_generator() -> str: +def UUID_code_generator(code_length: int) -> str: """ Генерирует уникальный код в формате UUID. Возвращает строку с кодом. """ - return str(uuid.uuid4().hex[:8]) + return str(uuid.uuid4().hex[:{code_length}].upper()) def generate_session_code(telegram_id: int, phone: str, consultation_date_time: str) -> str: diff --git a/src/db/models.py b/src/db/models.py index b8ec6c0..6538070 100644 --- a/src/db/models.py +++ b/src/db/models.py @@ -17,13 +17,12 @@ class Sessions(Base): id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) code: Mapped[str] = mapped_column(String(8), unique=True, nullable=False) - patient_id: Mapped[uuid.UUID] = mapped_column( - UUID(as_uuid=True), ForeignKey("patients.id", ondelete="CASCADE"), nullable=False) + patient_id: Mapped[int] = mapped_column( + ForeignKey("patients.id", ondelete="CASCADE"), nullable=False) patient: Mapped["Patients"] = relationship(back_populates="sessions") sent_at: Mapped[datetime] = mapped_column(nullable=False) consulted_at: Mapped[Optional[datetime]] = mapped_column(nullable=True) - doctor_id: Mapped[Optional[uuid.UUID]] = mapped_column( - UUID(as_uuid=True), ForeignKey("doctors.id")) + doctor_id: Mapped[int] = mapped_column(ForeignKey("doctors.id")) session_status_history: Mapped[List["SessionStatusHistory"]] = relationship( back_populates="sessions", cascade="all, delete-orphan") session_date_time_history: Mapped[List["SessionDateTimeHistory"]] = relationship( @@ -60,8 +59,7 @@ class SessionStatusHistory(Base): class Admins(Base): __tablename__ = "admins" - id: Mapped[uuid.UUID] = mapped_column( - UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + id: Mapped[int] = mapped_column(primary_key=True) telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False) created_at: Mapped[Optional[datetime]] = mapped_column(nullable=True) available_payment_methods: Mapped[Optional[List[str]]] = mapped_column( @@ -71,8 +69,7 @@ class Admins(Base): class Patients(Base): __tablename__ = "patients" - id: Mapped[uuid.UUID] = mapped_column( - UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + id: Mapped[int] = mapped_column(primary_key=True) telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False) phone: Mapped[Optional[str]] = mapped_column(nullable=True) created_at: Mapped[datetime] = mapped_column(nullable=False) @@ -85,8 +82,7 @@ class Patients(Base): class Doctors(Base): __tablename__ = "doctors" - id: Mapped[uuid.UUID] = mapped_column( - UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + id: Mapped[int] = mapped_column(primary_key=True) telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False) name: Mapped[str] = mapped_column(nullable=False) available_formats: Mapped[Optional[List[str]] @@ -132,8 +128,8 @@ class VerificationRequests(Base): __tablename__ = "verification_requests" id: Mapped[int] = mapped_column(primary_key=True) - doctor_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey( - "doctors.id", ondelete="CASCADE"), nullable=False) + doctor_id: Mapped[int] = mapped_column( + ForeignKey("doctors.id", ondelete="CASCADE"), unique=True, nullable=False) code: Mapped[str] = mapped_column(unique=True, nullable=False) sent_at: Mapped[datetime] = mapped_column(nullable=False) reviewed_at: Mapped[Optional[datetime]] = mapped_column(nullable=True) @@ -150,8 +146,8 @@ class FormLink(Base): __tablename__ = "form_links" id: Mapped[int] = mapped_column(primary_key=True) - doctor_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey( - "doctors.id", ondelete="CASCADE"), nullable=False) + doctor_id: Mapped[int] = mapped_column( + ForeignKey("doctors.id", ondelete="CASCADE"), unique=True, nullable=False) url: Mapped[str] = mapped_column(nullable=False) label: Mapped[Optional[str]] = mapped_column(nullable=True) is_active: Mapped[bool] = mapped_column(default=True, nullable=False) @@ -164,8 +160,8 @@ class PaymentMethod(Base): __tablename__ = "payment_methods" id: Mapped[int] = mapped_column(primary_key=True) - doctor_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey( - "doctors.id", ondelete="CASCADE"), nullable=False) + doctor_id: Mapped[int] = mapped_column( + ForeignKey("doctors.id", ondelete="CASCADE"), unique=True, nullable=False) method: Mapped[str] = mapped_column(nullable=False) details: Mapped[Optional[str]] = mapped_column(nullable=True) payment_api_key: Mapped[str] = mapped_column(nullable=False) diff --git a/src/docbot/handlers/doctors/add_payments_method.py b/src/docbot/handlers/doctors/add_payments_method.py index 851038c..d6e8c21 100644 --- a/src/docbot/handlers/doctors/add_payments_method.py +++ b/src/docbot/handlers/doctors/add_payments_method.py @@ -69,7 +69,7 @@ async def ask_payment_system_api(update: Update, context: ContextTypes.DEFAULT_T await update.message.reply_text( text="Введите API ключ, который указан у вас личном кабинете платёжной системы, пожалуйста." ) - return ASK_PAYMENT_SYSTEM_API + return SAVE_PAYMENT_METHOD else: logger.info(f"Payment link {payment_link} provided by user {user_id} is invalid.") await update.message.reply_text( diff --git a/src/docbot/handlers/doctors/register_handler.py b/src/docbot/handlers/doctors/register_handler.py index 243d72d..0c0ab57 100644 --- a/src/docbot/handlers/doctors/register_handler.py +++ b/src/docbot/handlers/doctors/register_handler.py @@ -31,7 +31,8 @@ SEND_ME_YOUR_FULL_NAME_TEXT = ( "📝 Пожалуйста, введите ФИО." ) SEND_ME_YOUR_SPECIALITY_TEXT = ( - "📝 Пожалуйста, введите вашу специальность, в соответствии с которой планируете проводить консультации." + "📝 Пожалуйста, введите вашу специальность/специальности, в соответствии с которой планируете проводить консультации.\n + "Например: терапевт, кардиолог, невролог и т.д." ) WAIT_FOR_ACTIVATION_TEXT = ( "📝 Заявка принята, направьте диплом и аккредитацию с указанием кода верификации {0} в теме письма на адрес электронной почты: docbot@docbot.ru\n" @@ -117,7 +118,7 @@ async def receive_doctor_speciality(update: Update, context: ContextTypes.DEFAUL ] ] - code = UUID_code_generator() + code = UUID_code_generator(code_length=8) context.user_data["verification_request_code"] = code await update.message.reply_text( @@ -164,7 +165,7 @@ async def receive_doctor_consultation_packages_acknowledgement_status(update: Up await update.message.reply_text( ALL_INFORMATION_RECEIVED_TEXT, parse_mode="Markdown", - reply_markup=ReplyKeyboardRemove + reply_markup=ReplyKeyboardRemove() ) await create_doctor( diff --git a/src/docbot/services/doctors_service.py b/src/docbot/services/doctors_service.py index 2e2afab..95bb265 100644 --- a/src/docbot/services/doctors_service.py +++ b/src/docbot/services/doctors_service.py @@ -42,7 +42,7 @@ async def is_there_primary_payment_method() -> PaymentMethod | None: async def add_payment_link(telegram_id: int, payment_link: str, payment_api_key: str): async with AsyncSessionLocal() as session: async with session.begin(): - doctor = get_doctor(telegram_id=telegram_id) + doctor = await get_doctor(telegram_id=telegram_id) session.add(PaymentMethod( doctor_id=doctor.id,