add user control in simulation

main
Cizz22 3 months ago
parent cf04fa41c2
commit 4c6da12a9d

@ -16,11 +16,18 @@ router = APIRouter()
@router.post("", response_model=StandardResponse[None]) @router.post("", response_model=StandardResponse[None])
async def import_aro( async def import_aro(
db_session: DbSession, db_session: DbSession,
current_user: CurrentUser,
schematic_name: str = Form(...), schematic_name: str = Form(...),
aro_file: UploadFile = File(..., description="ARO file"), aro_file: UploadFile = File(..., description="ARO file"),
project_name: str = "trialapi" project_name: str = "trialapi"
): ):
if current_user.role.lower() != "admin":
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Admin access required to modify Aeros files."
)
# Create the input object manually # Create the input object manually
aeros_project_input = AerosProjectInput(schematic_name=schematic_name, aro_file=aro_file) aeros_project_input = AerosProjectInput(schematic_name=schematic_name, aro_file=aro_file)

@ -19,6 +19,7 @@ class AerosSimulation(Base, DefaultMixin):
duration = Column(Integer, nullable=True) duration = Column(Integer, nullable=True)
offset = Column(Integer, nullable=True) offset = Column(Integer, nullable=True)
is_default = Column(Boolean, default=False) is_default = Column(Boolean, default=False)
created_by = Column(UUID(as_uuid=True), nullable=True)
calc_results = relationship( calc_results = relationship(
"AerosSimulationCalcResult", back_populates="aeros_simulation", lazy="raise" "AerosSimulationCalcResult", back_populates="aeros_simulation", lazy="raise"

@ -50,10 +50,10 @@ active_simulations = {}
@router.get("", response_model=StandardResponse[SimulationPagination]) @router.get("", response_model=StandardResponse[SimulationPagination])
async def get_all_simulation(db_session: DbSession, common: CommonParameters, status: Optional[str] = Query(None)): async def get_all_simulation(db_session: DbSession, current_user:CurrentUser,common: CommonParameters, status: Optional[str] = Query(None)):
"""Get all simulation.""" """Get all simulation."""
results = await get_all(common, status) results = await get_all(common, status, current_user)
return { return {
"data": results, "data": results,
@ -76,14 +76,14 @@ async def get_simulation(db_session: DbSession, simulation_id):
async def run_simulations( async def run_simulations(
db_session: DbSession, db_session: DbSession,
simulation_in: SimulationInput, simulation_in: SimulationInput,
background_tasks: BackgroundTasks current_user:CurrentUser
): ):
"""RUN Simulation""" """RUN Simulation"""
temporal_client = await Client.connect(TEMPORAL_URL) temporal_client = await Client.connect(TEMPORAL_URL)
simulation = await create_simulation( simulation = await create_simulation(
db_session=db_session, simulation_in=simulation_in db_session=db_session, simulation_in=simulation_in, current_user=current_user
) )
simulation_id = simulation.id simulation_id = simulation.id

@ -37,10 +37,13 @@ active_simulations = {}
# Get Data Service # Get Data Service
async def get_all(common: CommonParameters, status): async def get_all(common: CommonParameters, status, current_user):
query = select(AerosSimulation).order_by(desc(AerosSimulation.created_at)) query = select(AerosSimulation).order_by(desc(AerosSimulation.created_at))
if status: if status:
query = query.where(AerosSimulation.status == "completed") query = query.where(AerosSimulation.status == "completed")
if current_user.role.lower() != "admin":
query = query.where(AerosSimulation.created_by == current_user.user_id)
results = await search_filter_sort_paginate(model=query, **common) results = await search_filter_sort_paginate(model=query, **common)
@ -225,7 +228,7 @@ async def get_result_ranking(*, db_session: DbSession, simulation_id: UUID, limi
) )
) )
query = query.order_by(AerosSimulationCalcResult.availability.desc()) query = query.order_by(AerosSimulationCalcResult.availability.asc())
if limit: if limit:
query = query.limit(limit) query = query.limit(limit)
@ -987,9 +990,10 @@ def convert_id_to_none_if_negative(value):
return None if value < 0 else value return None if value < 0 else value
async def create_simulation(*, db_session: DbSession, simulation_in: SimulationInput): async def create_simulation(*, db_session: DbSession, simulation_in: SimulationInput, current_user):
"""Create a new simulation.""" """Create a new simulation."""
input = simulation_in.model_dump(exclude={"SimulationName"}) input = simulation_in.model_dump(exclude={"SimulationName"})
user_id = current_user.get("user_id")
# Check if is default # Check if is default
if simulation_in.IsDefault: if simulation_in.IsDefault:
@ -1005,7 +1009,8 @@ async def create_simulation(*, db_session: DbSession, simulation_in: SimulationI
"schematic_name": "- TJB - Unit 3 -", "schematic_name": "- TJB - Unit 3 -",
"is_default": simulation_in.IsDefault, "is_default": simulation_in.IsDefault,
"duration": simulation_in.SimDuration, "duration": simulation_in.SimDuration,
"offset": simulation_in.OffSet "offset": simulation_in.OffSet,
"created_by": user_id
} }
simulation = AerosSimulation(**active_simulations) simulation = AerosSimulation(**active_simulations)

Loading…
Cancel
Save