change db model

This commit is contained in:
o.vodianov 2025-08-11 22:56:45 +04:00
parent c59ccf1908
commit 174ddfd0ce
6 changed files with 21 additions and 23 deletions

View File

@ -8,6 +8,7 @@ class Settings(BaseSettings):
DATABASE_URL: str
ADMIN_API_KEY: str
LOGGING_LEVEL: str
PRODAMUS_TOKEN: str
settings = Settings()

View File

@ -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:

View File

@ -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)

View File

@ -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(

View File

@ -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(

View File

@ -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,