mirror of
https://github.com/olegvodyanov/docbot.git
synced 2025-12-20 08:07:04 +03:00
change db model
This commit is contained in:
parent
c59ccf1908
commit
174ddfd0ce
@ -8,6 +8,7 @@ class Settings(BaseSettings):
|
|||||||
DATABASE_URL: str
|
DATABASE_URL: str
|
||||||
ADMIN_API_KEY: str
|
ADMIN_API_KEY: str
|
||||||
LOGGING_LEVEL: str
|
LOGGING_LEVEL: str
|
||||||
|
PRODAMUS_TOKEN: str
|
||||||
|
|
||||||
|
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
|
|||||||
@ -6,12 +6,12 @@ from datetime import datetime
|
|||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
|
||||||
def UUID_code_generator() -> str:
|
def UUID_code_generator(code_length: int) -> str:
|
||||||
"""
|
"""
|
||||||
Генерирует уникальный код в формате UUID.
|
Генерирует уникальный код в формате 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:
|
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(
|
id: Mapped[uuid.UUID] = mapped_column(
|
||||||
UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||||
code: Mapped[str] = mapped_column(String(8), unique=True, nullable=False)
|
code: Mapped[str] = mapped_column(String(8), unique=True, nullable=False)
|
||||||
patient_id: Mapped[uuid.UUID] = mapped_column(
|
patient_id: Mapped[int] = mapped_column(
|
||||||
UUID(as_uuid=True), ForeignKey("patients.id", ondelete="CASCADE"), nullable=False)
|
ForeignKey("patients.id", ondelete="CASCADE"), nullable=False)
|
||||||
patient: Mapped["Patients"] = relationship(back_populates="sessions")
|
patient: Mapped["Patients"] = relationship(back_populates="sessions")
|
||||||
sent_at: Mapped[datetime] = mapped_column(nullable=False)
|
sent_at: Mapped[datetime] = mapped_column(nullable=False)
|
||||||
consulted_at: Mapped[Optional[datetime]] = mapped_column(nullable=True)
|
consulted_at: Mapped[Optional[datetime]] = mapped_column(nullable=True)
|
||||||
doctor_id: Mapped[Optional[uuid.UUID]] = mapped_column(
|
doctor_id: Mapped[int] = mapped_column(ForeignKey("doctors.id"))
|
||||||
UUID(as_uuid=True), ForeignKey("doctors.id"))
|
|
||||||
session_status_history: Mapped[List["SessionStatusHistory"]] = relationship(
|
session_status_history: Mapped[List["SessionStatusHistory"]] = relationship(
|
||||||
back_populates="sessions", cascade="all, delete-orphan")
|
back_populates="sessions", cascade="all, delete-orphan")
|
||||||
session_date_time_history: Mapped[List["SessionDateTimeHistory"]] = relationship(
|
session_date_time_history: Mapped[List["SessionDateTimeHistory"]] = relationship(
|
||||||
@ -60,8 +59,7 @@ class SessionStatusHistory(Base):
|
|||||||
class Admins(Base):
|
class Admins(Base):
|
||||||
__tablename__ = "admins"
|
__tablename__ = "admins"
|
||||||
|
|
||||||
id: Mapped[uuid.UUID] = mapped_column(
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
||||||
telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False)
|
telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False)
|
||||||
created_at: Mapped[Optional[datetime]] = mapped_column(nullable=True)
|
created_at: Mapped[Optional[datetime]] = mapped_column(nullable=True)
|
||||||
available_payment_methods: Mapped[Optional[List[str]]] = mapped_column(
|
available_payment_methods: Mapped[Optional[List[str]]] = mapped_column(
|
||||||
@ -71,8 +69,7 @@ class Admins(Base):
|
|||||||
class Patients(Base):
|
class Patients(Base):
|
||||||
__tablename__ = "patients"
|
__tablename__ = "patients"
|
||||||
|
|
||||||
id: Mapped[uuid.UUID] = mapped_column(
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
||||||
telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False)
|
telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False)
|
||||||
phone: Mapped[Optional[str]] = mapped_column(nullable=True)
|
phone: Mapped[Optional[str]] = mapped_column(nullable=True)
|
||||||
created_at: Mapped[datetime] = mapped_column(nullable=False)
|
created_at: Mapped[datetime] = mapped_column(nullable=False)
|
||||||
@ -85,8 +82,7 @@ class Patients(Base):
|
|||||||
class Doctors(Base):
|
class Doctors(Base):
|
||||||
__tablename__ = "doctors"
|
__tablename__ = "doctors"
|
||||||
|
|
||||||
id: Mapped[uuid.UUID] = mapped_column(
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
||||||
telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False)
|
telegram_id: Mapped[int] = mapped_column(unique=True, nullable=False)
|
||||||
name: Mapped[str] = mapped_column(nullable=False)
|
name: Mapped[str] = mapped_column(nullable=False)
|
||||||
available_formats: Mapped[Optional[List[str]]
|
available_formats: Mapped[Optional[List[str]]
|
||||||
@ -132,8 +128,8 @@ class VerificationRequests(Base):
|
|||||||
__tablename__ = "verification_requests"
|
__tablename__ = "verification_requests"
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(primary_key=True)
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
doctor_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey(
|
doctor_id: Mapped[int] = mapped_column(
|
||||||
"doctors.id", ondelete="CASCADE"), nullable=False)
|
ForeignKey("doctors.id", ondelete="CASCADE"), unique=True, nullable=False)
|
||||||
code: Mapped[str] = mapped_column(unique=True, nullable=False)
|
code: Mapped[str] = mapped_column(unique=True, nullable=False)
|
||||||
sent_at: Mapped[datetime] = mapped_column(nullable=False)
|
sent_at: Mapped[datetime] = mapped_column(nullable=False)
|
||||||
reviewed_at: Mapped[Optional[datetime]] = mapped_column(nullable=True)
|
reviewed_at: Mapped[Optional[datetime]] = mapped_column(nullable=True)
|
||||||
@ -150,8 +146,8 @@ class FormLink(Base):
|
|||||||
__tablename__ = "form_links"
|
__tablename__ = "form_links"
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(primary_key=True)
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
doctor_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey(
|
doctor_id: Mapped[int] = mapped_column(
|
||||||
"doctors.id", ondelete="CASCADE"), nullable=False)
|
ForeignKey("doctors.id", ondelete="CASCADE"), unique=True, nullable=False)
|
||||||
url: Mapped[str] = mapped_column(nullable=False)
|
url: Mapped[str] = mapped_column(nullable=False)
|
||||||
label: Mapped[Optional[str]] = mapped_column(nullable=True)
|
label: Mapped[Optional[str]] = mapped_column(nullable=True)
|
||||||
is_active: Mapped[bool] = mapped_column(default=True, nullable=False)
|
is_active: Mapped[bool] = mapped_column(default=True, nullable=False)
|
||||||
@ -164,8 +160,8 @@ class PaymentMethod(Base):
|
|||||||
__tablename__ = "payment_methods"
|
__tablename__ = "payment_methods"
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(primary_key=True)
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
doctor_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), ForeignKey(
|
doctor_id: Mapped[int] = mapped_column(
|
||||||
"doctors.id", ondelete="CASCADE"), nullable=False)
|
ForeignKey("doctors.id", ondelete="CASCADE"), unique=True, nullable=False)
|
||||||
method: Mapped[str] = mapped_column(nullable=False)
|
method: Mapped[str] = mapped_column(nullable=False)
|
||||||
details: Mapped[Optional[str]] = mapped_column(nullable=True)
|
details: Mapped[Optional[str]] = mapped_column(nullable=True)
|
||||||
payment_api_key: Mapped[str] = mapped_column(nullable=False)
|
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(
|
await update.message.reply_text(
|
||||||
text="Введите API ключ, который указан у вас личном кабинете платёжной системы, пожалуйста."
|
text="Введите API ключ, который указан у вас личном кабинете платёжной системы, пожалуйста."
|
||||||
)
|
)
|
||||||
return ASK_PAYMENT_SYSTEM_API
|
return SAVE_PAYMENT_METHOD
|
||||||
else:
|
else:
|
||||||
logger.info(f"Payment link {payment_link} provided by user {user_id} is invalid.")
|
logger.info(f"Payment link {payment_link} provided by user {user_id} is invalid.")
|
||||||
await update.message.reply_text(
|
await update.message.reply_text(
|
||||||
|
|||||||
@ -31,7 +31,8 @@ SEND_ME_YOUR_FULL_NAME_TEXT = (
|
|||||||
"📝 Пожалуйста, введите ФИО."
|
"📝 Пожалуйста, введите ФИО."
|
||||||
)
|
)
|
||||||
SEND_ME_YOUR_SPECIALITY_TEXT = (
|
SEND_ME_YOUR_SPECIALITY_TEXT = (
|
||||||
"📝 Пожалуйста, введите вашу специальность, в соответствии с которой планируете проводить консультации."
|
"📝 Пожалуйста, введите вашу специальность/специальности, в соответствии с которой планируете проводить консультации.\n
|
||||||
|
"Например: терапевт, кардиолог, невролог и т.д."
|
||||||
)
|
)
|
||||||
WAIT_FOR_ACTIVATION_TEXT = (
|
WAIT_FOR_ACTIVATION_TEXT = (
|
||||||
"📝 Заявка принята, направьте диплом и аккредитацию с указанием кода верификации {0} в теме письма на адрес электронной почты: docbot@docbot.ru\n"
|
"📝 Заявка принята, направьте диплом и аккредитацию с указанием кода верификации {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
|
context.user_data["verification_request_code"] = code
|
||||||
|
|
||||||
await update.message.reply_text(
|
await update.message.reply_text(
|
||||||
@ -164,7 +165,7 @@ async def receive_doctor_consultation_packages_acknowledgement_status(update: Up
|
|||||||
await update.message.reply_text(
|
await update.message.reply_text(
|
||||||
ALL_INFORMATION_RECEIVED_TEXT,
|
ALL_INFORMATION_RECEIVED_TEXT,
|
||||||
parse_mode="Markdown",
|
parse_mode="Markdown",
|
||||||
reply_markup=ReplyKeyboardRemove
|
reply_markup=ReplyKeyboardRemove()
|
||||||
)
|
)
|
||||||
|
|
||||||
await create_doctor(
|
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 def add_payment_link(telegram_id: int, payment_link: str, payment_api_key: str):
|
||||||
async with AsyncSessionLocal() as session:
|
async with AsyncSessionLocal() as session:
|
||||||
async with session.begin():
|
async with session.begin():
|
||||||
doctor = get_doctor(telegram_id=telegram_id)
|
doctor = await get_doctor(telegram_id=telegram_id)
|
||||||
|
|
||||||
session.add(PaymentMethod(
|
session.add(PaymentMethod(
|
||||||
doctor_id=doctor.id,
|
doctor_id=doctor.id,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user