From ca9b5194904bcbe6cc5707a0804276b0e3b95416 Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 11 Mar 2025 14:37:06 +0500 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D1=80?= =?UTF-8?q?=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=B8=D0=B4=D0=BE=D0=B2=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=B5=D0=BC=D0=BE=D0=B2=20=D0=B8=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B2=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D1=83=20=D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BE=D0=BB=D0=B5=20=D1=81=20=D0=B4=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appointment_types_repository.py | 21 +++++++++++++ .../application/appointments_repository.py | 30 +++++++++++++++++++ ...4_добавил_таблице_с_приемами_колонку_с_.py | 30 +++++++++++++++++++ api/app/domain/models/appointments.py | 4 ++- 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 api/app/application/appointment_types_repository.py create mode 100644 api/app/application/appointments_repository.py create mode 100644 api/app/database/migrations/versions/b189446b0f74_добавил_таблице_с_приемами_колонку_с_.py diff --git a/api/app/application/appointment_types_repository.py b/api/app/application/appointment_types_repository.py new file mode 100644 index 0000000..4ac213d --- /dev/null +++ b/api/app/application/appointment_types_repository.py @@ -0,0 +1,21 @@ +from typing import Optional, Sequence + +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from app.domain.models import AppointmentType + + +class AppointmentTypesRepository: + def __init__(self, db: AsyncSession): + self.db = db + + async def get_all(self) -> Sequence[AppointmentType]: + stmt = select(AppointmentType) + result = await self.db.execute(stmt) + return result.scalars().all() + + async def get_by_id(self, appointment_type_id: int) -> Optional[AppointmentType]: + stmt = select(AppointmentType).filter(AppointmentType.id == appointment_type_id) + result = await self.db.execute(stmt) + return result.scalars().first() diff --git a/api/app/application/appointments_repository.py b/api/app/application/appointments_repository.py new file mode 100644 index 0000000..139423f --- /dev/null +++ b/api/app/application/appointments_repository.py @@ -0,0 +1,30 @@ +from typing import Optional, Sequence + +from sqlalchemy import select, desc +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy.orm import joinedload + +from app.domain.models import Appointment + + +class AppointmentsRepository: + def __init__(self, db: AsyncSession): + self.db = db + + async def get_all(self) -> Sequence[Appointment]: + stmt = ( + select(Appointment) + .options(joinedload(Appointment.type)) + .options(joinedload(Appointment.patient)) + .order_by(desc(Appointment.)) + ) + result = await self.db.execute(stmt) + return result.scalars().all() + + async def get_by_doctor_id(self, doctor_id: int): + stmt = ( + select(Appointment) + .options(joinedload(Appointment.type)) + .options(joinedload(Appointment.patient)) + .filter() + ) diff --git a/api/app/database/migrations/versions/b189446b0f74_добавил_таблице_с_приемами_колонку_с_.py b/api/app/database/migrations/versions/b189446b0f74_добавил_таблице_с_приемами_колонку_с_.py new file mode 100644 index 0000000..7be30e5 --- /dev/null +++ b/api/app/database/migrations/versions/b189446b0f74_добавил_таблице_с_приемами_колонку_с_.py @@ -0,0 +1,30 @@ +"""добавил таблице с приемами колонку с датой приема + +Revision ID: b189446b0f74 +Revises: 429c0003ac73 +Create Date: 2025-03-11 14:32:31.061063 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'b189446b0f74' +down_revision: Union[str, None] = '429c0003ac73' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('appointments', sa.Column('date', sa.Date(), server_default=sa.text('now()'), nullable=False)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('appointments', 'date') + # ### end Alembic commands ### diff --git a/api/app/domain/models/appointments.py b/api/app/domain/models/appointments.py index 4e4718a..af7f4d2 100644 --- a/api/app/domain/models/appointments.py +++ b/api/app/domain/models/appointments.py @@ -1,5 +1,6 @@ -from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy import Column, Integer, String, ForeignKey, Date from sqlalchemy.orm import relationship +from sqlalchemy.sql import func from app.domain.models.base import BaseModel @@ -9,6 +10,7 @@ class Appointment(BaseModel): results = Column(String) days_until_the_next_appointment = Column(Integer) + date = Column(Date, nullable=False, server_default=func.now()) patient_id = Column(Integer, ForeignKey('patients.id'), nullable=False) doctor_id = Column(Integer, ForeignKey('users.id'), nullable=False)