From 4abc00191b7af565204f85a0f0468fb42c23b2ac Mon Sep 17 00:00:00 2001 From: Antoine Gaudron-desjardins <antoine.gaudrondesjardins@student-cs.fr> Date: Wed, 20 Jul 2022 12:02:58 +0200 Subject: [PATCH] improve data collection --- backend/db/crud.py | 7 ++++- backend/db/models.py | 2 +- backend/db/schemas.py | 2 +- backend/routers/records.py | 10 ++++++ frontend/src/styles/restaurant.css | 32 +++---------------- frontend/src/views/Restaurant.js | 50 +++++++++++++++++++++--------- 6 files changed, 58 insertions(+), 45 deletions(-) diff --git a/backend/db/crud.py b/backend/db/crud.py index 1209dcc..1431bf2 100644 --- a/backend/db/crud.py +++ b/backend/db/crud.py @@ -428,7 +428,6 @@ def update_collaborative_record(user: schemas.User, db: Session): if last_record.date >= datetime.combine(date, time_slot.open_time) and not last_record.waiting_time: last_record.waiting_time = current_date - \ pytz.timezone("Europe/Paris").localize(last_record.date) - print(last_record.waiting_time) db.add(last_record) db.commit() db.refresh(last_record) @@ -437,6 +436,12 @@ def update_collaborative_record(user: schemas.User, db: Session): raise HTTPException(status_code=406, detail="Client already registered") +def cancel_collaborative_record(user_id: int, db: Session): + db.query(models.CollaborativeRecords).filter(models.CollaborativeRecords.user_id == user_id).delete() + db.commit() + return + + def delete_collaborative_record(id: int, db: Session): if id == 0: db.query(models.CollaborativeRecords).delete() diff --git a/backend/db/models.py b/backend/db/models.py index c65788d..cb8d31e 100644 --- a/backend/db/models.py +++ b/backend/db/models.py @@ -12,7 +12,7 @@ class CollaborativeRecords(Base): __tablename__ = "collection" id = Column(Integer, primary_key=True, index=True) - user_id = Column(Integer, ForeignKey("users.id")) + user_id = Column(Integer, ForeignKey("users.id", ondelete='SET NULL')) place = Column(String(30)) date = Column(DateTime) waiting_time = Column(Interval) diff --git a/backend/db/schemas.py b/backend/db/schemas.py index ac8fd09..7eaa3d4 100644 --- a/backend/db/schemas.py +++ b/backend/db/schemas.py @@ -33,7 +33,7 @@ class RecordRead(BaseModel): class CollaborativeRecords(BaseModel): """CollaborativeRecords schema""" - user_id: int = Field(..., title="Id of the user timed") + user_id: Optional[int] = Field(default=None, title="Id of the user timed") place: str = Field(..., title="Name of the RU corresponding the given record") date: datetime = Field(..., title="Date of the record") waiting_time: Optional[timedelta] = Field(default=None, title="Caculated waiting time for timed person") diff --git a/backend/routers/records.py b/backend/routers/records.py index f6f603a..04e4444 100644 --- a/backend/routers/records.py +++ b/backend/routers/records.py @@ -54,6 +54,16 @@ async def end_new_record(response: Response, connect_id: str = Cookie(...), db: return db_record +@router.post("/collection/cancel", response_model=None, tags=["data collection"]) +async def cancel_new_record(response: Response, connect_id: str = Cookie(...), db: Session = Depends(get_db)): + user = crud.get_user(connect_id, db) + db_record = crud.cancel_collaborative_record(user.id, db) + if not user.username: + crud.delete_user(user.cookie, db) + response.delete_cookie(key="connect_id") + return db_record + + @router.delete('/collection', response_model=None, tags=["data collection"]) async def delete_record(id: int, db: Session = Depends(get_db)): return crud.delete_collaborative_record(id, db) diff --git a/frontend/src/styles/restaurant.css b/frontend/src/styles/restaurant.css index 6398357..45fe9e8 100644 --- a/frontend/src/styles/restaurant.css +++ b/frontend/src/styles/restaurant.css @@ -12,43 +12,19 @@ overflow: hidden; } -#restaurant-start-button { - width: fit-content; - border: none; - border-radius: 5px; - padding: 0.1rem; - padding-left: 0.3rem; - padding-right: 0.3rem; - margin-top: 2rem; -} - -.restaurant-button-disabled { - background-color: rgb(66, 75, 83); - color: #b9b9b9; -} - -.restaurant-button-active { +.restaurant-button { background-color: rgb(33, 37, 41); color: white; -} - -.restaurant-button-active:hover { - box-shadow: 0px 0px 5px white; -} - -#restaurant-end-button { - width: fit-content; - background-color: #83000d; - color: white; + width: 7rem; border: none; border-radius: 5px; - padding: 0.1rem; + padding: 0.2rem; padding-left: 0.3rem; padding-right: 0.3rem; margin-top: 2rem; } -#restaurant-end-button:hover { +.restaurant-button:hover { box-shadow: 0px 0px 5px rgb(33, 37, 41); } diff --git a/frontend/src/views/Restaurant.js b/frontend/src/views/Restaurant.js index f411320..fa57018 100644 --- a/frontend/src/views/Restaurant.js +++ b/frontend/src/views/Restaurant.js @@ -12,7 +12,7 @@ import "../styles/restaurant.css"; export default function RestaurantPage({ selection, lastMessage }) { // const [started, setStarted] = useState(false); - // const [disabled, setDisabled] = useState(false); + // const [timed, setTimed] = useState(false); // const Start = () => { // instance @@ -21,7 +21,7 @@ export default function RestaurantPage({ selection, lastMessage }) { // setStarted(true); // }) // .catch((e) => { - // setDisabled(true); + // setTimed(true); // alert( // "Il semblerait que tu aies déjà renseigné un temps d'attente sur ce créneau. Merci de ta participation, n'hésite pas à te chronométrer de nouveau la prochaine fois !", // ); @@ -34,10 +34,10 @@ export default function RestaurantPage({ selection, lastMessage }) { // .post("collection/stop") // .then(() => { // setStarted(false); - // setDisabled(true); + // setTimed(true); // }) // .catch((e) => { - // setDisabled(true); + // setTimed(true); // alert( // "Il semblerait que tu aies déjà renseigné un temps d'attente sur ce créneau. Merci de ta participation, n'hésite pas à te chronométrer de nouveau la prochaine fois !", // ); @@ -45,6 +45,20 @@ export default function RestaurantPage({ selection, lastMessage }) { // }); // }; + // const Cancel = () => { + // instance + // .post("collection/cancel") + // .then(() => { + // setStarted(false); + // setTimed(false); + // }) + // .catch((e) => { + // setStarted(false); + // setTimed(false); + // console.log(e); + // }); + // }; + return ( <> {selection && ( @@ -52,18 +66,26 @@ export default function RestaurantPage({ selection, lastMessage }) { <Comments place={selection.name} lastMessage={lastMessage} infos /> <div className="restaurant-container" id="restaurant-main-page"> <WaitingTime place={selection.name} lastMessage={lastMessage} /> - <Graph place={selection.name} type="current" lastMessage={lastMessage} /> - {/* <button - id={`restaurant-${started ? "end" : "start"}-button`} - onClick={started ? End : Start} - className={disabled ? "restaurant-button-disabled" : "restaurant-button-active"} - disabled={disabled} - > - {started ? "Fini !!" : "Départ !!"} - </button> */} + <Graph place={selection.name} lastMessage={lastMessage} /> + {/* <div style={{ fontSize: "1.2rem", paddingLeft: "10%", paddingRight: "10%" }}> + {timed + ? "Merci de ta participation, n'hésite pas à te chronométrer de nouveau la prochaine fois !" + : "Aide nous à récupérer des données en te chronométrant dans la queue du self !"} + </div> + {!timed && ( + <> + <button onClick={started ? End : Start} className="restaurant-button"> + {started ? "Fini !" : "Démarrer !"} + </button> + {started && ( + <button onClick={Cancel} className="restaurant-button"> + Annuler + </button> + )} + </> + )} */} </div> <Comments place={selection.name} lastMessage={lastMessage} /> - {/*<Graph place={selection.name} type="avg" />*/} </div> )} </> -- GitLab