From 44d1dbb745464bce87765e874f12a333ae4a00a4 Mon Sep 17 00:00:00 2001 From: andrei Date: Sat, 1 Mar 2025 14:26:13 +0500 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BB?= =?UTF-8?q?=D0=B8=D0=BD=D0=B7=20=D0=B8=D0=B7=20=D0=BD=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/sets_router.py | 16 +++++++ ...брал_таблицу_связывающую_линзы_и_наборы.py | 40 +++++++++++++++++ api/app/domain/models/__init__.py | 1 - api/app/domain/models/lens.py | 1 - api/app/domain/models/set_lens.py | 14 ------ api/app/domain/models/sets.py | 1 - api/app/infrastructure/sets_service.py | 44 ++++++++++++++++++- 7 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 api/app/database/migrations/versions/429c0003ac73_убрал_таблицу_связывающую_линзы_и_наборы.py delete mode 100644 api/app/domain/models/set_lens.py diff --git a/api/app/controllers/sets_router.py b/api/app/controllers/sets_router.py index 5031344..a4e7127 100644 --- a/api/app/controllers/sets_router.py +++ b/api/app/controllers/sets_router.py @@ -2,6 +2,7 @@ from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from app.database.session import get_db +from app.domain.entities.lens import LensEntity from app.domain.entities.set import SetEntity from app.infrastructure.dependencies import get_current_user from app.infrastructure.sets_service import SetsService @@ -54,6 +55,21 @@ async def update_set( return await sets_service.update_set(set_id, _set) +@router.post( + '/sets/append_lenses/{set_id}/', + response_model=list[LensEntity], + summary='Append content from set to lenses', + description='Get all content from set, converting to lens and appending to database', +) +async def append_lenses_set( + set_id: int, + db: AsyncSession = Depends(get_db), + user=Depends(get_current_user), +): + sets_service = SetsService(db) + return await sets_service.append_set_content_to_lenses(set_id) + + @router.delete( '/sets/{set_id}/', response_model=SetEntity, diff --git a/api/app/database/migrations/versions/429c0003ac73_убрал_таблицу_связывающую_линзы_и_наборы.py b/api/app/database/migrations/versions/429c0003ac73_убрал_таблицу_связывающую_линзы_и_наборы.py new file mode 100644 index 0000000..35ec254 --- /dev/null +++ b/api/app/database/migrations/versions/429c0003ac73_убрал_таблицу_связывающую_линзы_и_наборы.py @@ -0,0 +1,40 @@ +"""убрал таблицу связывающую линзы и наборы + +Revision ID: 429c0003ac73 +Revises: e2c127e2d330 +Create Date: 2025-02-27 10:49:13.829256 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision: str = '429c0003ac73' +down_revision: Union[str, None] = 'e2c127e2d330' +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.drop_table('set_lens') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('set_lens', + sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), + sa.Column('set_id', sa.INTEGER(), autoincrement=False, nullable=False), + sa.Column('lens_id', sa.INTEGER(), autoincrement=False, nullable=False), + sa.Column('created_at', postgresql.TIMESTAMP(), server_default=sa.text('now()'), autoincrement=False, nullable=False), + sa.Column('updated_at', postgresql.TIMESTAMP(), server_default=sa.text('now()'), autoincrement=False, nullable=False), + sa.ForeignKeyConstraint(['lens_id'], ['lens.id'], name='set_lens_lens_id_fkey'), + sa.ForeignKeyConstraint(['set_id'], ['sets.id'], name='set_lens_set_id_fkey'), + sa.PrimaryKeyConstraint('id', name='set_lens_pkey'), + sa.UniqueConstraint('lens_id', name='set_lens_lens_id_key') + ) + # ### end Alembic commands ### diff --git a/api/app/domain/models/__init__.py b/api/app/domain/models/__init__.py index 33337d0..bd91ef6 100644 --- a/api/app/domain/models/__init__.py +++ b/api/app/domain/models/__init__.py @@ -15,6 +15,5 @@ from app.domain.models.patients import Patient from app.domain.models.recipients import Recipient from app.domain.models.roles import Role from app.domain.models.set_contents import SetContent -from app.domain.models.set_lens import SetLens from app.domain.models.sets import Set from app.domain.models.users import User diff --git a/api/app/domain/models/lens.py b/api/app/domain/models/lens.py index 1dd5467..6c311fc 100644 --- a/api/app/domain/models/lens.py +++ b/api/app/domain/models/lens.py @@ -28,5 +28,4 @@ class Lens(BaseModel): type = relationship('LensType', back_populates='lenses') - set = relationship('SetLens', back_populates='lens') lens_issues = relationship('LensIssue', back_populates='lens') diff --git a/api/app/domain/models/set_lens.py b/api/app/domain/models/set_lens.py deleted file mode 100644 index 7efdc9b..0000000 --- a/api/app/domain/models/set_lens.py +++ /dev/null @@ -1,14 +0,0 @@ -from sqlalchemy import Column, Integer, ForeignKey -from sqlalchemy.orm import relationship - -from app.domain.models.base import BaseModel - - -class SetLens(BaseModel): - __tablename__ = 'set_lens' - - set_id = Column(Integer, ForeignKey('sets.id'), nullable=False) - lens_id = Column(Integer, ForeignKey('lens.id'), nullable=False, unique=True) - - set = relationship('Set', back_populates='lens') - lens = relationship('Lens', back_populates='set') diff --git a/api/app/domain/models/sets.py b/api/app/domain/models/sets.py index ac7bf14..859959e 100644 --- a/api/app/domain/models/sets.py +++ b/api/app/domain/models/sets.py @@ -10,4 +10,3 @@ class Set(BaseModel): title = Column(VARCHAR(150), nullable=False, unique=True) contents = relationship('SetContent', back_populates='set') - lens = relationship('SetLens', back_populates='set') diff --git a/api/app/infrastructure/sets_service.py b/api/app/infrastructure/sets_service.py index 5994f60..c49a523 100644 --- a/api/app/infrastructure/sets_service.py +++ b/api/app/infrastructure/sets_service.py @@ -4,16 +4,19 @@ from fastapi import HTTPException from sqlalchemy.ext.asyncio import AsyncSession from starlette import status +from app.application.lenses_repository import LensesRepository from app.application.set_content_repository import SetContentRepository from app.application.sets_repository import SetsRepository +from app.domain.entities.lens import LensEntity from app.domain.entities.set import SetEntity -from app.domain.models import Set +from app.domain.models import Set, Lens class SetsService: def __init__(self, db: AsyncSession): self.sets_repository = SetsRepository(db) self.set_content_repository = SetContentRepository(db) + self.lenses_repository = LensesRepository(db) async def get_all_sets(self) -> list[SetEntity]: sets = await self.sets_repository.get_all() @@ -68,6 +71,45 @@ class SetsService: title=result.title, ) + async def append_set_content_to_lenses(self, set_id: int) -> Optional[list[LensEntity]]: + _set = await self.sets_repository.get_by_id(set_id) + + if not _set: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Set not found") + + set_content = await self.set_content_repository.get_by_set_id(set_id) + + lenses = [] + for content in set_content: + lens = Lens( + tor=content.tor, + trial=content.trial, + esa=content.esa, + fvc=content.fvc, + preset_refraction=content.preset_refraction, + diameter=content.diameter, + periphery_toricity=content.periphery_toricity, + side=content.side, + type_id=content.type_id, + ) + await self.lenses_repository.create(lens) + lenses.append( + LensEntity( + id=lens.id, + tor=lens.tor, + trial=lens.trial, + esa=lens.esa, + fvc=lens.fvc, + preset_refraction=lens.preset_refraction, + diameter=lens.diameter, + periphery_toricity=lens.periphery_toricity, + side=lens.side.value, + type_id=lens.type_id, + ) + ) + + return lenses + @staticmethod def model_to_entity(_set: Set) -> SetEntity: return SetEntity(