сделал добавление линз из набора
This commit is contained in:
parent
63b472fdb6
commit
44d1dbb745
@ -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,
|
||||
|
||||
@ -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 ###
|
||||
@ -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
|
||||
|
||||
@ -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')
|
||||
|
||||
@ -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')
|
||||
@ -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')
|
||||
|
||||
@ -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(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user