From 5e037d5d5733672cc423343b0ec4556ecafb8d1f Mon Sep 17 00:00:00 2001
From: bmodee <bjomo323@student.liu.se>
Date: Fri, 30 Apr 2021 11:00:36 +0200
Subject: [PATCH 1/4] add question answer

---
 client/src/pages/views/OperatorViewPage.tsx | 2 +-
 server/app/database/controller/add.py       | 5 ++---
 server/app/database/models.py               | 7 +++----
 server/populate.py                          | 9 +++++++--
 server/tests/test_helpers.py                | 4 ++--
 5 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/client/src/pages/views/OperatorViewPage.tsx b/client/src/pages/views/OperatorViewPage.tsx
index e92dc1b9..efbb8354 100644
--- a/client/src/pages/views/OperatorViewPage.tsx
+++ b/client/src/pages/views/OperatorViewPage.tsx
@@ -62,7 +62,7 @@ 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
  *
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..0d1bcbdc 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,11 @@ 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 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..1b2f20ae 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)
+    dbc.add.question_answer("då", 5, item_question.id, item_team2)
 
     db.session.commit()
 
-- 
GitLab


From 40d7b3781ed11174fdda90570e2a56f66389ef78 Mon Sep 17 00:00:00 2001
From: bmodee <bjomo323@student.liu.se>
Date: Fri, 30 Apr 2021 11:56:14 +0200
Subject: [PATCH 2/4] add correct redirect when starting competition

---
 .../admin/competitions/CompetitionManager.tsx | 36 +++++++++++--------
 client/src/pages/views/OperatorViewPage.tsx   |  1 -
 2 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/client/src/pages/admin/competitions/CompetitionManager.tsx b/client/src/pages/admin/competitions/CompetitionManager.tsx
index b7184d55..5230c704 100644
--- a/client/src/pages/admin/competitions/CompetitionManager.tsx
+++ b/client/src/pages/admin/competitions/CompetitionManager.tsx
@@ -1,17 +1,17 @@
 import {
+  Box,
   Button,
-  Menu,
-  ListItem,
-  TablePagination,
-  TextField,
-  Typography,
   Dialog,
-  DialogTitle,
-  DialogContent,
   DialogActions,
+  DialogContent,
+  DialogTitle,
+  ListItem,
   ListItemText,
+  Menu,
+  TablePagination,
+  TextField,
   Tooltip,
-  Box,
+  Typography,
 } from '@material-ui/core'
 import FormControl from '@material-ui/core/FormControl'
 import InputLabel from '@material-ui/core/InputLabel'
@@ -25,7 +25,9 @@ import TableCell from '@material-ui/core/TableCell'
 import TableContainer from '@material-ui/core/TableContainer'
 import TableHead from '@material-ui/core/TableHead'
 import TableRow from '@material-ui/core/TableRow'
+import FileCopyIcon from '@material-ui/icons/FileCopy'
 import MoreHorizIcon from '@material-ui/icons/MoreHoriz'
+import RefreshIcon from '@material-ui/icons/Refresh'
 import axios from 'axios'
 import React, { useEffect } from 'react'
 import { Link, useHistory } from 'react-router-dom'
@@ -35,8 +37,6 @@ import { Team } from '../../../interfaces/ApiModels'
 import { CompetitionFilterParams } from '../../../interfaces/FilterParams'
 import { FilterContainer, RemoveMenuItem, TopBar, YearFilterTextField } from '../styledComp'
 import AddCompetition from './AddCompetition'
-import FileCopyIcon from '@material-ui/icons/FileCopy'
-import RefreshIcon from '@material-ui/icons/Refresh'
 
 /**
  * Component description:
@@ -128,15 +128,21 @@ const CompetitionManager: React.FC = (props: any) => {
     }
   }
 
-  const handleStartCompetition = () => {
-    history.push(`/operator/id=${activeId}&code=123123`)
+  const handleStartCompetition = async () => {
+    await axios
+      .get(`/api/competitions/${activeId}/codes`)
+      .then((response) => {
+        console.log(response.data.items[2].code)
+        const operatorCode = response.data.items[2].code
+        history.push(`/operator/id=${activeId}&code=${operatorCode}`)
+      })
+      .catch(console.log)
   }
 
   const getCodes = async () => {
     await axios
       .get(`/api/competitions/${activeId}/codes`)
       .then((response) => {
-        console.log(response.data)
         setCodes(response.data.items)
       })
       .catch(console.log)
@@ -146,7 +152,7 @@ const CompetitionManager: React.FC = (props: any) => {
     await axios
       .get(`/api/competitions/${activeId}/teams`)
       .then((response) => {
-        console.log(response.data.items)
+        // console.log(response.data.items)
         setTeams(response.data.items)
       })
       .catch((err) => {
@@ -158,7 +164,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 efbb8354..2dd8fb23 100644
--- a/client/src/pages/views/OperatorViewPage.tsx
+++ b/client/src/pages/views/OperatorViewPage.tsx
@@ -62,7 +62,6 @@ import {
  *  TODO:
  *  - Instead of copying code for others to join the competition, copy URL.
  *
- *  
  *
  *  - Fix scoreboard
  *
-- 
GitLab


From 0768a5219605219a7e6ee1fe831e0792e47e4eb9 Mon Sep 17 00:00:00 2001
From: bmodee <bjomo323@student.liu.se>
Date: Fri, 30 Apr 2021 17:32:42 +0200
Subject: [PATCH 3/4] display correct scoreboard

---
 client/src/pages/views/OperatorViewPage.tsx | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/client/src/pages/views/OperatorViewPage.tsx b/client/src/pages/views/OperatorViewPage.tsx
index a3228752..b8d15a1a 100644
--- a/client/src/pages/views/OperatorViewPage.tsx
+++ b/client/src/pages/views/OperatorViewPage.tsx
@@ -204,6 +204,15 @@ 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
@@ -363,7 +372,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>
-- 
GitLab


From f4e1e93e426e45f3e822cb7ef68199e7e9ad2b96 Mon Sep 17 00:00:00 2001
From: bmodee <bjomo323@student.liu.se>
Date: Fri, 30 Apr 2021 18:06:13 +0200
Subject: [PATCH 4/4] fix db tests

---
 client/src/pages/views/OperatorViewPage.tsx | 1 +
 server/populate.py                          | 3 +++
 server/tests/test_helpers.py                | 4 ++--
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/client/src/pages/views/OperatorViewPage.tsx b/client/src/pages/views/OperatorViewPage.tsx
index b8d15a1a..fd3dd05b 100644
--- a/client/src/pages/views/OperatorViewPage.tsx
+++ b/client/src/pages/views/OperatorViewPage.tsx
@@ -206,6 +206,7 @@ const OperatorViewPage: React.FC = () => {
 
   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
diff --git a/server/populate.py b/server/populate.py
index 0d1bcbdc..34f73822 100644
--- a/server/populate.py
+++ b/server/populate.py
@@ -107,6 +107,9 @@ def _add_items():
 
     # 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)
 
diff --git a/server/tests/test_helpers.py b/server/tests/test_helpers.py
index 1b2f20ae..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.question_answer("hej", 5, item_question.id, item_team1)
-    dbc.add.question_answer("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