mirror of
https://github.com/olegvodyanov/docbot.git
synced 2025-12-19 23:57:05 +03:00
change db model
This commit is contained in:
parent
c59ccf1908
commit
174ddfd0ce
@ -8,6 +8,7 @@ class Settings(BaseSettings):
|
||||
DATABASE_URL: str
|
||||
ADMIN_API_KEY: str
|
||||
LOGGING_LEVEL: str
|
||||
PRODAMUS_TOKEN: str
|
||||
|
||||
|
||||
settings = Settings()
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user