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