From 150ccb5ca5f1343c4efd99e7886cb553dbe6e072 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Mod=C3=A9e?= <bjomo323@student.liu.se>
Date: Fri, 30 Apr 2021 16:17:10 +0000
Subject: [PATCH] Resolve "Scoreboard in operator view"

---
 client/package-lock.json                            |  3 +--
 .../pages/admin/competitions/CompetitionManager.tsx |  5 ++---
 client/src/pages/views/OperatorViewPage.tsx         | 13 +++++++++++--
 server/app/database/controller/add.py               |  5 ++---
 server/app/database/models.py                       |  7 +++----
 server/populate.py                                  | 12 ++++++++++--
 server/tests/test_helpers.py                        |  4 ++--
 7 files changed, 31 insertions(+), 18 deletions(-)

diff --git a/client/package-lock.json b/client/package-lock.json
index 2655ad2e..72fcea71 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -17285,8 +17285,7 @@
         },
         "ssri": {
           "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
-          "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+          "resolved": "",
           "requires": {
             "figgy-pudding": "^3.5.1"
           }
diff --git a/client/src/pages/admin/competitions/CompetitionManager.tsx b/client/src/pages/admin/competitions/CompetitionManager.tsx
index b6af3279..affd5c26 100644
--- a/client/src/pages/admin/competitions/CompetitionManager.tsx
+++ b/client/src/pages/admin/competitions/CompetitionManager.tsx
@@ -142,7 +142,6 @@ const CompetitionManager: React.FC = (props: any) => {
     await axios
       .get(`/api/competitions/${id}/codes`)
       .then((response) => {
-        console.log(response.data)
         setCodes(response.data.items)
       })
       .catch(console.log)
@@ -152,7 +151,7 @@ const CompetitionManager: React.FC = (props: any) => {
     await axios
       .get(`/api/competitions/${id}/teams`)
       .then((response) => {
-        console.log(response.data.items)
+        // console.log(response.data.items)
         setTeams(response.data.items)
       })
       .catch((err) => {
@@ -164,7 +163,7 @@ const CompetitionManager: React.FC = (props: any) => {
     await axios
       .get(`/api/competitions/${activeId}`)
       .then((response) => {
-        console.log(response.data.name)
+        // console.log(response.data.name)
         setCompetitionName(response.data.name)
       })
       .catch((err) => {
diff --git a/client/src/pages/views/OperatorViewPage.tsx b/client/src/pages/views/OperatorViewPage.tsx
index 5b75d2d2..fd3dd05b 100644
--- a/client/src/pages/views/OperatorViewPage.tsx
+++ b/client/src/pages/views/OperatorViewPage.tsx
@@ -59,7 +59,6 @@ import {
  *  TODO:
  *  - Instead of copying code for others to join the competition, copy URL.
  *
- *  - Make code popup less code by using .map instead
  *
  *  - Fix scoreboard
  *
@@ -205,6 +204,16 @@ const OperatorViewPage: React.FC = () => {
     return typeName
   }
 
+  const addScore = (id: number) => {
+    // Sums the scores for the teams. id must be id-1 because it starts at 1
+    
+    let totalScore = 0
+    for (let j = 0; j < teams[id - 1].question_answers.length; j++) {
+      totalScore = totalScore + teams[id - 1].question_answers[j].score
+    }
+    return totalScore
+  }
+
   return (
     <OperatorContainer>
       <Dialog
@@ -364,7 +373,7 @@ const OperatorViewPage: React.FC = () => {
           {teams &&
             teams.map((team) => (
               <ListItem key={team.id}>
-                {team.name} score: {'666'}
+                {team.name} score:{addScore(team.id)}
               </ListItem>
             ))}
         </List>
diff --git a/server/app/database/controller/add.py b/server/app/database/controller/add.py
index 5f9aec28..3aa0ab70 100644
--- a/server/app/database/controller/add.py
+++ b/server/app/database/controller/add.py
@@ -29,13 +29,12 @@ from app.database.models import (
     ViewType,
     Whitelist,
 )
+from app.database.types import ID_IMAGE_COMPONENT, ID_QUESTION_COMPONENT, ID_TEXT_COMPONENT
+from flask import current_app
 from flask.globals import current_app
 from flask_restx import abort
 from PIL import Image
 from sqlalchemy import exc
-from flask import current_app
-
-from app.database.types import ID_IMAGE_COMPONENT, ID_QUESTION_COMPONENT, ID_TEXT_COMPONENT
 
 
 def db_add(item):
diff --git a/server/app/database/models.py b/server/app/database/models.py
index a59335d9..a54a77c2 100644
--- a/server/app/database/models.py
+++ b/server/app/database/models.py
@@ -5,9 +5,8 @@ each other.
 """
 
 from app.core import bcrypt, db
-from sqlalchemy.ext.hybrid import hybrid_method, hybrid_property
-
 from app.database.types import ID_IMAGE_COMPONENT, ID_QUESTION_COMPONENT, ID_TEXT_COMPONENT
+from sqlalchemy.ext.hybrid import hybrid_method, hybrid_property
 
 STRING_SIZE = 254
 
@@ -201,8 +200,8 @@ class QuestionAnswer(db.Model):
     question_id = db.Column(db.Integer, db.ForeignKey("question.id"), nullable=False)
     team_id = db.Column(db.Integer, db.ForeignKey("team.id"), nullable=False)
 
-    def __init__(self, data, score, question_id, team_id):
-        self.data = data
+    def __init__(self, answer, score, question_id, team_id):
+        self.answer = answer
         self.score = score
         self.question_id = question_id
         self.team_id = team_id
diff --git a/server/populate.py b/server/populate.py
index 92183b6c..34f73822 100644
--- a/server/populate.py
+++ b/server/populate.py
@@ -43,8 +43,8 @@ def _add_items():
     city_id = City.query.filter(City.name == "Linköping").one().id
 
     # Add users
-    dbc.add.user("admin@test.se", "password", admin_id, city_id)
-    dbc.add.user("test@test.se", "password", editor_id, city_id)
+    dbc.add.user("admin@test.se", "password", admin_id, city_id, "Admina Denfina")
+    dbc.add.user("test@test.se", "password", editor_id, city_id, "Test Osteron")
 
     question_types_items = dbc.get.all(QuestionType)
 
@@ -105,6 +105,14 @@ def _add_items():
         for name in teams:
             dbc.add.team(f"{name}{i}", item_comp.id)
 
+    # question_answer(answer, score, question_id, team_id)
+    dbc.add.question_answer("ett svar som ger 2p", 2, 1, 1)
+    dbc.add.question_answer("ett svar som ger 10p", 10, 2, 1)
+    dbc.add.question_answer("ett svar som ger 6p", 6, 3, 1)
+
+    dbc.add.question_answer("ett svar som ger 2p", 2, 1, 2)
+    dbc.add.question_answer("ett svar som ger 3p", 3, 1, 3)
+
 
 if __name__ == "__main__":
     app, _ = create_app("configmodule.DevelopmentConfig")
diff --git a/server/tests/test_helpers.py b/server/tests/test_helpers.py
index f55aa682..85c1f114 100644
--- a/server/tests/test_helpers.py
+++ b/server/tests/test_helpers.py
@@ -49,8 +49,8 @@ def add_default_values():
     db.session.add(Code("111111", 1, item_competition.id, item_team1.id))  # Team
     db.session.add(Code("222222", 2, item_competition.id))  # Judge
 
-    dbc.add.QuestionAnswer("hej", 5, item_question.id, item_team1)
-    dbc.add.QuestionAnswer("då", 5, item_question.id, item_team2)
+    dbc.add.question_answer("hej", 5, item_question.id, item_team1.id)
+    dbc.add.question_answer("då", 5, item_question.id, item_team2.id)
 
     db.session.commit()
 
-- 
GitLab