Skip to content
Snippets Groups Projects
Commit 3770b25c authored by Aymeric Chaumont's avatar Aymeric Chaumont
Browse files

WIP graph rework

parent 45fc6f81
No related branches found
No related tags found
1 merge request!38graph rework
Pipeline #44022 passed with warnings
......@@ -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
......
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)
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)
......
......@@ -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"
/>
......
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>
);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment