diff --git a/backend/db/crud.py b/backend/db/crud.py index 77f677b9b3d1d48e545e484b5753f84df1ef1cf2..47ae8baaa0976e23045b836ce7a47221c5cb7e40 100644 --- a/backend/db/crud.py +++ b/backend/db/crud.py @@ -86,7 +86,7 @@ def get_avg_graph_points(place: str, weekday: int, min_time: time, max_time: tim def add_slot(slots_list, start_time, end_time): average_waiting_time = avg_time_query(start_time, end_time) if average_waiting_time: - name = f'{start_time.hour:02}h{start_time.minute:02}' + name = 60 * start_time.hour + start_time.minute slots_list.append({'name': name, 'time': average_waiting_time}) stats = [] @@ -105,11 +105,11 @@ def get_avg_graph(place: str, db: Session): weekday, current_time = current_date.weekday(), current_date.time() first_timeslot = get_timeslot(place, weekday, True, db) if first_timeslot and current_time <= first_timeslot[1]: - return get_avg_graph_points(place, weekday, first_timeslot[0], first_timeslot[1], timedelta(minutes=5), db) + return get_avg_graph_points(place, weekday, first_timeslot[0], first_timeslot[1], timedelta(minutes=5), db), first_timeslot[0], first_timeslot[1] second_timeslot = get_timeslot(place, weekday, False, db) if second_timeslot and current_time <= second_timeslot[1]: - return get_avg_graph_points(place, weekday, second_timeslot[0], second_timeslot[1], timedelta(minutes=5), db) - return None + return get_avg_graph_points(place, weekday, second_timeslot[0], second_timeslot[1], timedelta(minutes=5), db), second_timeslot[0], second_timeslot[1] + return [], None, None def get_current_graph_points(place: str, current_date: date, min_time: time, max_time: time, interval: timedelta, db: Session): @@ -145,7 +145,7 @@ def get_current_graph_points(place: str, current_date: date, min_time: time, max def add_slot(slots_list, start_time, end_time): average_waiting_time = avg_time_query(start_time, end_time) if average_waiting_time: - name = f'{start_time.hour:02}h{start_time.minute:02}' + name = 60 * start_time.hour + start_time.minute slots_list.append({'name': name, 'time': average_waiting_time}) stats = [] @@ -163,15 +163,21 @@ def get_current_graph(place: str, db: Session): weekday, day, current_time = current_date.weekday(), current_date.date(), current_date.time() first_timeslot = get_timeslot(place, weekday, True, db) if first_timeslot and current_time <= first_timeslot[0]: - return [] + return [], None, None elif first_timeslot and current_time <= first_timeslot[1]: - return get_current_graph_points(place, day, first_timeslot[0], current_time, timedelta(minutes=5), db) + points = get_current_graph_points(place, day, first_timeslot[0], current_time, timedelta(minutes=5), db) + start_time = 60 * first_timeslot[0].hour + first_timeslot[0].minute + end_time = 60 * first_timeslot[1].hour + first_timeslot[1].minute + return points, start_time, end_time second_timeslot = get_timeslot(place, weekday, False, db) if second_timeslot and current_time <= second_timeslot[0]: - return [] + return [], None, None elif second_timeslot and current_time <= second_timeslot[1]: - return get_current_graph_points(place, day, second_timeslot[0], current_time, timedelta(minutes=5), db) - return [] + points = get_current_graph_points(place, day, second_timeslot[0], current_time, timedelta(minutes=5), db), second_timeslot[0], second_timeslot[1] + start_time = 60 * second_timeslot[0].hour + second_timeslot[0].minute + end_time = 60 * second_timeslot[1].hour + second_timeslot[1].minute + return points, start_time, end_time + return [], None, None # Define CRUD operation for the comments diff --git a/backend/routers/opening_hours.py b/backend/routers/opening_hours.py deleted file mode 100644 index af8ab0755dcfacde671b9c04d7f007844bad12be..0000000000000000000000000000000000000000 --- a/backend/routers/opening_hours.py +++ /dev/null @@ -1,29 +0,0 @@ -from fastapi import APIRouter, Depends -from sqlalchemy.orm import Session -from typing import List - -from db import schemas, crud -from db.database import get_db - - -router = APIRouter(prefix="/api", tags=["opening_hours"]) - - -@router.get('/{place}/opening_hours', response_model=List[schemas.OpeningHours]) -async def get_opening_hours(place: str, db: Session = Depends(get_db)): - return crud.get_opening_hours(place, db) - - -@router.get('/{place}/opening_hours/{day}/{timeslot}', response_model=List[schemas.OpeningHours]) -async def get_timeslot(place: str, day: int, timeslot: bool, db: Session = Depends(get_db)): - return crud.get_timeslot(place, day, timeslot, db) - - -@router.post('/opening_hours', response_model=schemas.OpeningHours) -async def create_opening_hours(opening_hours: schemas.OpeningHoursBase, db: Session = Depends(get_db)): - return crud.create_opening_hours(opening_hours, db) - - -@router.delete('/opening_hours/{id}', response_model=None) -async def delete_opening_hours(id: int, db: Session = Depends(get_db)): - return crud.delete_opening_hours(id, db) diff --git a/backend/routers/stats.py b/backend/routers/stats.py index f1790284de0a5a738fbd47ec5d6de23366d58072..d03ec12798a975d364c4b8b5cb651ab9580dfbbb 100644 --- a/backend/routers/stats.py +++ b/backend/routers/stats.py @@ -1,6 +1,6 @@ from fastapi import APIRouter, Depends from sqlalchemy.orm import Session -from typing import List +from typing import List, Tuple from db import schemas, crud from db.database import get_db @@ -14,12 +14,12 @@ async def waiting_time(place: str, db: Session = Depends(get_db)): return crud.get_waiting_time(place, db) -@router.get('/{place}/stats/avg_graph', response_model=list) +@router.get('/{place}/stats/avg_graph', response_model=Tuple[list, int, int]) async def stats(place: str, db: Session = Depends(get_db)): return crud.get_avg_graph(place, db) -@router.get('/{place}/stats/current_graph', response_model=list) +@router.get('/{place}/stats/current_graph', response_model=Tuple[list, int, int]) async def stats(place: str, db: Session = Depends(get_db)): return crud.get_current_graph(place, db) diff --git a/frontend/src/components/Graph.js b/frontend/src/components/Graph.js index 0af7be0048b053eefe45461f386731b5c323bb60..8b7782c29e14aad05696a645be665ed9fdc9d8b4 100644 --- a/frontend/src/components/Graph.js +++ b/frontend/src/components/Graph.js @@ -23,6 +23,10 @@ const CustomTooltip = ({ active, payload }) => { ); }; +function formatXAxis(value) { + return Math.floor(value / 60).toString() + "h" + (value % 60).toString().padStart(2, "0"); +} + export default function Graph({ place, type }) { const [data, setData] = React.useState([]); @@ -34,9 +38,10 @@ export default function Graph({ place, type }) { )}/stats/${encodeURIComponent(type)}_graph`, ) .then((response) => { - setData(response.data); + setData(response.data[0]); }); }, []); + console.log(data[0]); return ( <> @@ -55,7 +60,7 @@ export default function Graph({ place, type }) { > <defs> <linearGradient id="colorGradient" x1="0" y1="0" x2="0" y2="1"> - <stop offset="${2 * temp}%" stopColor="#ff0000" stopOpacity={0.55} /> + <stop offset="10%" stopColor="#ff0000" stopOpacity={0.55} /> <stop offset="50%" stopColor="#fff200" stopOpacity={0.5} /> <stop offset="90%" stopColor="#1e9600" stopOpacity={0.35} /> </linearGradient> @@ -66,15 +71,20 @@ export default function Graph({ place, type }) { tickLine={false} tick={{ fill: "#FFFFFF", fontSize: "18" }} dataKey="name" + type="number" + domain={[840, 1020]} + tickFormatter={formatXAxis} /> <YAxis axisLine={false} tickLine={false} tick={{ fill: "#FFFFFF", fontSize: "18" }} - tickInt + /*tickInt*/ tickCount={10} dataKey="time" - domain={[0, (dataMax) => 10 * Math.floor((dataMax + 10) / 10)]} + type="number" + domain={[0, 50]} + /*domain={[0, (dataMax) => 10 * Math.floor((dataMax + 10) / 10)]}*/ allowDecimals={false} name="Temps d'attente" /> diff --git a/frontend/src/components/gradient.js b/frontend/src/components/gradient.js deleted file mode 100644 index 62dce115a56f1595e35148a307e7256f09f00988..0000000000000000000000000000000000000000 --- a/frontend/src/components/gradient.js +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react"; - -export default function gradient() { - return ( - <defs> - <linearGradient id="colorGradient" x1="0" y1="0" x2="0" y2="1"> - <stop offset="10%" stopColor="#ff0000" stopOpacity={0.55} /> - <stop offset="50%" stopColor="#fff200" stopOpacity={0.55} /> - <stop offset="90%" stopColor="#1e9600" stopOpacity={0.55} /> - </linearGradient> - </defs> - ); -}