From c3554dad3cbec9bb188e0f0c4484414d078945ef Mon Sep 17 00:00:00 2001 From: sosokker Date: Mon, 13 May 2024 15:23:33 +0700 Subject: [PATCH] Add action query and endpoint --- StreamServer/src/models.py | 12 +++++------- StreamServer/src/query/action.py | 16 ++++++++++++++++ StreamServer/src/routers/action.py | 29 +++++++++++++++++++++++++++++ StreamServer/src/scheme.py | 11 +++-------- 4 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 StreamServer/src/query/action.py create mode 100644 StreamServer/src/routers/action.py diff --git a/StreamServer/src/models.py b/StreamServer/src/models.py index 4ba6044..ca5c248 100644 --- a/StreamServer/src/models.py +++ b/StreamServer/src/models.py @@ -36,11 +36,9 @@ class PredictionData(Base): indoor_temp = Column(Float) -# class ActionData(Base): -# __tablename__ = "action" +class ActionData(Base): + __tablename__ = "action" -# id = Column(Integer, primary_key=True) -# timestamp = Column(DateTime) -# action = Column(Text) -# probability = Column(Float) -# camera_id = Column(Integer) \ No newline at end of file + id = Column(Integer, primary_key=True) + timestamp = Column(DateTime) + action = Column(Text) \ No newline at end of file diff --git a/StreamServer/src/query/action.py b/StreamServer/src/query/action.py new file mode 100644 index 0000000..9fc7615 --- /dev/null +++ b/StreamServer/src/query/action.py @@ -0,0 +1,16 @@ +from sqlalchemy import func +from datetime import datetime, timedelta +from sqlalchemy.orm import Session + +from models import ActionData + + +def get_weekly_action_data(session: Session): + """ + Get the list of actions for the this week. + """ + date_7_days_ago = (datetime.now() - timedelta(days=7)).date() + + return session.query(ActionData).filter( + func.date(ActionData.timestamp) >= date_7_days_ago + ).all() \ No newline at end of file diff --git a/StreamServer/src/routers/action.py b/StreamServer/src/routers/action.py new file mode 100644 index 0000000..c8351a5 --- /dev/null +++ b/StreamServer/src/routers/action.py @@ -0,0 +1,29 @@ +from fastapi import APIRouter, HTTPException, Depends + +from sqlalchemy.orm import Session + +from scheme import ActionData +from query.action import get_weekly_action_data +from database import engine, SessionLocal, Base + + +Base.metadata.create_all(bind=engine) + +router = APIRouter() + +#Dependency +def get_db(): + db = SessionLocal() + try : + yield db + finally: + db.close() + + +@router.get("/week", response_model=list[ActionData]) +async def get_week_action(db: Session = Depends(get_db)): + """Return the list of ActionData for the this week.""" + action_data = get_weekly_action_data(db) + if not action_data: + raise HTTPException(status_code=404, detail="Action data for the last week not found") + return action_data \ No newline at end of file diff --git a/StreamServer/src/scheme.py b/StreamServer/src/scheme.py index 56705ef..97313af 100644 --- a/StreamServer/src/scheme.py +++ b/StreamServer/src/scheme.py @@ -88,11 +88,6 @@ class HealthData(BaseModel): outdoor_humidity: float -# class Action(BaseModel): -# timestamp: Optional[datetime] -# action: Optional[str] -# probability: Optional[float] -# camera_id: Optional[int] - -# class Config: -# from_attributes = True \ No newline at end of file +class ActionData(BaseModel): + timestamp: Optional[datetime] + action: Optional[str] \ No newline at end of file