get_turbines_by_park_id route fix
This commit is contained in:
parent
6e87595e2f
commit
4d40a2cacb
@ -4,7 +4,8 @@ from sqlalchemy import select
|
|||||||
|
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from .models import WindTurbineType, WindPark, WindParkTurbine
|
from .models import WindTurbineType, WindPark, WindParkTurbine
|
||||||
from .schemas import WindTurbineTypeCreate, WindParkCreate, WindParkTurbineCreate, WindParkResponse, WindTurbineResponse
|
from .schemas import WindTurbineTypeCreate, WindParkCreate, WindParkTurbineCreate, WindParkResponse, \
|
||||||
|
WindTurbineResponse, WindParkTurbineResponse, WindTurbineWithParkDetailsResponse
|
||||||
from data.database import SessionLocal
|
from data.database import SessionLocal
|
||||||
from data.models import Weather
|
from data.models import Weather
|
||||||
from data.schemas import SWeatherInfo
|
from data.schemas import SWeatherInfo
|
||||||
@ -109,9 +110,19 @@ class WindParkRepository:
|
|||||||
return db.query(WindPark).all()
|
return db.query(WindPark).all()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_turbines_by_park_id(park_id: int, db: Session) -> list[WindTurbineResponse]:
|
def get_turbines_by_park_id(park_id: int, db: Session) -> list[WindTurbineWithParkDetailsResponse]:
|
||||||
turbines = (
|
turbines = (
|
||||||
db.query(WindParkTurbine)
|
db.query(
|
||||||
|
WindTurbineType.Id.label("Id"),
|
||||||
|
WindTurbineType.Name.label("Name"),
|
||||||
|
WindTurbineType.Height.label("Height"),
|
||||||
|
WindTurbineType.BladeLength.label("BladeLength"),
|
||||||
|
WindParkTurbine.x_offset.label("x_offset"),
|
||||||
|
WindParkTurbine.y_offset.label("y_offset"),
|
||||||
|
WindParkTurbine.angle.label("angle"),
|
||||||
|
WindParkTurbine.comment.label("comment"),
|
||||||
|
)
|
||||||
|
.join(WindParkTurbine, WindTurbineType.Id == WindParkTurbine.turbine_id)
|
||||||
.filter(WindParkTurbine.wind_park_id == park_id)
|
.filter(WindParkTurbine.wind_park_id == park_id)
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
@ -119,10 +130,7 @@ class WindParkRepository:
|
|||||||
if not turbines:
|
if not turbines:
|
||||||
return [] # Возвращаем пустой список, если не найдено
|
return [] # Возвращаем пустой список, если не найдено
|
||||||
|
|
||||||
turbine_ids = [turbine.turbine_id for turbine in turbines]
|
return [WindTurbineWithParkDetailsResponse(**turbine._asdict()) for turbine in turbines]
|
||||||
turbine_details = db.query(WindTurbineType).filter(WindTurbineType.Id.in_(turbine_ids)).all()
|
|
||||||
|
|
||||||
return turbine_details
|
|
||||||
|
|
||||||
|
|
||||||
class WindParkTurbineRepository:
|
class WindParkTurbineRepository:
|
||||||
|
@ -96,3 +96,16 @@ class WindTurbineResponse(BaseModel):
|
|||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
|
class WindTurbineWithParkDetailsResponse(BaseModel):
|
||||||
|
Id: int
|
||||||
|
Name: str
|
||||||
|
Height: float
|
||||||
|
BladeLength: float
|
||||||
|
x_offset: int
|
||||||
|
y_offset: int
|
||||||
|
angle: Optional[int]
|
||||||
|
comment: Optional[str]
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
@ -2,7 +2,7 @@ from fastapi import APIRouter, HTTPException, Depends
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from data.schemas import WindTurbineTypeCreate, WindTurbineTypeResponse, WindParkCreate, WindParkResponse, \
|
from data.schemas import WindTurbineTypeCreate, WindTurbineTypeResponse, WindParkCreate, WindParkResponse, \
|
||||||
WindParkTurbineCreate, WindParkTurbineResponse, WindTurbineResponse
|
WindParkTurbineCreate, WindParkTurbineResponse, WindTurbineResponse, WindTurbineWithParkDetailsResponse
|
||||||
from data.database import get_db
|
from data.database import get_db
|
||||||
from data.repository import WindTurbineTypeRepository, WindParkRepository, WindParkTurbineRepository
|
from data.repository import WindTurbineTypeRepository, WindParkRepository, WindParkTurbineRepository
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ async def get_all_parks(db: Session = Depends(get_db)):
|
|||||||
return WindParkRepository.get_all_parks(db)
|
return WindParkRepository.get_all_parks(db)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/parks/{park_id}/turbines/", response_model=list[WindTurbineResponse])
|
@router.get("/parks/{park_id}/turbines/", response_model=list[WindTurbineWithParkDetailsResponse])
|
||||||
async def get_turbines_by_park_id(park_id: int, db: Session = Depends(get_db)):
|
async def get_turbines_by_park_id(park_id: int, db: Session = Depends(get_db)):
|
||||||
"""Получить все турбины в ветропарке по ID"""
|
"""Получить все турбины в ветропарке по ID"""
|
||||||
turbines = WindParkRepository.get_turbines_by_park_id(park_id, db)
|
turbines = WindParkRepository.get_turbines_by_park_id(park_id, db)
|
||||||
|
Loading…
Reference in New Issue
Block a user