From 2782fbbdf3f88e0a1bb9ba1b9680378f0ebfc52d Mon Sep 17 00:00:00 2001
From: isufian12 <107994227+isufian12@users.noreply.github.com>
Date: Wed, 17 Jan 2024 19:13:14 +0300
Subject: [PATCH] first git sourcr try
---
411107965-Sufian-project-6(1).md | 295 +++++++++++++++++++++++++++++++
1 file changed, 295 insertions(+)
create mode 100644 411107965-Sufian-project-6(1).md
diff --git a/411107965-Sufian-project-6(1).md b/411107965-Sufian-project-6(1).md
new file mode 100644
index 0000000..a60178b
--- /dev/null
+++ b/411107965-Sufian-project-6(1).md
@@ -0,0 +1,295 @@
+# Project-6 Detailed Grades for Sufian Alfuraydi
+
+This is your detailed grade for the Project-6.
+Please read everything carefully and try to understand where you made mistakes (if any).
+We tried to be as descriptive in the grading script messages as possible.
+However, if you don't understand any message, please ask for an explanation!.
+The file is divided into smaller subsections.
+Each section represent a task/test we examined.
+There are tasks with points and there are other that have zero points.
+Thus, if you see a zero that is not necessarily a bad thing.
+
+
+
+## Grading Summary:
+| Task-ID | Status | Possible Points | Earned Points | Description |
+|:-------:|:------:|:---------------:|:-------------:|:------------|
+| [1](#task1) | 🟢 | 0 | 0 | Get the file credentials.ini |
+| [2](#task2) | 🟢 | 0 | 0 | Get author from credentials.ini |
+| [3](#task3) | 🟢 | 0 | 0 | Get quid from credentials.ini |
+| [4](#task4) | 🟢 | 0 | 0 | Get repository link from credentials.ini |
+| [5](#task5) | 🟢 | 0 | 0 | Clone repository to local file |
+| [6](#task6) | 🔴 | 0 | 0 | Check if repo has any late edits |
+| [7](#task7) | 🟢 | 0 | 0 | Get 'PORT' number from credentials file. |
+| [8](#task8) | 🟢 | 0 | 0 | Get 'HOSTNAME' value from credentials file. |
+| [9](#task9) | 🟢 | 0 | 0 | Get 'DATABASE' value from credentials file. |
+| [10](#task10) | 🟢 | 0 | 0 | Get 'COLLECTION' value from credentials file. |
+| [11](#task11) | 🟢 | 0 | 0 | Get 'WEB_SERVICE' value from credentials file. |
+| [12](#task12) | 🟢 | 0 | 0 | Copy credentials file to it appropriate location. |
+| [13](#task13) | 🟢 | 0 | 0 | Copy test data file. |
+| [14](#task14) | 🟢 | 0 | 0 | Copy data validation file. |
+| [15](#task15) | 🟢 | 20 | 20.0 | Setup and run the application using docker-compose |
+| [16](#task16) | 🟢 | 0 | 0 | Insert sample data to database |
+| [17](#task17) | 🟢 | 0 | 0 | Validate data exist! |
+| [18](#task18) | 🔴 | 30 | 30.0 | Read and validate default json data (listAll, listOpenOnly, listCloseOnly) |
+| [19](#task19) | 🔴 | 15 | 10.5 | Read and validate csv data (listAll/csv, listOpenOnly/csv, listCloseOnly/csv) |
+| [20](#task20) | 🔴 | 15 | 15.0 | Read and validate json data (listAll/json, listOpenOnly/json, listCloseOnly/json) |
+| [21](#task21) | 🔴 | 20 | 20.0 | Read and validate query-based data (i.e., top=k): (listOpenOnly/csv?top=2, listOpenOnly/json?top=2, listCloseOnly/csv?top=2, listCloseOnly/json?top=2) |
+| [22](#task22) | 🟢 | 30 | 30.0 | Implemented a working and user-friendly consumer program? |
+| [23](#task23) | 🟢 | 0 | 0 | Stop the all services! |
+| **Total** | 18/23 | **100** | **117.98** | **Was late 0.30 days** |
+
+Late deduction explanation!
+Deducting 20.0% per late-day (number of late-days = 0.30).
+Total deducting percentage = 20.0% * 0.30 = 5.99%.
+Total points before deducting late percentage penalty is 125.5.
+Final total points after deducting 5.99% is 117.98.
+
+
+
+## Detailed Grading:
+#### Task-1 [PASSED, 0/0]
+- **Goal**: Get the file credentials.ini
+- **Result**: Feedback from us and/or the system:
+
+```
+Found a *.ini file!
+```
+
+#### Task-2 [PASSED, 0/0]
+- **Goal**: Get author from credentials.ini
+- **Result**: Feedback from us and/or the system:
+
+```
+Got 'Sufian Alfuraydi' for student with id='411107965'
+```
+
+#### Task-3 [PASSED, 0/0]
+- **Goal**: Get quid from credentials.ini
+- **Result**: Feedback from us and/or the system:
+
+```
+Got '411107965' for student with id='411107965'. The given id match the one in record!
+```
+
+#### Task-4 [PASSED, 0/0]
+- **Goal**: Get repository link from credentials.ini
+- **Result**: Feedback from us and/or the system:
+
+```
+Got a valid link 'git@github.com:it492/project-6-brevetsrest-sufianalfuraydi.git' for student with id='411107965'
+```
+
+#### Task-5 [PASSED, 0/0]
+- **Goal**: Clone repository to local file
+- **Result**: Feedback from us and/or the system:
+
+```
+A repo for Sufian already exists in dir '~/repos/411107965'
+```
+
+#### Task-6 [FAILED, 0/0]
+- **Goal**: Check if repo has any late edits
+- **Result**: Feedback from us and/or the system:
+
+```
+Late (last change='2023-11-28 00:11:11' > deadline='2023-11-27 17:00:00'), 20.0% will be deducted for each day.
+```
+
+#### Task-7 [PASSED, 0/0]
+- **Goal**: Get 'PORT' number from credentials file.
+- **Result**: Feedback from us and/or the system:
+
+```
+Got the value='5001' for key='PORT'.
+```
+
+#### Task-8 [PASSED, 0/0]
+- **Goal**: Get 'HOSTNAME' value from credentials file.
+- **Result**: Feedback from us and/or the system:
+
+```
+Got the value='db' for key='HOSTNAME'.
+```
+
+#### Task-9 [PASSED, 0/0]
+- **Goal**: Get 'DATABASE' value from credentials file.
+- **Result**: Feedback from us and/or the system:
+
+```
+Got the value='brevetsdbfs' for key='DATABASE'.
+```
+
+#### Task-10 [PASSED, 0/0]
+- **Goal**: Get 'COLLECTION' value from credentials file.
+- **Result**: Feedback from us and/or the system:
+
+```
+Got the value='controls' for key='COLLECTION'.
+```
+
+#### Task-11 [PASSED, 0/0]
+- **Goal**: Get 'WEB_SERVICE' value from credentials file.
+- **Result**: Feedback from us and/or the system:
+
+```
+Got the value='web' for key='WEB_SERVICE'.
+```
+
+#### Task-12 [PASSED, 0/0]
+- **Goal**: Copy credentials file to it appropriate location.
+- **Result**: Feedback from us and/or the system:
+
+```
+Copied original 'credentials.ini' file to '~/repos/411107965/brevets/'
+```
+
+#### Task-13 [PASSED, 0/0]
+- **Goal**: Copy test data file.
+- **Result**: Feedback from us and/or the system:
+
+```
+Copied original 'insert_test_data.py' file to '~/repos/411107965/brevets/'
+```
+
+#### Task-14 [PASSED, 0/0]
+- **Goal**: Copy data validation file.
+- **Result**: Feedback from us and/or the system:
+
+```
+Copied original 'validate_data_exist.py' file to '~/repos/411107965/brevets/'
+```
+
+#### Task-15 [PASSED, 20.0/20]
+- **Goal**: Setup and run the application using docker-compose
+- **Result**: Feedback from us and/or the system:
+
+```
+> Attempting to build and run containers using docker-compose.
+> Command used: 'docker-compose --project-directory /Users/zalsaeed/Documents/qu/492/it492-all-things-considered/projects-and-its-grading/project-6/submissions/repos/411107965/brevets -f /Users/zalsaeed/Documents/qu/492/it492-all-things-considered/projects-and-its-grading/project-6/submissions/repos/411107965/brevets/docker-compose.yml --project-name 411107965 up -d --build'
+> Image built successfully!
+> Checking if the server is up and no crashes occurred by calling 'http://localhost:5001/listAll'
+> Server is up!
+
+```
+
+#### Task-16 [PASSED, 0/0]
+- **Goal**: Insert sample data to database
+- **Result**: Feedback from us and/or the system:
+
+```
+Inserted data successfully
+
+```
+
+#### Task-17 [PASSED, 0/0]
+- **Goal**: Validate data exist!
+- **Result**: Feedback from us and/or the system:
+
+```
+True: We found: 2 documents! Exactly what we expected!
+
+```
+
+#### Task-18 [FAILED, 30.0/30]
+- **Goal**: Read and validate default json data (listAll, listOpenOnly, listCloseOnly)
+- **Result**: Feedback from us and/or the system:
+
+```
+> Called 'http://localhost:5001/listAll expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'open': '02/02/2024 02:56', 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05', 'close': '02/02/2024 03:00'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'open': '02/02/2024 02:56', 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05', 'close': '02/02/2024 03:00'}]}]}
+> Called 'http://localhost:5001/listOpenOnly expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'open': '02/02/2024 02:56'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'open': '02/02/2024 02:56'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05'}]}]}
+> Called 'http://localhost:5001/listCloseOnly expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'close': '02/02/2024 03:00'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'close': '02/02/2024 03:00'}]}]}
+
+```
+
+#### Task-19 [FAILED, 10.5/15]
+- **Goal**: Read and validate csv data (listAll/csv, listOpenOnly/csv, listCloseOnly/csv)
+- **Result**: Feedback from us and/or the system:
+
+```
+> Called 'http://localhost:5001/listAll/csv expecting
+(['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/open,brevets/controls/0/close,brevets/controls/1/km,brevets/controls/1/mi,brevets/controls/1/location,brevets/controls/1/open,brevets/controls/1/close,brevets/controls/2/km,brevets/controls/2/mi,brevets/controls/2/location,brevets/controls/2/open,brevets/controls/2/close,brevets/controls/3/km,brevets/controls/3/mi,brevets/controls/3/location,brevets/controls/3/open,brevets/controls/3/close', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 0:00,2/2/24 1:00,100,62.1,,2/2/24 2:56,2/2/24 6:40,150,93.2,Second Checkpoint,2/2/24 4:25,2/2/24 10:00,200,124.3,Last Checkpoint,2/2/24 5:53,2/2/24 13:30', '1000,2/2/24,0:00,0,0,begin,2/2/24 0:00,2/2/24 1:00,1000,621.4,finish line,2/2/24 9:05,2/2/24 3:00,,,,,,,,,,', '', '', '', ''], ['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/open,brevets/controls/0/close', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 0:00,2/2/24 1:00', '200,2/2/24,0:00,100,62.1,,2/2/24 2:56,2/2/24 6:40', '200,2/2/24,0:00,150,93.2,Second Checkpoint,2/2/24 4:25,2/2/24 10:00', '200,2/2/24,0:00,200,124.3,Last Checkpoint,2/2/24 5:53,2/2/24 13:30', '1000,2/2/24,0:00,0,0,begin,2/2/24 0:00,2/2/24 1:00', '1000,2/2/24,0:00,1000,621.4,finish line,2/2/24 9:05,2/2/24 3:00'])
+Got:
+['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/km,brevets/controls/mi,brevets/controls/location,brevets/controls/open,brevets/controls/close\r\n', '200,02/02/2024,00:00,0,0,Starting Point,02/02/2024 00:00,02/02/2024 01:00\r\n', '200,02/02/2024,00:00,100,62.1,,02/02/2024 02:56,02/02/2024 06:40\r\n', '200,02/02/2024,00:00,150,93.2,Second Checkpoint,02/02/2024 04:25,02/02/2024 10:00\r\n', '200,02/02/2024,00:00,200,124.3,Last Checkpoint,02/02/2024 05:53,02/02/2024 13:30\r\n', '1000,02/02/2024,00:00,0,0,begin,02/02/2024 00:00,02/02/2024 01:00\r\n', '1000,02/02/2024,00:00,1000,621.4,finish line,02/02/2024 09:05,02/02/2024 03:00\r\n']
+> Called 'http://localhost:5001/listOpenOnly/csv expecting
+(['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/open,brevets/controls/1/km,brevets/controls/1/mi,brevets/controls/1/location,brevets/controls/1/open,brevets/controls/2/km,brevets/controls/2/mi,brevets/controls/2/location,brevets/controls/2/open,brevets/controls/3/km,brevets/controls/3/mi,brevets/controls/3/location,brevets/controls/3/open', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 0:00,100,62.1,,2/2/24 2:56,150,93.2,Second Checkpoint,2/2/24 4:25,200,124.3,Last Checkpoint,2/2/24 5:53', '1000,2/2/24,0:00,0,0,begin,2/2/24 0:00,1000,621.4,finish line,2/2/24 9:05,,,,,,,,', '', '', '', ''], ['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/open', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 0:00', '200,2/2/24,0:00,100,62.1,,2/2/24 2:56', '200,2/2/24,0:00,150,93.2,Second Checkpoint,2/2/24 4:25', '200,2/2/24,0:00,200,124.3,Last Checkpoint,2/2/24 5:53', '1000,2/2/24,0:00,0,0,begin,2/2/24 0:00', '1000,2/2/24,0:00,1000,621.4,finish line,2/2/24 9:05'])
+Got:
+['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/km,brevets/controls/mi,brevets/controls/location,brevets/controls/open\r\n', '200,02/02/2024,00:00,0,0,Starting Point,02/02/2024 00:00\r\n', '200,02/02/2024,00:00,100,62.1,,02/02/2024 02:56\r\n', '200,02/02/2024,00:00,150,93.2,Second Checkpoint,02/02/2024 04:25\r\n', '200,02/02/2024,00:00,200,124.3,Last Checkpoint,02/02/2024 05:53\r\n', '1000,02/02/2024,00:00,0,0,begin,02/02/2024 00:00\r\n', '1000,02/02/2024,00:00,1000,621.4,finish line,02/02/2024 09:05\r\n']
+> Called 'http://localhost:5001/listCloseOnly/csv expecting
+(['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/close,brevets/controls/1/km,brevets/controls/1/mi,brevets/controls/1/location,brevets/controls/1/close,brevets/controls/2/km,brevets/controls/2/mi,brevets/controls/2/location,brevets/controls/2/close,brevets/controls/3/km,brevets/controls/3/mi,brevets/controls/3/location,brevets/controls/3/close', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 1:00,100,62.1,,2/2/24 6:40,150,93.2,Second Checkpoint,2/2/24 10:00,200,124.3,Last Checkpoint,2/2/24 13:30', '1000,2/2/24,0:00,0,0,begin,2/2/24 1:00,1000,621.4,finish line,2/2/24 3:00,,,,,,,,', '', '', '', ''], ['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/close', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 1:00200,2/2/24,0:00,100,62.1,,2/2/24 6:40', '200,2/2/24,0:00,150,93.2,Second Checkpoint,2/2/24 10:00', '200,2/2/24,0:00,200,124.3,Last Checkpoint,2/2/24 13:30', '1000,2/2/24,0:00,0,0,begin,2/2/24 1:00', '1000,2/2/24,0:00,1000,621.4,finish line,2/2/24 3:00', ''])
+Got:
+['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/km,brevets/controls/mi,brevets/controls/location,brevets/controls/close\r\n', '200,02/02/2024,00:00,0,0,Starting Point,02/02/2024 01:00\r\n', '200,02/02/2024,00:00,100,62.1,,02/02/2024 06:40\r\n', '200,02/02/2024,00:00,150,93.2,Second Checkpoint,02/02/2024 10:00\r\n', '200,02/02/2024,00:00,200,124.3,Last Checkpoint,02/02/2024 13:30\r\n', '1000,02/02/2024,00:00,0,0,begin,02/02/2024 01:00\r\n', '1000,02/02/2024,00:00,1000,621.4,finish line,02/02/2024 03:00\r\n']
+
+```
+
+#### Task-20 [FAILED, 15.0/15]
+- **Goal**: Read and validate json data (listAll/json, listOpenOnly/json, listCloseOnly/json)
+- **Result**: Feedback from us and/or the system:
+
+```
+> Called 'http://localhost:5001/listAll/json expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'open': '02/02/2024 02:56', 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05', 'close': '02/02/2024 03:00'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'open': '02/02/2024 02:56', 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05', 'close': '02/02/2024 03:00'}]}]}
+> Called 'http://localhost:5001/listOpenOnly/json expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'open': '02/02/2024 02:56'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'open': '02/02/2024 02:56'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'open': '02/02/2024 04:25'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'open': '02/02/2024 05:53'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05'}]}]}
+> Called 'http://localhost:5001/listCloseOnly/json expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'close': '02/02/2024 03:00'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'close': '02/02/2024 06:40'}, {'km': 150, 'mi': 93.2, 'location': 'Second Checkpoint', 'close': '02/02/2024 10:00'}, {'km': 200, 'mi': 124.3, 'location': 'Last Checkpoint', 'close': '02/02/2024 13:30'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'close': '02/02/2024 03:00'}]}]}
+
+```
+
+#### Task-21 [FAILED, 20.0/20]
+- **Goal**: Read and validate query-based data (i.e., top=k): (listOpenOnly/csv?top=2, listOpenOnly/json?top=2, listCloseOnly/csv?top=2, listCloseOnly/json?top=2)
+- **Result**: Feedback from us and/or the system:
+
+```
+> Called 'http://localhost:5001/listOpenOnly/csv?top=2 expecting
+(['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/open,brevets/controls/1/km,brevets/controls/1/mi,brevets/controls/1/location,brevets/controls/1/open', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 0:00,100,62.1,,2/2/24 2:56', '1000,2/2/24,0:00,0,0,begin,2/2/24 0:00,1000,621.4,finish line,2/2/24 9:05', '', ''], ['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/open', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 0:00', '200,2/2/24,0:00,100,62.1,,2/2/24 2:56', '1000,2/2/24,0:00,0,0,begin,2/2/24 0:00', '1000,2/2/24,0:00,1000,621.4,finish line,2/2/24 9:05'])
+Got:
+['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/km,brevets/controls/mi,brevets/controls/location,brevets/controls/open\r\n', '200,02/02/2024,00:00,0,0,Starting Point,02/02/2024 00:00\r\n', '200,02/02/2024,00:00,100,62.1,,02/02/2024 02:56\r\n', '1000,02/02/2024,00:00,0,0,begin,02/02/2024 00:00\r\n', '1000,02/02/2024,00:00,1000,621.4,finish line,02/02/2024 09:05\r\n']
+> Called 'http://localhost:5001/listCloseOnly/csv?top=2 expecting
+(['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/close,brevets/controls/1/km,brevets/controls/1/mi,brevets/controls/1/location,brevets/controls/1/close', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 1:00,100,62.1,,2/2/24 6:40', '1000,2/2/24,0:00,0,0,begin,2/2/24 1:00,1000,621.4,finish line,2/2/24 3:00', '', ''], ['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/0/km,brevets/controls/0/mi,brevets/controls/0/location,brevets/controls/0/close', '200,2/2/24,0:00,0,0,Starting Point,2/2/24 1:00', '200,2/2/24,0:00,100,62.1,,2/2/24 6:40', '1000,2/2/24,0:00,0,0,begin,2/2/24 1:00', '1000,2/2/24,0:00,1000,621.4,finish line,2/2/24 3:00'])
+Got:
+['brevets/distance,brevets/begin_date,brevets/begin_time,brevets/controls/km,brevets/controls/mi,brevets/controls/location,brevets/controls/close\r\n', '200,02/02/2024,00:00,0,0,Starting Point,02/02/2024 01:00\r\n', '200,02/02/2024,00:00,100,62.1,,02/02/2024 06:40\r\n', '1000,02/02/2024,00:00,0,0,begin,02/02/2024 01:00\r\n', '1000,02/02/2024,00:00,1000,621.4,finish line,02/02/2024 03:00\r\n']
+> Called 'http://localhost:5001/listOpenOnly/json?top=2 expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'open': '02/02/2024 02:56'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'open': '02/02/2024 00:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'open': '02/02/2024 02:56'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'open': '02/02/2024 00:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'open': '02/02/2024 09:05'}]}]}
+> Called 'http://localhost:5001/listCloseOnly/json?top=2 expecting
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': None, 'close': '02/02/2024 06:40'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'close': '02/02/2024 03:00'}]}]}
+Got:
+{'brevets': [{'distance': 200, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'Starting Point', 'close': '02/02/2024 01:00'}, {'km': 100, 'mi': 62.1, 'location': 'None', 'close': '02/02/2024 06:40'}]}, {'distance': 1000, 'begin_date': '02/02/2024', 'begin_time': '00:00', 'controls': [{'km': 0, 'mi': 0, 'location': 'begin', 'close': '02/02/2024 01:00'}, {'km': 1000, 'mi': 621.4, 'location': 'finish line', 'close': '02/02/2024 03:00'}]}]}
+
+```
+
+#### Task-22 [PASSED, 30.0/30]
+- **Goal**: Implemented a working and user-friendly consumer program?
+- **Result**: Feedback from us and/or the system:
+
+```
+Yes, the solution satisfy the requirements
+```
+
+#### Task-23 [PASSED, 0/0]
+- **Goal**: Stop the all services!
+- **Result**: Feedback from us and/or the system:
+
+```
+> Stopping and delete all services.
+> Command: 'docker-compose --project-directory /Users/zalsaeed/Documents/qu/492/it492-all-things-considered/projects-and-its-grading/project-6/submissions/repos/411107965/brevets -f /Users/zalsaeed/Documents/qu/492/it492-all-things-considered/projects-and-its-grading/project-6/submissions/repos/411107965/brevets/docker-compose.yml --project-name 411107965 down -v'
+
+```
+