# -*- coding: utf-8 -*- from typing import Optional from fastapi import APIRouter, Depends, HTTPException, Query from loguru import logger from sqlalchemy.orm import Session from app.api.dependencies.db import get_db from app.controllers.targets.temperature import ( temperature_target_control_v1, temperature_target_control_v2, get_target_after_feedback ) from app.models.domain.feedback import FeedbackValue from app.models.domain.targets import TargetReadjustResponse, RegulatedTargetResponse from app.utils.date import get_time_str router = APIRouter() @router.get('/adjust', response_model=TargetReadjustResponse) async def readjust_target( project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'), space_id: str = Query(..., max_length=50, regex='^Sp', alias='roomId'), timestamp: Optional[str] = Query(None, min_length=14, max_length=14, alias='time'), feedback: Optional[FeedbackValue] = Query(None, alias='itemId'), db: Session = Depends(get_db) ): if not timestamp: timestamp = get_time_str() try: if feedback != FeedbackValue.null: if project_id == 'Pj1101050030': need_run_room_control = await temperature_target_control_v1(project_id, space_id, feedback, db) else: need_run_room_control = await temperature_target_control_v2(project_id, space_id, feedback) else: need_run_room_control = True except Exception as e: logger.error(e) raise HTTPException( status_code=500, detail='Oops, something wrong has happened' ) response = { 'projectId': project_id, 'roomId': space_id, 'flag': 1 if need_run_room_control else 0, 'time': timestamp, } return response @router.get('/adjust/v2', response_model=TargetReadjustResponse) async def readjust_target_v2( project_id: str = Query(..., max_length=50, regex='^Pj', alias='project-id'), space_id: str = Query(..., max_length=50, regex='^Sp', alias='space-id'), feedback: Optional[FeedbackValue] = Query(None) ): if feedback != FeedbackValue.null: try: need_run_room_control = await temperature_target_control_v2(project_id, space_id, feedback) except Exception as e: logger.error(e) raise HTTPException( status_code=500, detail='Oops, something wrong has happened!' ) else: need_run_room_control = True response = { 'projectId': project_id, 'roomId': space_id, 'flag': 1 if need_run_room_control else 0, 'time': get_time_str() } return response @router.get('/regulated/value', response_model=RegulatedTargetResponse) async def read_regulated_value( project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'), space_id: str = Query(..., max_length=50, regex='^Sp', alias='spaceId'), feedback: Optional[FeedbackValue] = Query(None) ): new_actual_target = await get_target_after_feedback(project_id, space_id, feedback) response = { 'projectId': project_id, 'spaceId': space_id, 'isTemporary': False, 'temperature': { 'min': new_actual_target, 'max': new_actual_target } } return response