From f82a2582db3f2ed1e24991f47cb3f69f98d29b6e Mon Sep 17 00:00:00 2001 From: Eduardo Afonso Date: Mon, 3 May 2021 18:08:44 -0300 Subject: [PATCH 1/5] =?UTF-8?q?(#189)=20Alterando=20estrutura=20das=20aval?= =?UTF-8?q?ia=C3=A7oes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/model/post.py | 14 +++++++++++++- app/model/professor.py | 40 ++++++++++++++++++++++++++++++++++++++++ database/database.sql | 5 ++++- 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/app/model/post.py b/app/model/post.py index 2b0faddd..03cf3244 100644 --- a/app/model/post.py +++ b/app/model/post.py @@ -47,7 +47,10 @@ class Post(db.Model): db.Integer, nullable=False, primary_key=True, autoincrement=True ) post_date = db.Column(db.Date, default=date.today(), nullable=False) - rating = db.Column(db.Float, nullable=False) + didactic = db.Column(db.Float, nullable=False) + metod = db.Column(db.Float, nullable=False) + avaliations = db.Column(db.Float, nullable=False) + disponibility = db.Column(db.Float, nullable=False) content = db.Column(db.String(480), nullable=False) is_anonymous = db.Column(db.Boolean, nullable=False) @@ -68,3 +71,12 @@ class Post(db.Model): agrees = db.relationship("Student", secondary="agree_student_post") disagrees = db.relationship("Student", secondary="disagree_student_post") + + @property + def rating(self): + sum = 0 + sum += self.didactic + sum += self.metod + sum += self.avaliations + sum += self.disponibility + return sum / 4 diff --git a/app/model/professor.py b/app/model/professor.py index b1fc67c0..fc1a9dee 100644 --- a/app/model/professor.py +++ b/app/model/professor.py @@ -45,3 +45,43 @@ def rating(self): for post in self.posts: sum += post.rating return sum / len(self.posts) + + @property + def didactic(self): + if len(self.posts) == 0: + return + + sum = 0 + for post in self.posts: + sum += post.didactic + return sum / len(self.posts) + + @property + def metod(self): + if len(self.posts) == 0: + return + + sum = 0 + for post in self.posts: + sum += post.metod + return sum / len(self.posts) + + @property + def avaliations(self): + if len(self.posts) == 0: + return + + sum = 0 + for post in self.posts: + sum += post.avaliations + return sum / len(self.posts) + + @property + def disponibility(self): + if len(self.posts) == 0: + return + + sum = 0 + for post in self.posts: + sum += post.disponibility + return sum / len(self.posts) diff --git a/database/database.sql b/database/database.sql index 0e55290d..ceae25dc 100644 --- a/database/database.sql +++ b/database/database.sql @@ -54,7 +54,10 @@ CREATE TABLE IF NOT EXISTS post ( id_professor int UNSIGNED NOT NULL, content varchar(480) NOT NULL, post_date date NOT NULL, - rating float NOT NULL, + didactic float NOT NULL, + metod float NOT NULL, + avaliations float NOT NULL, + disponibility float NOT NULL, discipline_code varchar(80) NOT NULL DEFAULT '', is_anonymous TINYINT(1) NOT NULL, PRIMARY KEY (id_post), From 11fa9e21d2996860897b873359465133c1f73937 Mon Sep 17 00:00:00 2001 From: Eduardo Afonso Date: Mon, 3 May 2021 18:09:22 -0300 Subject: [PATCH 2/5] (#189) Alterando validacoes de avaliacoes --- app/schemas/post_schema.py | 5 ++++- app/schemas/professor_schema.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/schemas/post_schema.py b/app/schemas/post_schema.py index b7d2bbae..b6ff6d4f 100644 --- a/app/schemas/post_schema.py +++ b/app/schemas/post_schema.py @@ -16,7 +16,10 @@ class Meta: required=True, validate=validate.Length(max=80), load_only=True ) content = fields.String(required=True, validate=validate.Length(min=1, max=480)) - rating = fields.Float(required=True, validate=validate.Range(min=0, max=10)) + didactic = fields.Float(required=True, validate=validate.Range(min=0, max=10)) + metod = fields.Float(required=True, validate=validate.Range(min=0, max=10)) + avaliations = fields.Float(required=True, validate=validate.Range(min=0, max=10)) + disponibility = fields.Float(required=True, validate=validate.Range(min=0, max=10)) is_anonymous = fields.Boolean(required=True) post_date = fields.Date() diff --git a/app/schemas/professor_schema.py b/app/schemas/professor_schema.py index 97c7deec..d7459929 100644 --- a/app/schemas/professor_schema.py +++ b/app/schemas/professor_schema.py @@ -7,7 +7,7 @@ class ProfessorSchema(ma.SQLAlchemySchema): class Meta: model = Professor - additional = ["rating"] + additional = ["rating", "didactic", "metod", "avaliations", "disponibility"] id_professor = fields.Integer(validate=validate.Range(min=0)) reg_professor = fields.Integer( From bfdf2aec79c10517343a1e6cc307714b7aa2124f Mon Sep 17 00:00:00 2001 From: Eduardo Afonso Date: Mon, 3 May 2021 18:17:55 -0300 Subject: [PATCH 3/5] (#189) Alterando testes de avaliacoes --- app/services/post_services.py | 5 ++++- tests/tests_post.py | 31 +++++++++++++++++++++++++------ tests/tests_professor.py | 12 +++++++++++- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/app/services/post_services.py b/app/services/post_services.py index 8c144de9..e26fb346 100644 --- a/app/services/post_services.py +++ b/app/services/post_services.py @@ -40,7 +40,10 @@ def register_post(post): id_professor=post.get("id_professor"), discipline_code=post.get("discipline_code"), content=post.get("content"), - rating=post.get("rating"), + didactic=post.get("didactic"), + metod=post.get("metod"), + avaliations=post.get("avaliations"), + disponibility=post.get("disponibility"), is_anonymous=post.get("is_anonymous"), ) db.session.add(post_db) diff --git a/tests/tests_post.py b/tests/tests_post.py index 344feec6..812e65cb 100644 --- a/tests/tests_post.py +++ b/tests/tests_post.py @@ -9,7 +9,10 @@ def valid_post(self): "reg_student": self.student["reg_student"], "discipline_code": self.discipline["discipline_code"], "content": "Professor nota dez", - "rating": "5", + "didactic": "5", + "metod": "5", + "avaliations": "5", + "disponibility": "5", "is_anonymous": True, } @@ -75,36 +78,52 @@ def test_api_must_validate_empty_attributes(self): response = register_post(self, post=post) expected_json_keys = [ + "avaliations", "content", + "didactic", "discipline_code", + "disponibility", "id_professor", "is_anonymous", - "rating", + "metod", "reg_student", ] json_keys = list(response.json.keys()) + self.assertEqual(response.status_code, 400) self.assertEqual(json_keys, expected_json_keys) def test_api_must_validate_attributes_min(self): post = valid_post(self) post["content"] = "" - post["rating"] = -1 + post["didactic"] = -1 + post["metod"] = -1 + post["avaliations"] = -1 + post["disponibility"] = -1 response = register_post(self, post=post) self.assertEqual(response.status_code, 400) self.assertIsNotNone(response.json["content"]) - self.assertIsNotNone(response.json["rating"]) + self.assertIsNotNone(response.json["didactic"]) + self.assertIsNotNone(response.json["metod"]) + self.assertIsNotNone(response.json["avaliations"]) + self.assertIsNotNone(response.json["disponibility"]) def test_api_must_validate_attributes_max(self): post = valid_post(self) post["content"] = "a" * 481 - post["rating"] = 11 + post["didactic"] = 11 + post["metod"] = 11 + post["avaliations"] = 11 + post["disponibility"] = 11 response = register_post(self, post=post) self.assertEqual(response.status_code, 400) self.assertIsNotNone(response.json["content"]) - self.assertIsNotNone(response.json["rating"]) + self.assertIsNotNone(response.json["didactic"]) + self.assertIsNotNone(response.json["metod"]) + self.assertIsNotNone(response.json["avaliations"]) + self.assertIsNotNone(response.json["disponibility"]) def test_api_must_validate_professor_relationship_not_found(self): post = valid_post(self) diff --git a/tests/tests_professor.py b/tests/tests_professor.py index ba6ec9e4..d7cda6f0 100644 --- a/tests/tests_professor.py +++ b/tests/tests_professor.py @@ -170,7 +170,17 @@ def test_api_must_return_professors_by_name_substring(self): response = self.get(name_substring, headers) json_attributes = list(response.json[0].keys()) - expected_json_attributes = ["disciplines", "id_professor", "name", "rating"] + expected_json_attributes = [ + "avaliations", + "didactic", + "disciplines", + "disponibility", + "id_professor", + "metod", + "name", + "rating", + ] + self.assertEqual(response.status_code, 200) self.assertEqual(json_attributes, expected_json_attributes) self.assertEqual(response.json[0]["name"], self.professor["name"]) From 7dcac0780f639979fa5dc6c80bb2c9f4e4cd846e Mon Sep 17 00:00:00 2001 From: Eduardo Afonso Date: Tue, 4 May 2021 11:48:38 -0300 Subject: [PATCH 4/5] (#189) Modificando nota maxima para 5 --- app/schemas/post_schema.py | 8 ++++---- tests/tests_post.py | 11 ++++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/schemas/post_schema.py b/app/schemas/post_schema.py index b6ff6d4f..18c8d577 100644 --- a/app/schemas/post_schema.py +++ b/app/schemas/post_schema.py @@ -16,10 +16,10 @@ class Meta: required=True, validate=validate.Length(max=80), load_only=True ) content = fields.String(required=True, validate=validate.Length(min=1, max=480)) - didactic = fields.Float(required=True, validate=validate.Range(min=0, max=10)) - metod = fields.Float(required=True, validate=validate.Range(min=0, max=10)) - avaliations = fields.Float(required=True, validate=validate.Range(min=0, max=10)) - disponibility = fields.Float(required=True, validate=validate.Range(min=0, max=10)) + didactic = fields.Float(required=True, validate=validate.Range(min=0, max=5)) + metod = fields.Float(required=True, validate=validate.Range(min=0, max=5)) + avaliations = fields.Float(required=True, validate=validate.Range(min=0, max=5)) + disponibility = fields.Float(required=True, validate=validate.Range(min=0, max=5)) is_anonymous = fields.Boolean(required=True) post_date = fields.Date() diff --git a/tests/tests_post.py b/tests/tests_post.py index 812e65cb..db90253b 100644 --- a/tests/tests_post.py +++ b/tests/tests_post.py @@ -8,7 +8,7 @@ def valid_post(self): "id_professor": self.professor["id_professor"], "reg_student": self.student["reg_student"], "discipline_code": self.discipline["discipline_code"], - "content": "Professor nota dez", + "content": "Professor nota cinco", "didactic": "5", "metod": "5", "avaliations": "5", @@ -112,10 +112,11 @@ def test_api_must_validate_attributes_min(self): def test_api_must_validate_attributes_max(self): post = valid_post(self) post["content"] = "a" * 481 - post["didactic"] = 11 - post["metod"] = 11 - post["avaliations"] = 11 - post["disponibility"] = 11 + post["didactic"] = 6 + post["metod"] = 6 + post["avaliations"] = 6 + post["disponibility"] = 6 + response = register_post(self, post=post) self.assertEqual(response.status_code, 400) From 8b458e5614cbbe8c864a0a62d2133163bb011415 Mon Sep 17 00:00:00 2001 From: Eduardo Afonso Date: Wed, 5 May 2021 20:36:01 -0300 Subject: [PATCH 5/5] (#189) Alterando criterios para tinyint --- app/model/post.py | 8 ++++---- app/schemas/post_schema.py | 8 ++++---- database/database.sql | 8 ++++---- tests/tests_post.py | 10 ++++++---- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/app/model/post.py b/app/model/post.py index 03cf3244..e16612ee 100644 --- a/app/model/post.py +++ b/app/model/post.py @@ -47,10 +47,10 @@ class Post(db.Model): db.Integer, nullable=False, primary_key=True, autoincrement=True ) post_date = db.Column(db.Date, default=date.today(), nullable=False) - didactic = db.Column(db.Float, nullable=False) - metod = db.Column(db.Float, nullable=False) - avaliations = db.Column(db.Float, nullable=False) - disponibility = db.Column(db.Float, nullable=False) + didactic = db.Column(db.Integer, nullable=False) + metod = db.Column(db.Integer, nullable=False) + avaliations = db.Column(db.Integer, nullable=False) + disponibility = db.Column(db.Integer, nullable=False) content = db.Column(db.String(480), nullable=False) is_anonymous = db.Column(db.Boolean, nullable=False) diff --git a/app/schemas/post_schema.py b/app/schemas/post_schema.py index 18c8d577..816653c6 100644 --- a/app/schemas/post_schema.py +++ b/app/schemas/post_schema.py @@ -16,10 +16,10 @@ class Meta: required=True, validate=validate.Length(max=80), load_only=True ) content = fields.String(required=True, validate=validate.Length(min=1, max=480)) - didactic = fields.Float(required=True, validate=validate.Range(min=0, max=5)) - metod = fields.Float(required=True, validate=validate.Range(min=0, max=5)) - avaliations = fields.Float(required=True, validate=validate.Range(min=0, max=5)) - disponibility = fields.Float(required=True, validate=validate.Range(min=0, max=5)) + didactic = fields.Integer(required=True, validate=validate.Range(min=1, max=5)) + metod = fields.Integer(required=True, validate=validate.Range(min=1, max=5)) + avaliations = fields.Integer(required=True, validate=validate.Range(min=1, max=5)) + disponibility = fields.Integer(required=True, validate=validate.Range(min=1, max=5)) is_anonymous = fields.Boolean(required=True) post_date = fields.Date() diff --git a/database/database.sql b/database/database.sql index ceae25dc..9d952a3d 100644 --- a/database/database.sql +++ b/database/database.sql @@ -54,10 +54,10 @@ CREATE TABLE IF NOT EXISTS post ( id_professor int UNSIGNED NOT NULL, content varchar(480) NOT NULL, post_date date NOT NULL, - didactic float NOT NULL, - metod float NOT NULL, - avaliations float NOT NULL, - disponibility float NOT NULL, + didactic TINYINT UNSIGNED NOT NULL, + metod TINYINT UNSIGNED NOT NULL, + avaliations TINYINT UNSIGNED NOT NULL, + disponibility TINYINT UNSIGNED NOT NULL, discipline_code varchar(80) NOT NULL DEFAULT '', is_anonymous TINYINT(1) NOT NULL, PRIMARY KEY (id_post), diff --git a/tests/tests_post.py b/tests/tests_post.py index db90253b..6c6fc04c 100644 --- a/tests/tests_post.py +++ b/tests/tests_post.py @@ -95,11 +95,13 @@ def test_api_must_validate_empty_attributes(self): def test_api_must_validate_attributes_min(self): post = valid_post(self) + post["content"] = "" - post["didactic"] = -1 - post["metod"] = -1 - post["avaliations"] = -1 - post["disponibility"] = -1 + post["didactic"] = 0 + post["metod"] = 0 + post["avaliations"] = 0 + post["disponibility"] = 0 + response = register_post(self, post=post) self.assertEqual(response.status_code, 400)