Skip to content

Commit dc857e1

Browse files
authored
Merge pull request #16 from tsarnadelis/giorgos
Merge branch Giorgos to main, fix maintainability index
2 parents 677e1e0 + 7165388 commit dc857e1

5 files changed

Lines changed: 151 additions & 292 deletions

File tree

service/LicensePlateService.js

Lines changed: 42 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -8,48 +8,37 @@
88
* body LicensePlate License plate object to update
99
* no response value expected for this operation
1010
**/
11-
12-
1311
exports.modifyPlate = function(body) {
1412
return new Promise(function(resolve, reject) {
1513

16-
17-
1814
// Μια ήδη καταχωρημένη πινακίδα μέσα στο σύστημα
1915
var existingPlates = {
2016
"licensePlate": "AKH1314", // όνομα πινακίδας
2117
"id": 15, // το id της πινακίδας
22-
2318
};
24-
25-
if (!body.licensePlate || body.licensePlate === "" ) {
26-
//αν το licensePlate δεν υπάρχει στο request body ή ισούται με το κενό string τότε έχω σφάλμα με κωδικό σφάλματος 400
27-
const error = new Error("license Plate does not exist");
28-
error.response = { statusCode: 400 };
29-
reject(error);
30-
return;
31-
}
32-
33-
// Ο έλεγχος αυτός έγινε comment διότι εκτελείται από το swagger. Συνεπώς, τον κάνω comment ώστε να μην μου χαλάει το
34-
//coverage του modifyPlate
35-
// if (typeof body.licensePlate !== "string"){
36-
// //αν το licensePlate έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
37-
// const error = new Error("Invalid licenseplate");
38-
// error.response = { statusCode: 400 };
39-
// reject(error);
40-
// return;
41-
// }
4219

20+
//Ορίζω κανόνες εγκυρότητας για τα fields της πινακίδας.
21+
//Αν το licensePlate δεν υπάρχει στο request body ή ισούται με το κενό string τότε έχω σφάλμα με κωδικό σφάλματος 400.
22+
//Επίσης, αν το id έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400.
23+
// Έτσι, μειώνω το πλήθος των reject(error).
24+
const validations = [
25+
{ key: 'licensePlate', rule: (value) => value && value !== "", errorMessage: "license Plate does not exist" },
26+
{ key: 'id', rule: (value) => Number.isInteger(value) && value > 0,
27+
errorMessage: "Invalid id: must be a positive integer." }
28+
];
4329

44-
if (!Number.isInteger(body.id) || body.id < 0) {
45-
//αν το id έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
46-
const error = new Error("Invalid id: must be a positive integer.");
47-
error.response = { statusCode: 400 };
48-
reject(error);
49-
return;
30+
// Έλεγχος για σφάλματα στα fields της πινακίδας
31+
for (const { key, rule, errorMessage } of validations) {
32+
const value = body[key];
33+
if (!rule(value)) { // Αν η τιμή δεν ικανοποιεί τον κανόνα εγκυρότητας (rule), τότε υπάρχει σφάλμα
34+
const error = new Error(errorMessage);
35+
error.response = { statusCode: 400 }; // Επιστρέφει κωδικό 400
36+
reject(error);
37+
return;
38+
}
5039
}
5140

52-
//Αν η dummy πινακίδα που είναι ήδη καταχωρημένη μέσα στο σύστημα έχει ίδιο id με εκείνο του request body και διαφορετικό
41+
//Αν η dummy πινακίδα που είναι ήδη καταχωρημένη μέσα στο σύστημα έχει ίδιο id με εκείνο του request body και διαφορετικό
5342
// όνομα πινακίδας με εκείνο του request body, τότε συμβαίνει με επιτυχία η τροποποίηση της πινακίδας. Αν τα γνωρίσματα της
5443
// dummy καταχωρημένης πινακίδας και του request body ταυτίζονται , τότε δεν τροποποιώ την πινακίδα αλλά αντίθετα διατηρώ
5544
// τα "παλιά" της στοιχεία.Τέλος, αν όλα τα γνωρίσματα της dummy πινακίδας διαφέρουν με τα αντίστοιχα γνωρίσματα του request
@@ -72,14 +61,13 @@ exports.modifyPlate = function(body) {
7261
// Handle non-existent ID (η πινακίδα δεν υπάρχει μέσα στο σύστημα)
7362
const isNonExistent = existingPlates.id !== body.id;
7463
if (isNonExistent) {
75-
const error = new Error("License plate doesn't exist.");
64+
const error = new Error("License plate doesn't exist."); // Η πινακίδα που επιθυμώ να τροποποιήσω ΔΕΝ βρέθηκε.
7665
error.response = { statusCode: 404 }; // Επιστρέφει κωδικό σφάλματος 404.
77-
//Δηλαδή, η πινακίδα που επιθυμώ να τροποποιήσω ΔΕΝ βρέθηκε.
7866
reject(error);
7967
return;
8068
}
8169

82-
resolve(); // Return the updated plate object
70+
resolve();
8371
});
8472
};
8573

@@ -92,42 +80,28 @@ exports.modifyPlate = function(body) {
9280
* no response value expected for this operation
9381
**/
9482
exports.registerPlate = function(body) {
95-
return new Promise((resolve, reject) => {
83+
return new Promise((resolve, reject) => {
84+
//Ορίζω κανόνες εγκυρότητας για τα fields της πινακίδας.
85+
//Αν το id έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400.
86+
//Αν το licensePlate δεν υπάρχει στο request body ή ισούται με το κενό string τότε έχω σφάλμα με κωδικό σφάλματος 400.
87+
// Έτσι, μειώνω το πλήθος των reject(error).
88+
const validations = [
89+
{ key: 'id', rule: (value) => Number.isInteger(value) && value > 0, errorMessage: 'Invalid id: must be a positive integer.' },
90+
{ key: 'licensePlate', rule: (value) => value && value !== "", errorMessage: 'licenseplate does not exist' }
91+
];
9692

97-
// Μια ήδη καταχωρημένη πινακίδα μέσα στο σύστημα
98-
var existingPlates = {
99-
"licensePlate": "AKH1314", // το όνομα της πινακίδας
100-
"id": 15, // το id της πινακίδας
101-
102-
};
103-
104-
105-
if (!Number.isInteger(body.id) || body.id < 0) {
106-
//αν το id έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
107-
const error = new Error("Invalid id: must be a positive integer.");
108-
error.response = { statusCode: 400 };
109-
reject(error);
110-
return;
111-
}
112-
113-
114-
if (!body.licensePlate || body.licensePlate === "") {
115-
//αν το licensePlate δεν υπάρχει στο request body ή ισούται με το κενό string τότε έχω σφάλμα με κωδικό σφάλματος 400
116-
const error = new Error("licenseplate does not exist");
117-
error.response = { statusCode: 400 };
118-
reject(error);
119-
return;
93+
// Έλεγχος για σφάλματα στα fields της πινακίδας
94+
for (const { key, rule, errorMessage } of validations) {
95+
const value = body[key];
96+
if (!rule(value)) { // Αν η τιμή δεν ικανοποιεί τον κανόνα εγκυρότητας (rule), τότε υπάρχει σφάλμα
97+
const error = new Error(errorMessage);
98+
error.response = { statusCode: 400 }; // Επιστρέφει κωδικό 400
99+
reject(error);
100+
return;
101+
}
120102
}
121-
122-
// Ο έλεγχος αυτός έγινε comment διότι εκτελείται από το swagger. Συνεπώς, τον κάνω comment ώστε να μην μου χαλάει το
123-
//coverage του registerPlate
124-
// if (typeof body.licensePlate !== "string"){
125-
// //αν το licensePlate έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
126-
// const error = new Error("Invalid licenseplate");
127-
// error.response = { statusCode: 400 };
128-
// reject(error);
129-
// return;
130-
// }
103+
131104
resolve();
132-
});
105+
});
133106
};
107+

service/SpotOwnerService.js

Lines changed: 30 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,43 @@
1-
'use strict';
2-
3-
41
/**
52
* Add a new spot owner
63
* FR15: The system administrator must be able to add a spot owner to the system
74
*
85
* body SpotOwner Spot owner object to add
96
* no response value expected for this operation
107
**/
11-
12-
138
exports.addSpotOwner = function(body) {
14-
return new Promise((resolve, reject) =>{
15-
//SpotOwner = Ιδιοκτήτης θέσεων πάρκινγκ
16-
var existingSpotOwners = {
17-
"id":1, // το id του ιδιοκτήτη θέσεων
18-
"idNumber": "AK1234", // ο αριθμός ταυτότητας του ιδιοκτήτη θέσεων
19-
"name":"John Doe", // ο ονοματεπώνυμο του ιδιοκτήτη
20-
"email":"johhdoe@gmail.com", // το email του ιδιοκτήτη
21-
"phone":"1234567890",// το τηλέφωνο του ιδιοκτήτη
22-
"spots":[] // οι θέσεις του ιδιοκτήτη
23-
};
24-
9+
return new Promise((resolve, reject) => {
2510

26-
if (!body.id || body.id < 0) {
27-
//αν το id έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
28-
const error = new Error("Invalid id: must be a positive integer.");
29-
error.response = { statusCode: 400 };
30-
reject(error);
31-
return;
32-
}
33-
34-
if (!body.idNumber || typeof body.idNumber !== "string") {
35-
//αν το idNumber έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
36-
const error = new Error("Invalid idNumber: must be a string.");
37-
error.response = { statusCode: 400 };
38-
reject(error);
39-
return;
40-
}
41-
42-
if (!body.name || typeof body.name !== "string") {
43-
//αν το name έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
44-
const error = new Error("Invalid name: must be a string.");
45-
error.response = { statusCode: 400 };
46-
reject(error);
47-
return;
48-
}
49-
50-
if (!body.email || typeof body.email !== "string") {
51-
52-
//αν το email έχει μη έγκυρη τιμή τότε έχω σφάλμα με κωδικό σφάλματος 400
53-
const error = new Error("Invalid email: must be a string.");
54-
error.response = { statusCode: 400 };
55-
reject(error);
56-
return;
57-
}
11+
//idNumber = αριθμός ταυτότητας
12+
//spots = μια λίστα που περιέχει τις θέσεις που ανήκουν στον ιδιοκτήτη θέσεων.
5813

59-
if (!body.phone) {
60-
61-
//αν το phone δεν υπάρχει στο request body τότε έχω σφάλμα με κωδικό σφάλματος 400
62-
const error = new Error("No phone.");
63-
error.response = { statusCode: 400 };
64-
reject(error);
65-
return;
66-
}
67-
68-
if (!body.spots) {
69-
70-
//αν το spots δεν υπάρχει στο request body τότε έχω σφάλμα με κωδικό σφάλματος 400
71-
const error = new Error("No spots.");
72-
error.response = { statusCode: 400 };
73-
reject(error);
74-
return;
14+
// Ορίζω κανόνες εγκυρότητας για κάθε field του Ιδιοκτήτη θέσεων.
15+
//Αν το id δεν είναι θετικός ακέραιος τότε έχω σφάλμα με κωδικό 400.
16+
//Αν το idNumber δεν είναι string τότε έχω σφάλμα με κωδικό 400. Το ίδιο ισχύει και για τα name και email.
17+
//Αν το phone δεν υπάρχει στο request body τότε έχω σφάλμα με κωδικό σφάλματος 400. Το ίδιο ισχύει και για το spots.
18+
const validations = [
19+
{ key: 'id', rule: (value) => value > 0 && Number.isInteger(value), errorMessage: 'Invalid id: must be a positive integer.' },
20+
{ key: 'idNumber', rule: (value) => typeof value === 'string' && value !== undefined
21+
&& value !== null && value.trim() !== '', errorMessage: 'Invalid idNumber: must be a string.' },
22+
{ key: 'name', rule: (value) => typeof value === 'string' && value !== undefined
23+
&& value !== null && value.trim() !== '', errorMessage: 'Invalid name: must be a string.' },
24+
{ key: 'email', rule: (value) => typeof value === 'string' && value !== undefined
25+
&& value !== null && value.trim() !== '', errorMessage: 'Invalid email: must be a string.' },
26+
{ key: 'phone', rule: (value) => value !== undefined, errorMessage: 'No phone.' },
27+
{ key: 'spots', rule: (value) => value !== undefined, errorMessage: 'No spots.' },
28+
];
29+
30+
// Έλεγχος για σφάλματα στα fields του Ιδιοκτήτη θέσεων
31+
for (const { key, rule, errorMessage } of validations) {
32+
const value = body[key];
33+
if (!rule(value)) { // Αν η τιμή δεν ικανοποιεί τον κανόνα εγκυρότητας (rule), τότε υπάρχει σφάλμα
34+
const error = new Error(errorMessage);
35+
error.response = { statusCode: 400 }; // Επιστρέφει κωδικό 400
36+
reject(error);
37+
return;
38+
}
7539
}
7640

7741
resolve();
78-
});
79-
80-
}
42+
});
43+
};

0 commit comments

Comments
 (0)