From f2ef0d70145adf8b8562f2d052b548bee3ceb990 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Tue, 28 Mar 2023 21:23:21 -0400 Subject: [PATCH 01/81] Updated Group Members --- SRS.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 SRS.md diff --git a/SRS.md b/SRS.md new file mode 100644 index 00000000..ef777666 --- /dev/null +++ b/SRS.md @@ -0,0 +1,79 @@ +# Software Requirements Specification Document + +This serves as a template for each projects' Software Requirements Specification (SRS) document. When filling this out, you will be required to create user stories, use cases, requirements, and a glossary of terms relevant to your project. Each group member must contribute to every section, so it is crucial that your group's GitHub repository shows a commit history that reflects the work of each group member. It is highly recommended that you create separate branches for each member, but since this is one single document, you will need to manually merge the branches together. It is also advisable to have multiple working versions of this document (named separately) so that one person can compile the final SRS document from the multiple working versions. Ultimately, how you go about managing this is up to you, but consistent formatting, clear commit messages, and a thorough commit history with contributions from each group member are required. + +Fill the document out following the guidelines listed in each section. Maintain [proper Markdown syntax](https://www.markdownguide.org/basic-syntax/) and be sure that your group has a `main` branch with this document and the entire [template repository codebase](https://github.com/david-gary/onlineStoreTemplate) either forked or downloaded and copied into your group's repository. If you have arranged to use a different codebase as a template, you do not need to have the original template included, but a `main` branch is still required. + +## Group Members + +* [Sreyas Kodukulla](skodukul@uncc.edu) +* [Name](mmailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) + +## Revisions + +When a change is made to the document, a new revision should be created. The revision should be added to the table below with all information filled out. + +| Version | Date | Description | Author | Reviewed By | +| --- | --- | --- | --- | --- | +| 1.0 | 03/22/23 | Initial draft | [David Gary](mailto:dgary9@uncc.edu) | [David Gary](mailto:dgary@uncc.edu) | + +## Table of Contents + +1. [Introduction](#introduction) +2. [Requirements](#requirements) +3. [Constraints](#constraints) +4. [Use Cases](#use-cases) +5. [User Stories](#user-stories) +6. [Glossary](#glossary) + +## Introduction + +In this section, you should give a brief overview of what your project will be. Describe the software system you are building and what problems it solves. You should also give a short description of the stakeholders (users of the system) and what their needs are. There is no set formatting requirement, but you should maintain a consistent structure across future sections. Not all members must contribute to this section. + +## Requirements + +Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: + +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. + +## Constraints + +In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. + +## Use Cases + +In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: + +* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. + * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. + * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. + * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. + +## User Stories + +In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: + +* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. + * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. + +## Glossary + +In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: + +* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. + * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. From aee68998925265479344925bdd27ba1555ef5d94 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Tue, 28 Mar 2023 22:00:08 -0400 Subject: [PATCH 02/81] init --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index ef777666..2926ed8a 100644 --- a/SRS.md +++ b/SRS.md @@ -6,7 +6,7 @@ Fill the document out following the guidelines listed in each section. Maintain ## Group Members -* [Sreyas Kodukulla](skodukul@uncc.edu) +* [Name](mmailto:email@uncc.edu) * [Name](mmailto:email@uncc.edu) * [Name](mmailto:email@uncc.edu) * [Name](mmailto:email@uncc.edu) From 6e377a28e9130fb1505d6d9aa60f2e02962a17af Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Tue, 28 Mar 2023 22:03:44 -0400 Subject: [PATCH 03/81] updated group members --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 2926ed8a..379549a1 100644 --- a/SRS.md +++ b/SRS.md @@ -6,7 +6,7 @@ Fill the document out following the guidelines listed in each section. Maintain ## Group Members -* [Name](mmailto:email@uncc.edu) +* [Sreyas Kodukulla](mmailto:skodukul@uncc.edu) * [Name](mmailto:email@uncc.edu) * [Name](mmailto:email@uncc.edu) * [Name](mmailto:email@uncc.edu) From 262d4de717130fa613bd5cf620452b4bac2fc459 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Tue, 28 Mar 2023 22:09:29 -0400 Subject: [PATCH 04/81] update to introduction --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 379549a1..5eacba2d 100644 --- a/SRS.md +++ b/SRS.md @@ -30,7 +30,7 @@ When a change is made to the document, a new revision should be created. The rev ## Introduction -In this section, you should give a brief overview of what your project will be. Describe the software system you are building and what problems it solves. You should also give a short description of the stakeholders (users of the system) and what their needs are. There is no set formatting requirement, but you should maintain a consistent structure across future sections. Not all members must contribute to this section. +introduction draft (replace above with final draft): The idea for our project is to create a hand on jewlery store. We will build a system that allows specific commands to be able to search for jewlery based on the type and the material. ## Requirements From a9935e4567a6b4415c213af9d68387424b65b1cc Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 29 Mar 2023 10:47:55 -0400 Subject: [PATCH 05/81] Create testinggithub.txt --- testinggithub.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 testinggithub.txt diff --git a/testinggithub.txt b/testinggithub.txt new file mode 100644 index 00000000..30d74d25 --- /dev/null +++ b/testinggithub.txt @@ -0,0 +1 @@ +test \ No newline at end of file From 6f3a89656388cdb9062e59debcb4681578ddf04a Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 29 Mar 2023 10:50:53 -0400 Subject: [PATCH 06/81] Delete testinggithub.txt --- testinggithub.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 testinggithub.txt diff --git a/testinggithub.txt b/testinggithub.txt deleted file mode 100644 index 30d74d25..00000000 --- a/testinggithub.txt +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file From fdd6e47920d094bb22a5e150d9e5e646987d1aa8 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Wed, 29 Mar 2023 11:12:46 -0400 Subject: [PATCH 07/81] delete introduction update --- SRS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 5eacba2d..daf82676 100644 --- a/SRS.md +++ b/SRS.md @@ -30,7 +30,8 @@ When a change is made to the document, a new revision should be created. The rev ## Introduction -introduction draft (replace above with final draft): The idea for our project is to create a hand on jewlery store. We will build a system that allows specific commands to be able to search for jewlery based on the type and the material. +In this section, you should give a brief overview of what your project will be. Describe the software system you are building and what problems it solves. You should also give a short description of the stakeholders (users of the system) and what their needs are. There is no set formatting requirement, but you should maintain a consistent structure across future sections. Not all members must contribute to this section. + ## Requirements From cef680bb99c40f3a9eef46e6b2350c007a33d914 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Wed, 29 Mar 2023 11:14:35 -0400 Subject: [PATCH 08/81] group.md file commit --- group.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 group.md diff --git a/group.md b/group.md new file mode 100644 index 00000000..16bff819 --- /dev/null +++ b/group.md @@ -0,0 +1,22 @@ +# Group Members + +## Mercere Baker + +- **Github Username:** mercerebaker +- **Niner Net ID:** mbaker89@uncc.edu + +## Blaise Thomas + +- **Github Username:** blaisethomas20 +- **Niner Net ID:** bthom108@uncc.edu +- **Role:** Developer + +## Akanimoh Joseph Umoren + +- **Github Username:** oneofthejoesephs +- **Niner Net ID:** aumoren@uncc.edu + +## Sreyas Kodukulla + +- **Github Username:** sreyaskodukulla +- **Niner Net ID:** skodukul@uncc.edu From d7459f26df5edd3f528289219d68fee2d32a18ec Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Wed, 29 Mar 2023 11:22:48 -0400 Subject: [PATCH 09/81] Added SRS --- SRS.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ group.md | 22 ++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 SRS.md create mode 100644 group.md diff --git a/SRS.md b/SRS.md new file mode 100644 index 00000000..492b946f --- /dev/null +++ b/SRS.md @@ -0,0 +1,79 @@ +# Software Requirements Specification Document + +This serves as a template for each projects' Software Requirements Specification (SRS) document. When filling this out, you will be required to create user stories, use cases, requirements, and a glossary of terms relevant to your project. Each group member must contribute to every section, so it is crucial that your group's GitHub repository shows a commit history that reflects the work of each group member. It is highly recommended that you create separate branches for each member, but since this is one single document, you will need to manually merge the branches together. It is also advisable to have multiple working versions of this document (named separately) so that one person can compile the final SRS document from the multiple working versions. Ultimately, how you go about managing this is up to you, but consistent formatting, clear commit messages, and a thorough commit history with contributions from each group member are required. + +Fill the document out following the guidelines listed in each section. Maintain [proper Markdown syntax](https://www.markdownguide.org/basic-syntax/) and be sure that your group has a `main` branch with this document and the entire [template repository codebase](https://github.com/david-gary/onlineStoreTemplate) either forked or downloaded and copied into your group's repository. If you have arranged to use a different codebase as a template, you do not need to have the original template included, but a `main` branch is still required. + +## Group Members + +* [Name](mailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) + +## Revisions + +When a change is made to the document, a new revision should be created. The revision should be added to the table below with all information filled out. + +| Version | Date | Description | Author | Reviewed By | +| --- | --- | --- | --- | --- | +| 1.0 | 03/22/23 | Initial draft | [David Gary](mailto:dgary9@uncc.edu) | [David Gary](mailto:dgary@uncc.edu) | + +## Table of Contents + +1. [Introduction](#introduction) +2. [Requirements](#requirements) +3. [Constraints](#constraints) +4. [Use Cases](#use-cases) +5. [User Stories](#user-stories) +6. [Glossary](#glossary) + +## Introduction + +Blaise Thomas Jewelry Store + +## Requirements + +Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: + +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. + +## Constraints + +In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. + +## Use Cases + +In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: + +* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. + * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. + * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. + * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. + +## User Stories + +In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: + +* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. + * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. + +## Glossary + +In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: + +* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. + * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. diff --git a/group.md b/group.md new file mode 100644 index 00000000..239a1b35 --- /dev/null +++ b/group.md @@ -0,0 +1,22 @@ +# Group Members + +## Blaise Thomas + +- **Github Username:** blaiseThomas20 +- **Niner Net ID:** bthom108 + +## Mercere Baker + +- **Github Username:** MercerBaker +- **Niner Net ID:** mbaker89 +- **Role:** Developer + +## Akanimoh Joesph Umoren + +- **Github Username:** oneofthejoesephs +- **Niner Net ID:** aumoren + +## Sreyas Kodukulla + +- **Github Username:** SreyasKodukulla +- **Niner Net ID:** skodukul From 2446402720cdf48cc74bdbbace84bc84ff628b7a Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Wed, 29 Mar 2023 11:25:05 -0400 Subject: [PATCH 10/81] Test 2 Test 2 --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 492b946f..e5237114 100644 --- a/SRS.md +++ b/SRS.md @@ -31,7 +31,7 @@ When a change is made to the document, a new revision should be created. The rev ## Introduction Blaise Thomas Jewelry Store - +Blaise Thomas VS Code Test 2 ## Requirements Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: From 7562086f928f14864975633485fcb354ed5d0667 Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Wed, 29 Mar 2023 11:27:10 -0400 Subject: [PATCH 11/81] TEST 2 --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index e5237114..6f00ecae 100644 --- a/SRS.md +++ b/SRS.md @@ -31,7 +31,7 @@ When a change is made to the document, a new revision should be created. The rev ## Introduction Blaise Thomas Jewelry Store -Blaise Thomas VS Code Test 2 +Blaise Thomas VS Code Test 2 ## Requirements Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: From a885a4612338bec1d6436dc0b6a168d5f66344af Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Wed, 29 Mar 2023 11:40:37 -0400 Subject: [PATCH 12/81] Update to introduction --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index daf82676..c9351110 100644 --- a/SRS.md +++ b/SRS.md @@ -30,7 +30,7 @@ When a change is made to the document, a new revision should be created. The rev ## Introduction -In this section, you should give a brief overview of what your project will be. Describe the software system you are building and what problems it solves. You should also give a short description of the stakeholders (users of the system) and what their needs are. There is no set formatting requirement, but you should maintain a consistent structure across future sections. Not all members must contribute to this section. +The idea for our project is to create a hands on jewlery store. We will build a system that has features to be able to search for jewlery based on the type and the material. The software system will allow users to perform filtered searches, create a wishlist or shopping cart for any items, and it will also display every item and give a brief description of it. Our stakeholders are the individual customers that are interested in buying products from our store. Their needs are the products we offer and we will give them the ability to browse through to find the right item to fit their needs. ## Requirements From 4d6164f835ad51f8498e5ac443235681a3c68fe9 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Wed, 29 Mar 2023 11:57:58 -0400 Subject: [PATCH 13/81] Update Constraint 1 (line 57) --- SRS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SRS.md b/SRS.md index c9351110..8d69cacd 100644 --- a/SRS.md +++ b/SRS.md @@ -54,6 +54,8 @@ Each group member must supply at least three functional requirements for the pro In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. +Constraint 1: We cannot include recommended items because we can't collect the user data to narrow it down. + ## Use Cases In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: From 480d2c69165975c96e251799aa60ca95a1526355 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Wed, 29 Mar 2023 12:01:40 -0400 Subject: [PATCH 14/81] Update constraint 2 (line 58) --- SRS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/SRS.md b/SRS.md index 8d69cacd..d0d9c175 100644 --- a/SRS.md +++ b/SRS.md @@ -55,6 +55,7 @@ Each group member must supply at least three functional requirements for the pro In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. Constraint 1: We cannot include recommended items because we can't collect the user data to narrow it down. +Constraint 2: Stakeholder cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. ## Use Cases From e58299889041a5d01207b04e30a7d76ae43109ae Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Wed, 29 Mar 2023 12:02:04 -0400 Subject: [PATCH 15/81] update constratint 2 (line 58) --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index d0d9c175..dbac6e52 100644 --- a/SRS.md +++ b/SRS.md @@ -55,7 +55,7 @@ Each group member must supply at least three functional requirements for the pro In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. Constraint 1: We cannot include recommended items because we can't collect the user data to narrow it down. -Constraint 2: Stakeholder cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. +Constraint 2: Stakeholders cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. ## Use Cases From a433951a2ca6af722732b79fcff79ca539e7b2e0 Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 29 Mar 2023 12:12:21 -0400 Subject: [PATCH 16/81] Constraint 7/8. Line 63/64 --- SRS.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 SRS.md diff --git a/SRS.md b/SRS.md new file mode 100644 index 00000000..5374ef56 --- /dev/null +++ b/SRS.md @@ -0,0 +1,89 @@ +# Software Requirements Specification Document + +This serves as a template for each projects' Software Requirements Specification (SRS) document. When filling this out, you will be required to create user stories, use cases, requirements, and a glossary of terms relevant to your project. Each group member must contribute to every section, so it is crucial that your group's GitHub repository shows a commit history that reflects the work of each group member. It is highly recommended that you create separate branches for each member, but since this is one single document, you will need to manually merge the branches together. It is also advisable to have multiple working versions of this document (named separately) so that one person can compile the final SRS document from the multiple working versions. Ultimately, how you go about managing this is up to you, but consistent formatting, clear commit messages, and a thorough commit history with contributions from each group member are required. + +Fill the document out following the guidelines listed in each section. Maintain [proper Markdown syntax](https://www.markdownguide.org/basic-syntax/) and be sure that your group has a `main` branch with this document and the entire [template repository codebase](https://github.com/david-gary/onlineStoreTemplate) either forked or downloaded and copied into your group's repository. If you have arranged to use a different codebase as a template, you do not need to have the original template included, but a `main` branch is still required. + +## Group Members + +* [Name](mailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) +* [Mercere Baker](mmailto:mbaker89@uncc.edu) + +## Revisions + +When a change is made to the document, a new revision should be created. The revision should be added to the table below with all information filled out. + +| Version | Date | Description | Author | Reviewed By | +| --- | --- | --- | --- | --- | +| 1.0 | 03/22/23 | Initial draft | [David Gary](mailto:dgary9@uncc.edu) | [David Gary](mailto:dgary@uncc.edu) | + +## Table of Contents + +1. [Introduction](#introduction) +2. [Requirements](#requirements) +3. [Constraints](#constraints) +4. [Use Cases](#use-cases) +5. [User Stories](#user-stories) +6. [Glossary](#glossary) + +## Introduction + +In this section, you should give a brief overview of what your project will be. Describe the software system you are building and what problems it solves. You should also give a short description of the stakeholders (users of the system) and what their needs are. There is no set formatting requirement, but you should maintain a consistent structure across future sections. Not all members must contribute to this section. + +## Requirements + +Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: + +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. + +## Constraints + +In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. + + + + + + + + +Constraint 7: This project's code is written using Python, HTML, CSS, and Javascript. +Contstraint 8: The project has to be finished by the end of UNCC's 2023 spring semester. + +## Use Cases + +In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: + +* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. + * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. + * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. + * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. + +## User Stories + +In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: + +* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. + * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. + +## Glossary + +In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: + +* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. + * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. From fda1da444c51f623a0e92ec59d5fa4c46349ffd2 Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Wed, 29 Mar 2023 12:16:16 -0400 Subject: [PATCH 17/81] Constraint --- SRS.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/SRS.md b/SRS.md index 6f00ecae..3958a5f1 100644 --- a/SRS.md +++ b/SRS.md @@ -8,7 +8,7 @@ Fill the document out following the guidelines listed in each section. Maintain * [Name](mailto:email@uncc.edu) * [Name](mmailto:email@uncc.edu) -* [Name](mmailto:email@uncc.edu) +* [Blaise Thomas](mmailto:bthom108@uncc.edu) * [Name](mmailto:email@uncc.edu) ## Revisions @@ -30,8 +30,8 @@ When a change is made to the document, a new revision should be created. The rev ## Introduction -Blaise Thomas Jewelry Store -Blaise Thomas VS Code Test 2 +The idea for our project is to create a hands on jewlery store. We will build a system that has features to be able to search for jewlery based on the type and the material. The software system will allow users to perform filtered searches, create a wishlist or shopping cart for any items, and it will also display every item and give a brief description of it. Our stakeholders are the individual customers that are interested in buying products from our store. Their needs are the products we offer and we will give them the ability to browse through to find the right item to fit their needs. + ## Requirements Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: @@ -53,6 +53,13 @@ Each group member must supply at least three functional requirements for the pro In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. + + + + + +Constraint 4: No automated payments accepted, Only Debit/Credit Cards. No Refunds + ## Use Cases In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: From 31e4570da3179479499230b7f4cdc8fadf9f7ad5 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Wed, 29 Mar 2023 12:17:15 -0400 Subject: [PATCH 18/81] 10, 59, 60 --- SRS.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 SRS.md diff --git a/SRS.md b/SRS.md new file mode 100644 index 00000000..2bca7f71 --- /dev/null +++ b/SRS.md @@ -0,0 +1,89 @@ +# Software Requirements Specification Document + +This serves as a template for each projects' Software Requirements Specification (SRS) document. When filling this out, you will be required to create user stories, use cases, requirements, and a glossary of terms relevant to your project. Each group member must contribute to every section, so it is crucial that your group's GitHub repository shows a commit history that reflects the work of each group member. It is highly recommended that you create separate branches for each member, but since this is one single document, you will need to manually merge the branches together. It is also advisable to have multiple working versions of this document (named separately) so that one person can compile the final SRS document from the multiple working versions. Ultimately, how you go about managing this is up to you, but consistent formatting, clear commit messages, and a thorough commit history with contributions from each group member are required. + +Fill the document out following the guidelines listed in each section. Maintain [proper Markdown syntax](https://www.markdownguide.org/basic-syntax/) and be sure that your group has a `main` branch with this document and the entire [template repository codebase](https://github.com/david-gary/onlineStoreTemplate) either forked or downloaded and copied into your group's repository. If you have arranged to use a different codebase as a template, you do not need to have the original template included, but a `main` branch is still required. + +## Group Members + +* [Name](mailto:email@uncc.edu) +* [Akanimoh Joseph Umoren](mmailto:aumoren@uncc.edu) +* [Name](mmailto:email@uncc.edu) +* [Name](mmailto:email@uncc.edu) + +## Revisions + +When a change is made to the document, a new revision should be created. The revision should be added to the table below with all information filled out. + +| Version | Date | Description | Author | Reviewed By | +| --- | --- | --- | --- | --- | +| 1.0 | 03/22/23 | Initial draft | [David Gary](mailto:dgary9@uncc.edu) | [David Gary](mailto:dgary@uncc.edu) | + +## Table of Contents + +1. [Introduction](#introduction) +2. [Requirements](#requirements) +3. [Constraints](#constraints) +4. [Use Cases](#use-cases) +5. [User Stories](#user-stories) +6. [Glossary](#glossary) + +## Introduction + +In this section, you should give a brief overview of what your project will be. Describe the software system you are building and what problems it solves. You should also give a short description of the stakeholders (users of the system) and what their needs are. There is no set formatting requirement, but you should maintain a consistent structure across future sections. Not all members must contribute to this section. + +## Requirements + +Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: + +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. +* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. + * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. + * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. + * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. + * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. + +## Constraints + +In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. + + + + +Constraint 3: We do not display stakeholder reviews on our products. +Constraint 4: We do not control delivery prices because we deliver products using a third party delivery system. + + + + + +## Use Cases + +In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: + +* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. + * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. + * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. + * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. + +## User Stories + +In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: + +* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). + * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. + * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. + +## Glossary + +In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: + +* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. + * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. From c4ab64c8295dd6ef51e7e440e86f8c7135bbd3e9 Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Wed, 29 Mar 2023 12:17:38 -0400 Subject: [PATCH 19/81] main branch test --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 3958a5f1..41d717f5 100644 --- a/SRS.md +++ b/SRS.md @@ -58,7 +58,7 @@ In this section, you should list any constraints that you have for the project. -Constraint 4: No automated payments accepted, Only Debit/Credit Cards. No Refunds +Constraint 4: No automated payments accepted, Only Debit/Credit Cards. No Refunds Main branch ## Use Cases From f37cd84eb46a316bfad63df500924d05627a2ed6 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Wed, 29 Mar 2023 12:23:58 -0400 Subject: [PATCH 20/81] Create group.md --- group.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 group.md diff --git a/group.md b/group.md new file mode 100644 index 00000000..40d737e0 --- /dev/null +++ b/group.md @@ -0,0 +1,22 @@ +# Group Members + +## Jane Doe + +- **Github Username:** jdoe +- **Niner Net ID:** jdoe + +## John Doe + +- **Github Username:** jdoe1 +- **Niner Net ID:** jdoe1 +- **Role:** Developer + +## Tim H + +- **Github Username:** electric-sun-20 +- **Niner Net ID:** theideck + +## Greg T + +- **Github Username:** vvile-film-archives +- **Niner Net ID:** gturk From ac83a0a9b3320026f1fc4f7f5bdc473a840f3162 Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 29 Mar 2023 13:03:55 -0400 Subject: [PATCH 21/81] Create group.md --- group.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 group.md diff --git a/group.md b/group.md new file mode 100644 index 00000000..9499b727 --- /dev/null +++ b/group.md @@ -0,0 +1,22 @@ +# Group Members + +## Blaise Thomas + +- **Github Username:** blaisethomas20 +- **Niner Net ID:** btom108 + +## Sreyas Kodukulla + +- **Github Username:** SreyasKodukulla +- **Niner Net ID:** skodukul + + +## Mercere Baker + +- **Github Username:** MercereBaker +- **Niner Net ID:** mbaker89 + +## Akaninoh Joseph Aumoren + +- **Github Username:** oneofthejosephs +- **Niner Net ID:** aumoren From 458561bbd66ec7f1aad976b4e2c63b4861805c98 Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 29 Mar 2023 14:11:35 -0400 Subject: [PATCH 22/81] Update group.md --- group.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/group.md b/group.md index 9499b727..abc4660d 100644 --- a/group.md +++ b/group.md @@ -2,12 +2,12 @@ ## Blaise Thomas -- **Github Username:** blaisethomas20 -- **Niner Net ID:** btom108 +- **Github Username:** BlaiseThomas20 +- **Niner Net ID:** bthom108 ## Sreyas Kodukulla -- **Github Username:** SreyasKodukulla +- **Github Username:** sreyaskodukulla - **Niner Net ID:** skodukul From 744fb4d3abc65e9872804af902d3e7d631fc2e47 Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Thu, 30 Mar 2023 15:15:29 -0400 Subject: [PATCH 23/81] Update SRS.md --- SRS.md | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/SRS.md b/SRS.md index 5374ef56..98b8bdd9 100644 --- a/SRS.md +++ b/SRS.md @@ -42,12 +42,25 @@ Each group member must supply at least three functional requirements for the pro * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. + + + + + + +REQ-7 + Description: Needs to have a shopping cart feature to hold their item(s) to purchase. + Type: Functional + Priority: 5 + Rationale: An online shopping cart is one of the foundations odf commerical websites to purchase products. + Testing: Trying to store items in the cart and then buying those items at checkout. + +REQ-8 + Description: Website needs to be clear to the clients. + Type: Non-functional + Priority: 2 + Rationale: Though good design is not necessary "functional," it is important for clients to be able to use the website intuitively and have it make sense to them. + Testing: HTML elements need to work as expected and the website should be redesigned until clear. ## Constraints @@ -73,6 +86,18 @@ In this section, you should list use cases for the project. Use cases are a thor * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. +UC-7 + Description: The customer is virtual window shopping and is navigating around the website. + Actors: The customer + Precondition: The customer can connect to the website + Postcondition: The customer should feel that navigation was simple and clear. The customer should not feel confused by going through our website. + +UC-8 + Description: The customer is trying to remove items from their shopping cart. + Actors: The customer + Precondition: The customer can connect to the website, the shopping cart is functional, the customer has put items in the shopping cart. + Postcondition: The customer's shopping cart no longer has the item in the shopping cart. If the shopping cart only has that item, it should be empty and unable to proceed to checkout. + ## User Stories In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: @@ -81,9 +106,19 @@ In this section, you should list user stories for the project. User stories are * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. + + US-7 + Type of User: Customer + Description: The customer found our website and is interested in purchasing a piece of our jewelry. They browse the site, put an item in their shopping cart, click on the shopping cart icon, get taken to a checkout page, and confirm the order with an address and card information. + US-8 + Type of User: IT + Description: The customer has a question about the website or has problems purchasing their items. They can send their issues to the provided email to have it checked out. + ## Glossary In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: * **Term:** The term that is being defined. This should be a single word or phrase that is being defined. * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. + + shopping cart: software to allow customers to select products and buy them on the web. From a52142dc6b7400295f52afb1fa8090cacc835d6a Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Thu, 30 Mar 2023 16:08:56 -0400 Subject: [PATCH 24/81] Update SRS.md --- SRS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/SRS.md b/SRS.md index 98b8bdd9..74d14440 100644 --- a/SRS.md +++ b/SRS.md @@ -62,6 +62,13 @@ REQ-8 Rationale: Though good design is not necessary "functional," it is important for clients to be able to use the website intuitively and have it make sense to them. Testing: HTML elements need to work as expected and the website should be redesigned until clear. +REQ-9 + Description: Checkout should only be available if there is at least one item in the shopping cart. + Type: Functional + Priority: 4 + Rationale: Customers shouldn't be prompted to enter their card information if they're not about to buy anything. + Testing: When clicking on checkout, it should only proceed if there is an item in the cart. + ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. From 1fb52eb2b2ed194e6dd478bf2e35d920a3dcc621 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 16:20:54 -0400 Subject: [PATCH 25/81] SRS BLAISE CHANGE FROM MAC --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 41d717f5..ecc9f3ad 100644 --- a/SRS.md +++ b/SRS.md @@ -48,7 +48,7 @@ Each group member must supply at least three functional requirements for the pro * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. - +TESTINGTESTING12 ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. From ded70e401fde505f003b6a6aa0b785048691bf54 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 16:22:01 -0400 Subject: [PATCH 26/81] MACH CHANGE --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index ecc9f3ad..9a2a7485 100644 --- a/SRS.md +++ b/SRS.md @@ -48,7 +48,7 @@ Each group member must supply at least three functional requirements for the pro * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -TESTINGTESTING12 +TESTINGTESTING123 ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. From d97fe23af1db2ba07623b79b28e0318046abf96e Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 16:23:36 -0400 Subject: [PATCH 27/81] srs mac chang --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 41d717f5..47239ce4 100644 --- a/SRS.md +++ b/SRS.md @@ -48,7 +48,7 @@ Each group member must supply at least three functional requirements for the pro * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. - +booty ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. From 03927e691178b0d196077b1f528d8bce8b01c98d Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Thu, 30 Mar 2023 16:26:15 -0400 Subject: [PATCH 28/81] Update SRS.md --- SRS.md | 110 ++++++++++++++++++++------------------------------------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/SRS.md b/SRS.md index 74d14440..09acd4a0 100644 --- a/SRS.md +++ b/SRS.md @@ -36,50 +36,31 @@ In this section, you should give a brief overview of what your project will be. Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. - - - - - - -REQ-7 - Description: Needs to have a shopping cart feature to hold their item(s) to purchase. - Type: Functional - Priority: 5 - Rationale: An online shopping cart is one of the foundations odf commerical websites to purchase products. - Testing: Trying to store items in the cart and then buying those items at checkout. - -REQ-8 - Description: Website needs to be clear to the clients. - Type: Non-functional - Priority: 2 - Rationale: Though good design is not necessary "functional," it is important for clients to be able to use the website intuitively and have it make sense to them. - Testing: HTML elements need to work as expected and the website should be redesigned until clear. - -REQ-9 - Description: Checkout should only be available if there is at least one item in the shopping cart. - Type: Functional - Priority: 4 - Rationale: Customers shouldn't be prompted to enter their card information if they're not about to buy anything. - Testing: When clicking on checkout, it should only proceed if there is an item in the cart. +* **ID:** REQ-10 + * **Description:** Needs to have a shopping cart feature to hold their item(s) to purchase. + * **Type:** Functional + * **Priority:** 5 + * **Rationale:** An online shopping cart is one of the foundations odf commerical websites to purchase products. + * **Testing:** Trying to store items in the cart and then buying those items at checkout. + +* **ID:** REQ-11 + * **Description:** Website needs to be clear to the clients. + * **Type:** Non-functional + * **Priority:** 2 + * **Rationale:** Though good design is not necessary "functional," it is important for clients to be able to use the website intuitively and have it make sense to them. + * **Testing:** HTML elements need to work as expected and the website should be redesigned until clear. + +* **ID:** REQ-12 + * **Description:** Checkout should only be available if there is at least one item in the shopping cart. + * **Type:** Functional + * **Priority:** 4 + * **Rationale:** Customers shouldn't be prompted to enter their card information if they're not about to buy anything. + * **Testing:** When clicking on checkout, it should only proceed if there is an item in the cart. ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. - - - - - - - Constraint 7: This project's code is written using Python, HTML, CSS, and Javascript. Contstraint 8: The project has to be finished by the end of UNCC's 2023 spring semester. @@ -87,45 +68,32 @@ Contstraint 8: The project has to be finished by the end of UNCC's 2023 spring s In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: -* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. - * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. - * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. - * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. +* **ID:** UC-7 + * **Description:** The customer is virtual window shopping and is navigating around the website. + * **Actors:** The customer + * **Preconditions:** The customer can connect to the website + * **Postconditions:** The customer should feel that navigation was simple and clear. The customer should not feel confused by going through our website. -UC-7 - Description: The customer is virtual window shopping and is navigating around the website. - Actors: The customer - Precondition: The customer can connect to the website - Postcondition: The customer should feel that navigation was simple and clear. The customer should not feel confused by going through our website. - -UC-8 - Description: The customer is trying to remove items from their shopping cart. - Actors: The customer - Precondition: The customer can connect to the website, the shopping cart is functional, the customer has put items in the shopping cart. - Postcondition: The customer's shopping cart no longer has the item in the shopping cart. If the shopping cart only has that item, it should be empty and unable to proceed to checkout. +* **ID:** UC-8 + * **Description:** The customer is trying to remove items from their shopping cart. + * **Actors:** The customer + * **Preconditions:** The customer can connect to the website, the shopping cart is functional, the customer has put items in the shopping cart. + * **Postconditions:** The customer's shopping cart no longer has the item in the shopping cart. If the shopping cart only has that item, it should be empty and unable to proceed to checkout. ## User Stories -In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: - -* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. - * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. +In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format - - US-7 - Type of User: Customer - Description: The customer found our website and is interested in purchasing a piece of our jewelry. They browse the site, put an item in their shopping cart, click on the shopping cart icon, get taken to a checkout page, and confirm the order with an address and card information. - US-8 - Type of User: IT - Description: The customer has a question about the website or has problems purchasing their items. They can send their issues to the provided email to have it checked out. + * **ID:** US-7 + * **Type of User:** Customer + * **Description:** The customer found our website and is interested in purchasing a piece of our jewelry. They browse the site, put an item in their shopping cart, click on the shopping cart icon, get taken to a checkout page, and confirm the order with an address and card information. + * **ID:** US-8 + * **Type of User:** IT + * **Description:** The customer has a question about the website or has problems purchasing their items. They can send their issues to the provided email to have it checked out. ## Glossary In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: -* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. - * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. - - shopping cart: software to allow customers to select products and buy them on the web. + * **Term:** shopping cart + * **Definition:** software to allow customers to select products and buy them on the web. From 8ad4e3bfb349f67961c72905ebecc6e7d222396b Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 30 Mar 2023 17:25:18 -0400 Subject: [PATCH 29/81] update requirements, constraints, use cases, etc. --- SRS.md | 60 +++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/SRS.md b/SRS.md index dbac6e52..50d004fc 100644 --- a/SRS.md +++ b/SRS.md @@ -37,18 +37,26 @@ The idea for our project is to create a hands on jewlery store. We will build a Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. + * **ID:** REQ-1 + * **Description:** The customer is trying to use the filter search funtion to find the right type of chain. + * **Type:** Functional + * **Priority:** 4 + * **Rationale:** This is important because it will test a key feature of our store. + * **Testing:** We can test the requirement by seeing if the 'filter search' function returns the correct output after the user input. + + * **ID:** REQ-2 + * **Description:** The items will have a small description to help the users with their selections. + * **Type:** non-functional + * **Priority:** 3 + * **Rationale:** This is important because it makes the store easier to navigate. + * **Testing:** We will test this by seeing if the description shows once we finish the webpage. + + * **ID:** REQ-3 + * **Description:** The webiste needs to flow properly in the sense that the user should be able to follow the right path based on how they interact. Must have clear and consise UI. + * **Type:** functional + * **Priority:** 5 + * **Rationale:** This is important because if the user clicks to view chains, but rings show up instead, that means the webpage isn't up to the standards we want it to be at. + * **Testing:** We will test this by using the website after completeion and test the flow based on user input. ## Constraints @@ -61,11 +69,17 @@ Constraint 2: Stakeholders cannot choose from a very vast collection of items, o In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: -* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. - * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. - * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. - * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. + * **ID:** UC-1 + * **Description:** The customer is trying to utilize the filter search funtion. + * **Actors:** The customer + * **Preconditions:** There needs to be an option for filter search that is clear and easy to find. + * **Postconditions:** The search must come up with the proper result based on the filters that the customer applies. + + * **ID:** UC-2 + * **Description:** The customer should be able to properly view and read about every item we offer. + * **Actors:** The customer + * **Preconditions:** The items must be displayed in a neat and visually pleasing manner while also having the proper descriptions. + * **Postconditions:** Once the customer navigates to their desired item, they must be able to see the exact item they searched for with an image and description. ## User Stories @@ -75,9 +89,17 @@ In this section, you should list user stories for the project. User stories are * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. + * **ID:** US-1 + * **Type of User:** Customer + * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. + + * **ID:** US-2 + * **Type of User:** Customer + * **Description:** The user navigates to the item they desire. Once they do that, they click on the image of the item and are shown a brief description about what the item is to aid them with their shopping experience. + ## Glossary In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: -* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. - * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. +* **Term:** Filter Search + * **Definition:** the filter search is when a user can input certain things that they are looking for and not looking for (based on price, material, type) and will find items that match the conditions they have set in the search. From bc05347466d11fe8bfe4a7fc911d9c20204d63c2 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 17:35:39 -0400 Subject: [PATCH 30/81] Final Draft srs Blaise --- SRS.md | 68 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/SRS.md b/SRS.md index 47239ce4..48dccdc7 100644 --- a/SRS.md +++ b/SRS.md @@ -36,51 +36,61 @@ The idea for our project is to create a hands on jewlery store. We will build a Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -booty +* **ID:** REQ-7 + * **Description:** Different Page per product + * **Type:** Functional + * **Priority:** 1 + * **Rationale:** You'd have a list of the different products with images, onclick it will take you to just the + the Item itself + * **Testing:** Onclick should take you to different webPages +* **ID:** REQ-8 + * **Description:** FAQ PAGE + * **Type:** Non-Functional, gives people answers to FAQs + * **Priority:** 5 + * **Rationale:** When people have similar questions and need quick answers a FAQ page is usually what they'll seek out. + * **Testing:** Test page on click + * **ID:** REQ-9 + * **Description:** Works on Mobile + * **Type:** Functional + * **Priority:** 3 + * **Rationale:** Makes sure the Users have the same experience across all platforms + * **Testing:** Can test by adjusting window size + ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. - - - - -Constraint 4: No automated payments accepted, Only Debit/Credit Cards. No Refunds Main branch +Constraint 4: No automated payments accepted, Only Debit/Credit Cards. Only Available to US Region ## Use Cases In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: -* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. - * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. - * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. - * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. - +* **ID:** UC-5 + * **Description:** Making a singular webpage for each item with more depth of review and descriptions that also allows them to add to cart + * **Actors:** I will be building the web page, and adding the extra descriptions, Mercer will be going behind me to make sure the webpage will link to the checkout page + * **Preconditions:** Has to come from a previous page that was the items brief description, I.E Under the rings page it is the ring 3 Item, clicking that leads to the ring 3 Item webpage + * **Postconditions:** You've landed on the webpage for that specific item, complete with the photo, description, and add to cart button. + **ID:** UC-6 + * **Description:** Making sure that the webpages works across all devices + * **Actors:** I will be making sure that the customers can access the page from different devices, such as tablets, smartphones, and computers + * **Preconditions:** Has a device that can display webpage + * **Postconditions:** The webpage displays properly with no errors or loss in usability ## User Stories In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: -* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. - * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. +* **ID:** US-5 Web page that displays the item, a description, and an add to cart button for the user to purchase. + * **Type of User:** Customer + * **Description:** As I'm looking through the catalouge I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. +* **ID:** US-6 Web page that displays properly regardless of the device used to acess it. + * **Type of User:** Customer + * **Description:** As I'm looking through the catalogue I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. Later I told my friend about the website, and he accessed it from his phone to take a look at the item I ordered. He was impressed on how easy to use on mobile it was. ## Glossary In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: -* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. - * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. +* **Term:** Compatability + * **Definition:** A state in which two things are able to exist or occur together without problems or conflict. From 4219ff11d037f0126133a2a24ac1ce08510e7017 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Thu, 30 Mar 2023 17:42:23 -0400 Subject: [PATCH 31/81] Update SRS.md --- SRS.md | 65 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/SRS.md b/SRS.md index 2bca7f71..95cb5e98 100644 --- a/SRS.md +++ b/SRS.md @@ -36,18 +36,27 @@ In this section, you should give a brief overview of what your project will be. Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. + +* **ID:** REQ-4 + * **Description:** Website should ask the user to confirm their purchase before charging them. + * **Type:** Functional + * **Priority:** 2 + * **Rationale:** This is important so that the user does not accidentaly purchase items they do not mean to + * **Testing:** Trying to checkout the items in a cart, the user shoukld be prompted to confirm that the items are correct. + +* **ID:** REQ-5 + * **Description:** Wesite should have a navigation bar which displays the main types of items being sold + * **Type:** Functional + * **Priority:** 3 + * **Rationale:** This is important because it helps the user navigate the website easily. + * **Testing:** The webpage sould dsplay a visible navigation bar that can be used to go through the ite,s in the website easiy. + +* **ID:** REQ-6 + * **Description:** Upon payment, a confirmation of purchase should be displayed to the user + * **Type:** Functional + * **Priority:** 2 + * **Rationale:** This is important because it lets the user know that their purchase was successful. + * **Testing:** When the user pays for the items, they should be redirected to another page which displays a confirmation message and the details of their purchase like purchase id, shipping addresss, and delivery date. ## Constraints @@ -56,7 +65,7 @@ In this section, you should list any constraints that you have for the project. -Constraint 3: We do not display stakeholder reviews on our products. +Constraint 3: We do not display stakeholder reviews but we have admin reviews. Constraint 4: We do not control delivery prices because we deliver products using a third party delivery system. @@ -67,23 +76,31 @@ Constraint 4: We do not control delivery prices because we deliver products usin In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: -* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. - * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. - * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. - * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. +* **ID:** UC-3 + * **Description:** The customer clicks the checkout button + * **Actors:** The customer + * **Preconditions:** The customer has at least one item in their cart + * **Postconditions:** The items in the customer's cart are displayed and they are prompted to confirm that akll the items and their amounts are correct. + +* **ID:** UC-4 + * **Description:** The customer completes their purchase + * **Actors:** The customer + * **Preconditions:** The customer went through all the necessary purchase steps without any issues + * **Postconditions:** The customer is redirected to a page where a confirmation message of their order is displayed and other information about the details of th purchase is displayed as well. ## User Stories In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: -* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. - * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. +* **ID:** US-3 + * **Type of User:** Customer + * **Description:** The customer does not want to delete an item in cart that they do not want to purchase anymore. They click on the cart icon which lists the items in their cart and there is an option to remove each item from the cart. They successfully remove the item they do not need anymore. -## Glossary +* **ID:** US-4 + * **Type of User:** Customer + * **Description:** The customer is currently viewing necklaces and wants to look at rings instead. They use the navigation bar to successfully got to the ring section. In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: -* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. - * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. +* **Term:** Navigation bar + * **Definition:** The webpage element that helps users navigate through the use of hyperlinks. \ No newline at end of file From 27f1445f08caf8680918546cc9166cabe53abf66 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 17:55:52 -0400 Subject: [PATCH 32/81] Final Draft --- SRS.md | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 145 insertions(+), 4 deletions(-) diff --git a/SRS.md b/SRS.md index 48dccdc7..ff046929 100644 --- a/SRS.md +++ b/SRS.md @@ -6,10 +6,10 @@ Fill the document out following the guidelines listed in each section. Maintain ## Group Members -* [Name](mailto:email@uncc.edu) -* [Name](mmailto:email@uncc.edu) +* [Sreyas Kodukulla](mailto:skodukul.edu) +* [Akanimoh Joseph Umoren](mmailto:aumoren@uncc.edu) * [Blaise Thomas](mmailto:bthom108@uncc.edu) -* [Name](mmailto:email@uncc.edu) +* [Mercere Baker](mmailto:mbaker89@uncc.edu) ## Revisions @@ -36,6 +36,50 @@ The idea for our project is to create a hands on jewlery store. We will build a Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: +Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: + +* **ID:** REQ-1 + * **Description:** The customer is trying to use the filter search funtion to find the right type of chain. + * **Type:** Functional + * **Priority:** 4 + * **Rationale:** This is important because it will test a key feature of our store. + * **Testing:** We can test the requirement by seeing if the 'filter search' function returns the correct output after the user input. + +* **ID:** REQ-2 + * **Description:** The items will have a small description to help the users with their selections. + * **Type:** non-functional + * **Priority:** 3 + * **Rationale:** This is important because it makes the store easier to navigate. + * **Testing:** We will test this by seeing if the description shows once we finish the webpage. + +* **ID:** REQ-3 + * **Description:** The webiste needs to flow properly in the sense that the user should be able to follow the right path based on how they interact. Must have clear and consise UI. + * **Type:** functional + * **Priority:** 5 + * **Rationale:** This is important because if the user clicks to view chains, but rings show up instead, that means the webpage isn't up to the standards we want it to be at. + * **Testing:** We will test this by using the website after completeion and test the flow based on user input. + +* **ID:** REQ-4 + * **Description:** Website should ask the user to confirm their purchase before charging them. + * **Type:** Functional + * **Priority:** 2 + * **Rationale:** This is important so that the user does not accidentaly purchase items they do not mean to + * **Testing:** Trying to checkout the items in a cart, the user shoukld be prompted to confirm that the items are correct. + +* **ID:** REQ-5 + * **Description:** Wesite should have a navigation bar which displays the main types of items being sold + * **Type:** Functional + * **Priority:** 3 + * **Rationale:** This is important because it helps the user navigate the website easily. + * **Testing:** The webpage sould dsplay a visible navigation bar that can be used to go through the ite,s in the website easiy. + +* **ID:** REQ-6 + * **Description:** Upon payment, a confirmation of purchase should be displayed to the user + * **Type:** Functional + * **Priority:** 2 + * **Rationale:** This is important because it lets the user know that their purchase was successful. + * **Testing:** When the user pays for the items, they should be redirected to another page which displays a confirmation message and the details of their purchase like purchase id, shipping addresss, and delivery date. + * **ID:** REQ-7 * **Description:** Different Page per product * **Type:** Functional @@ -56,17 +100,68 @@ Each group member must supply at least three functional requirements for the pro * **Rationale:** Makes sure the Users have the same experience across all platforms * **Testing:** Can test by adjusting window size +* **ID:** REQ-10 + * **Description:** Needs to have a shopping cart feature to hold their item(s) to purchase. + * **Type:** Functional + * **Priority:** 5 + * **Rationale:** An online shopping cart is one of the foundations odf commerical websites to purchase products. + * **Testing:** Trying to store items in the cart and then buying those items at checkout. + +* **ID:** REQ-11 + * **Description:** Website needs to be clear to the clients. + * **Type:** Non-functional + * **Priority:** 2 + * **Rationale:** Though good design is not necessary "functional," it is important for clients to be able to use the website intuitively and have it make sense to them. + * **Testing:** HTML elements need to work as expected and the website should be redesigned until clear. + +* **ID:** REQ-12 + * **Description:** Checkout should only be available if there is at least one item in the shopping cart. + * **Type:** Functional + * **Priority:** 4 + * **Rationale:** Customers shouldn't be prompted to enter their card information if they're not about to buy anything. + * **Testing:** When clicking on checkout, it should only proceed if there is an item in the cart. + ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. +Constraint 1: We cannot include recommended items because we can't collect the user data to narrow it down. +Constraint 2: Stakeholders cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. +Constraint 3: We do not display stakeholder reviews but we have admin reviews. +Constraint 4: We do not control delivery prices because we deliver products using a third party delivery system. +Constraint 5: No automated payments accepted, Only Debit/Credit Cards. Only Available to US Region +Constraint 6: This project's code is written using Python, HTML, CSS, and Javascript. +Contstraint 7: The project has to be finished by the end of UNCC's 2023 spring semester. -Constraint 4: No automated payments accepted, Only Debit/Credit Cards. Only Available to US Region ## Use Cases In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: + * **ID:** UC-1 + * **Description:** The customer is trying to utilize the filter search funtion. + * **Actors:** The customer + * **Preconditions:** There needs to be an option for filter search that is clear and easy to find. + * **Postconditions:** The search must come up with the proper result based on the filters that the customer applies. + +* **ID:** UC-2 + * **Description:** The customer should be able to properly view and read about every item we offer. + * **Actors:** The customer + * **Preconditions:** The items must be displayed in a neat and visually pleasing manner while also having the proper descriptions. + * **Postconditions:** Once the customer navigates to their desired item, they must be able to see the exact item they searched for with an image and description. + +* **ID:** UC-3 + * **Description:** The customer clicks the checkout button + * **Actors:** The customer + * **Preconditions:** The customer has at least one item in their cart + * **Postconditions:** The items in the customer's cart are displayed and they are prompted to confirm that akll the items and their amounts are correct. + +* **ID:** UC-4 + * **Description:** The customer completes their purchase + * **Actors:** The customer + * **Preconditions:** The customer went through all the necessary purchase steps without any issues + * **Postconditions:** The customer is redirected to a page where a confirmation message of their order is displayed and other information about the details of th purchase is displayed as well. + * **ID:** UC-5 * **Description:** Making a singular webpage for each item with more depth of review and descriptions that also allows them to add to cart * **Actors:** I will be building the web page, and adding the extra descriptions, Mercer will be going behind me to make sure the webpage will link to the checkout page @@ -77,10 +172,39 @@ In this section, you should list use cases for the project. Use cases are a thor * **Actors:** I will be making sure that the customers can access the page from different devices, such as tablets, smartphones, and computers * **Preconditions:** Has a device that can display webpage * **Postconditions:** The webpage displays properly with no errors or loss in usability + +* **ID:** UC-7 + * **Description:** The customer is virtual window shopping and is navigating around the website. + * **Actors:** The customer + * **Preconditions:** The customer can connect to the website + * **Postconditions:** The customer should feel that navigation was simple and clear. The customer should not feel confused by going through our website. + +* **ID:** UC-8 + * **Description:** The customer is trying to remove items from their shopping cart. + * **Actors:** The customer + * **Preconditions:** The customer can connect to the website, the shopping cart is functional, the customer has put items in the shopping cart. + * **Postconditions:** The customer's shopping cart no longer has the item in the shopping cart. If the shopping cart only has that item, it should be empty and unable to proceed to checkout. + ## User Stories In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: +* **ID:** US-1 + * **Type of User:** Customer + * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. + +* **ID:** US-2 + * **Type of User:** Customer + * **Description:** The user navigates to the item they desire. Once they do that, they click on the image of the item and are shown a brief description about what the item is to aid them with their shopping experience. + +* **ID:** US-3 + * **Type of User:** Customer + * **Description:** The customer does not want to delete an item in cart that they do not want to purchase anymore. They click on the cart icon which lists the items in their cart and there is an option to remove each item from the cart. They successfully remove the item they do not need anymore. + +* **ID:** US-4 + * **Type of User:** Customer + * **Description:** The customer is currently viewing necklaces and wants to look at rings instead. They use the navigation bar to successfully got to the ring section. + * **ID:** US-5 Web page that displays the item, a description, and an add to cart button for the user to purchase. * **Type of User:** Customer * **Description:** As I'm looking through the catalouge I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. @@ -88,9 +212,26 @@ In this section, you should list user stories for the project. User stories are * **Type of User:** Customer * **Description:** As I'm looking through the catalogue I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. Later I told my friend about the website, and he accessed it from his phone to take a look at the item I ordered. He was impressed on how easy to use on mobile it was. +* **ID:** US-7 + * **Type of User:** Customer + * **Description:** The customer found our website and is interested in purchasing a piece of our jewelry. They browse the site, put an item in their shopping cart, click on the shopping cart icon, get taken to a checkout page, and confirm the order with an address and card information. + * **ID:** US-8 + * **Type of User:** IT + * **Description:** The customer has a question about the website or has problems purchasing their items. They can send their issues to the provided email to have it checked out. + + ## Glossary In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: +* **Term:** Filter Search + * **Definition:** the filter search is when a user can input certain things that they are looking for and not looking for (based on price, material, type) and will find items that match the conditions they have set in the search. + * **Term:** Compatability * **Definition:** A state in which two things are able to exist or occur together without problems or conflict. + +* **Term:** shopping cart + * **Definition:** software to allow customers to select products and buy them on the web. + +* **Term:** Navigation bar + * **Definition:** The webpage element that helps users navigate through the use of hyperlinks. \ No newline at end of file From a162d8db4c6f6fb544aefc90e82cc5efa27a2b43 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:03:43 -0400 Subject: [PATCH 33/81] Final Draft v2 --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index ff046929..c825382c 100644 --- a/SRS.md +++ b/SRS.md @@ -1,5 +1,5 @@ # Software Requirements Specification Document - +Version 2 This serves as a template for each projects' Software Requirements Specification (SRS) document. When filling this out, you will be required to create user stories, use cases, requirements, and a glossary of terms relevant to your project. Each group member must contribute to every section, so it is crucial that your group's GitHub repository shows a commit history that reflects the work of each group member. It is highly recommended that you create separate branches for each member, but since this is one single document, you will need to manually merge the branches together. It is also advisable to have multiple working versions of this document (named separately) so that one person can compile the final SRS document from the multiple working versions. Ultimately, how you go about managing this is up to you, but consistent formatting, clear commit messages, and a thorough commit history with contributions from each group member are required. Fill the document out following the guidelines listed in each section. Maintain [proper Markdown syntax](https://www.markdownguide.org/basic-syntax/) and be sure that your group has a `main` branch with this document and the entire [template repository codebase](https://github.com/david-gary/onlineStoreTemplate) either forked or downloaded and copied into your group's repository. If you have arranged to use a different codebase as a template, you do not need to have the original template included, but a `main` branch is still required. From a63a289ea2e7a67330fac0fa75b82ae64c51f810 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:05:59 -0400 Subject: [PATCH 34/81] Final draft v3 --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index c825382c..4f838bc4 100644 --- a/SRS.md +++ b/SRS.md @@ -93,7 +93,7 @@ Each group member must supply at least three functional requirements for the pro * **Priority:** 5 * **Rationale:** When people have similar questions and need quick answers a FAQ page is usually what they'll seek out. * **Testing:** Test page on click - * **ID:** REQ-9 +* **ID:** REQ-9 * **Description:** Works on Mobile * **Type:** Functional * **Priority:** 3 From 15ca49de3688f5fec485d8519b8324fab9094272 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:08:36 -0400 Subject: [PATCH 35/81] Final Draft Main --- SRS.md | 215 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 183 insertions(+), 32 deletions(-) diff --git a/SRS.md b/SRS.md index 9a2a7485..4f838bc4 100644 --- a/SRS.md +++ b/SRS.md @@ -1,15 +1,15 @@ # Software Requirements Specification Document - +Version 2 This serves as a template for each projects' Software Requirements Specification (SRS) document. When filling this out, you will be required to create user stories, use cases, requirements, and a glossary of terms relevant to your project. Each group member must contribute to every section, so it is crucial that your group's GitHub repository shows a commit history that reflects the work of each group member. It is highly recommended that you create separate branches for each member, but since this is one single document, you will need to manually merge the branches together. It is also advisable to have multiple working versions of this document (named separately) so that one person can compile the final SRS document from the multiple working versions. Ultimately, how you go about managing this is up to you, but consistent formatting, clear commit messages, and a thorough commit history with contributions from each group member are required. Fill the document out following the guidelines listed in each section. Maintain [proper Markdown syntax](https://www.markdownguide.org/basic-syntax/) and be sure that your group has a `main` branch with this document and the entire [template repository codebase](https://github.com/david-gary/onlineStoreTemplate) either forked or downloaded and copied into your group's repository. If you have arranged to use a different codebase as a template, you do not need to have the original template included, but a `main` branch is still required. ## Group Members -* [Name](mailto:email@uncc.edu) -* [Name](mmailto:email@uncc.edu) +* [Sreyas Kodukulla](mailto:skodukul.edu) +* [Akanimoh Joseph Umoren](mmailto:aumoren@uncc.edu) * [Blaise Thomas](mmailto:bthom108@uncc.edu) -* [Name](mmailto:email@uncc.edu) +* [Mercere Baker](mmailto:mbaker89@uncc.edu) ## Revisions @@ -36,51 +36,202 @@ The idea for our project is to create a hands on jewlery store. We will build a Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. Do not replace the word `Description` with the actual description. Put the description in the space where these instructions are written. Maintain that practice for all future sections. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -* **ID:** A unique identifier for the requirement. This should be a number that is unique across the entire document (something like REQ-1, REQ-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A short description of the requirement. This should be a single sentence that describes the requirement. - * **Type:** The type of requirement. Should be either `Functional` or `Non-Functional`. - * **Priority:** The priority of the requirement. This should be a number between 1 and 5, with 1 being the highest priority and 5 being the lowest priority. - * **Rationale:** A short description of why the requirement is important. This should be a single sentence that describes why the requirement is important. - * **Testing:** A short description of how the requirement can be tested. This should be a single sentence that describes how the requirement can be tested. -TESTINGTESTING123 +Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: + +* **ID:** REQ-1 + * **Description:** The customer is trying to use the filter search funtion to find the right type of chain. + * **Type:** Functional + * **Priority:** 4 + * **Rationale:** This is important because it will test a key feature of our store. + * **Testing:** We can test the requirement by seeing if the 'filter search' function returns the correct output after the user input. + +* **ID:** REQ-2 + * **Description:** The items will have a small description to help the users with their selections. + * **Type:** non-functional + * **Priority:** 3 + * **Rationale:** This is important because it makes the store easier to navigate. + * **Testing:** We will test this by seeing if the description shows once we finish the webpage. + +* **ID:** REQ-3 + * **Description:** The webiste needs to flow properly in the sense that the user should be able to follow the right path based on how they interact. Must have clear and consise UI. + * **Type:** functional + * **Priority:** 5 + * **Rationale:** This is important because if the user clicks to view chains, but rings show up instead, that means the webpage isn't up to the standards we want it to be at. + * **Testing:** We will test this by using the website after completeion and test the flow based on user input. + +* **ID:** REQ-4 + * **Description:** Website should ask the user to confirm their purchase before charging them. + * **Type:** Functional + * **Priority:** 2 + * **Rationale:** This is important so that the user does not accidentaly purchase items they do not mean to + * **Testing:** Trying to checkout the items in a cart, the user shoukld be prompted to confirm that the items are correct. + +* **ID:** REQ-5 + * **Description:** Wesite should have a navigation bar which displays the main types of items being sold + * **Type:** Functional + * **Priority:** 3 + * **Rationale:** This is important because it helps the user navigate the website easily. + * **Testing:** The webpage sould dsplay a visible navigation bar that can be used to go through the ite,s in the website easiy. + +* **ID:** REQ-6 + * **Description:** Upon payment, a confirmation of purchase should be displayed to the user + * **Type:** Functional + * **Priority:** 2 + * **Rationale:** This is important because it lets the user know that their purchase was successful. + * **Testing:** When the user pays for the items, they should be redirected to another page which displays a confirmation message and the details of their purchase like purchase id, shipping addresss, and delivery date. + +* **ID:** REQ-7 + * **Description:** Different Page per product + * **Type:** Functional + * **Priority:** 1 + * **Rationale:** You'd have a list of the different products with images, onclick it will take you to just the + the Item itself + * **Testing:** Onclick should take you to different webPages +* **ID:** REQ-8 + * **Description:** FAQ PAGE + * **Type:** Non-Functional, gives people answers to FAQs + * **Priority:** 5 + * **Rationale:** When people have similar questions and need quick answers a FAQ page is usually what they'll seek out. + * **Testing:** Test page on click +* **ID:** REQ-9 + * **Description:** Works on Mobile + * **Type:** Functional + * **Priority:** 3 + * **Rationale:** Makes sure the Users have the same experience across all platforms + * **Testing:** Can test by adjusting window size + +* **ID:** REQ-10 + * **Description:** Needs to have a shopping cart feature to hold their item(s) to purchase. + * **Type:** Functional + * **Priority:** 5 + * **Rationale:** An online shopping cart is one of the foundations odf commerical websites to purchase products. + * **Testing:** Trying to store items in the cart and then buying those items at checkout. + +* **ID:** REQ-11 + * **Description:** Website needs to be clear to the clients. + * **Type:** Non-functional + * **Priority:** 2 + * **Rationale:** Though good design is not necessary "functional," it is important for clients to be able to use the website intuitively and have it make sense to them. + * **Testing:** HTML elements need to work as expected and the website should be redesigned until clear. + +* **ID:** REQ-12 + * **Description:** Checkout should only be available if there is at least one item in the shopping cart. + * **Type:** Functional + * **Priority:** 4 + * **Rationale:** Customers shouldn't be prompted to enter their card information if they're not about to buy anything. + * **Testing:** When clicking on checkout, it should only proceed if there is an item in the cart. + ## Constraints In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. +Constraint 1: We cannot include recommended items because we can't collect the user data to narrow it down. +Constraint 2: Stakeholders cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. +Constraint 3: We do not display stakeholder reviews but we have admin reviews. +Constraint 4: We do not control delivery prices because we deliver products using a third party delivery system. +Constraint 5: No automated payments accepted, Only Debit/Credit Cards. Only Available to US Region +Constraint 6: This project's code is written using Python, HTML, CSS, and Javascript. +Contstraint 7: The project has to be finished by the end of UNCC's 2023 spring semester. +## Use Cases + +In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: + * **ID:** UC-1 + * **Description:** The customer is trying to utilize the filter search funtion. + * **Actors:** The customer + * **Preconditions:** There needs to be an option for filter search that is clear and easy to find. + * **Postconditions:** The search must come up with the proper result based on the filters that the customer applies. + +* **ID:** UC-2 + * **Description:** The customer should be able to properly view and read about every item we offer. + * **Actors:** The customer + * **Preconditions:** The items must be displayed in a neat and visually pleasing manner while also having the proper descriptions. + * **Postconditions:** Once the customer navigates to their desired item, they must be able to see the exact item they searched for with an image and description. + +* **ID:** UC-3 + * **Description:** The customer clicks the checkout button + * **Actors:** The customer + * **Preconditions:** The customer has at least one item in their cart + * **Postconditions:** The items in the customer's cart are displayed and they are prompted to confirm that akll the items and their amounts are correct. + +* **ID:** UC-4 + * **Description:** The customer completes their purchase + * **Actors:** The customer + * **Preconditions:** The customer went through all the necessary purchase steps without any issues + * **Postconditions:** The customer is redirected to a page where a confirmation message of their order is displayed and other information about the details of th purchase is displayed as well. + +* **ID:** UC-5 + * **Description:** Making a singular webpage for each item with more depth of review and descriptions that also allows them to add to cart + * **Actors:** I will be building the web page, and adding the extra descriptions, Mercer will be going behind me to make sure the webpage will link to the checkout page + * **Preconditions:** Has to come from a previous page that was the items brief description, I.E Under the rings page it is the ring 3 Item, clicking that leads to the ring 3 Item webpage + * **Postconditions:** You've landed on the webpage for that specific item, complete with the photo, description, and add to cart button. + **ID:** UC-6 + * **Description:** Making sure that the webpages works across all devices + * **Actors:** I will be making sure that the customers can access the page from different devices, such as tablets, smartphones, and computers + * **Preconditions:** Has a device that can display webpage + * **Postconditions:** The webpage displays properly with no errors or loss in usability + +* **ID:** UC-7 + * **Description:** The customer is virtual window shopping and is navigating around the website. + * **Actors:** The customer + * **Preconditions:** The customer can connect to the website + * **Postconditions:** The customer should feel that navigation was simple and clear. The customer should not feel confused by going through our website. + +* **ID:** UC-8 + * **Description:** The customer is trying to remove items from their shopping cart. + * **Actors:** The customer + * **Preconditions:** The customer can connect to the website, the shopping cart is functional, the customer has put items in the shopping cart. + * **Postconditions:** The customer's shopping cart no longer has the item in the shopping cart. If the shopping cart only has that item, it should be empty and unable to proceed to checkout. + +## User Stories +In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: -Constraint 4: No automated payments accepted, Only Debit/Credit Cards. No Refunds Main branch +* **ID:** US-1 + * **Type of User:** Customer + * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. -## Use Cases +* **ID:** US-2 + * **Type of User:** Customer + * **Description:** The user navigates to the item they desire. Once they do that, they click on the image of the item and are shown a brief description about what the item is to aid them with their shopping experience. -In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: +* **ID:** US-3 + * **Type of User:** Customer + * **Description:** The customer does not want to delete an item in cart that they do not want to purchase anymore. They click on the cart icon which lists the items in their cart and there is an option to remove each item from the cart. They successfully remove the item they do not need anymore. -* **ID:** A unique identifier for the use case. This should be a number that is unique across the entire document (something like UC-1, UC-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Description:** A description of the use case that gives the user a high-level overview of how the system is interacted with. - * **Actors:** A list of the actors that are involved in the use case. Only include the actors that are directly involved. Actors are the people or things that interact with the system. For example, when ordering at a fast food restaurant, one might have the following actors: the customer, the cashier, and the cook. But only the customer and the cashier are directly involved in the use case of ordering food. The cook is not directly involved in the use case of ordering food. - * **Preconditions:** A list of the preconditions for the use case. This should be a list of the preconditions for the use case, which are the conditions that must be met before the use case can be executed. Continuing with the restaurant example, the customer must have money in their wallet and the cashier must be logged in to the system before the use case of ordering food can be executed. - * **Postconditions:** A list of the postconditions for the use case. This should be a list of the postconditions for the use case, which are the conditions that must be met after the use case has been executed. Continuing with the restaurant example, the customer must have their food and the cashier must have the customer's money after the use case of ordering food has been executed. +* **ID:** US-4 + * **Type of User:** Customer + * **Description:** The customer is currently viewing necklaces and wants to look at rings instead. They use the navigation bar to successfully got to the ring section. -## User Stories +* **ID:** US-5 Web page that displays the item, a description, and an add to cart button for the user to purchase. + * **Type of User:** Customer + * **Description:** As I'm looking through the catalouge I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. +* **ID:** US-6 Web page that displays properly regardless of the device used to acess it. + * **Type of User:** Customer + * **Description:** As I'm looking through the catalogue I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. Later I told my friend about the website, and he accessed it from his phone to take a look at the item I ordered. He was impressed on how easy to use on mobile it was. -In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: +* **ID:** US-7 + * **Type of User:** Customer + * **Description:** The customer found our website and is interested in purchasing a piece of our jewelry. They browse the site, put an item in their shopping cart, click on the shopping cart icon, get taken to a checkout page, and confirm the order with an address and card information. + * **ID:** US-8 + * **Type of User:** IT + * **Description:** The customer has a question about the website or has problems purchasing their items. They can send their issues to the provided email to have it checked out. -* **ID:** A unique identifier for the user story. This should be a number that is unique across the entire document (something like US-1, US-2, etc. but be sure to replace the word `ID` with the unique identifier). - * **Type of User:** The type of user that the user story is for. This should be a single word that describes the type of user. For example, a user story for a customer might be `Customer` and a user story for an administrator might be `Admin`. - * **Description:** A description of the user story that gives a narrative from that user's perspective. This can be any length, but it must paint the picture of what the user wants to do, how they intend to do it, why they want to, and what they expect to happen. ## Glossary In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: -* **Term:** The term that is being defined. This should be a single word or phrase that is being defined. - * **Definition:** A definition of the term. This should be a short description of the term that is being defined. This should be a single sentence that describes the term. +* **Term:** Filter Search + * **Definition:** the filter search is when a user can input certain things that they are looking for and not looking for (based on price, material, type) and will find items that match the conditions they have set in the search. + +* **Term:** Compatability + * **Definition:** A state in which two things are able to exist or occur together without problems or conflict. + +* **Term:** shopping cart + * **Definition:** software to allow customers to select products and buy them on the web. + +* **Term:** Navigation bar + * **Definition:** The webpage element that helps users navigate through the use of hyperlinks. \ No newline at end of file From 5ac834474c9efdd08a0694cfe555d85b151cc687 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:11:06 -0400 Subject: [PATCH 36/81] Final Draft Main v2 --- SRS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SRS.md b/SRS.md index 4f838bc4..a3ab252c 100644 --- a/SRS.md +++ b/SRS.md @@ -190,8 +190,8 @@ In this section, you should list use cases for the project. Use cases are a thor In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: * **ID:** US-1 - * **Type of User:** Customer - * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. + * **Type of User:** Customer + * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. * **ID:** US-2 * **Type of User:** Customer From e001feab3187e99668aa03ed2d1af05d2b90e74c Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:15:09 -0400 Subject: [PATCH 37/81] Final Draft Main V3 --- SRS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SRS.md b/SRS.md index a3ab252c..5bc6b3c8 100644 --- a/SRS.md +++ b/SRS.md @@ -7,9 +7,9 @@ Fill the document out following the guidelines listed in each section. Maintain ## Group Members * [Sreyas Kodukulla](mailto:skodukul.edu) -* [Akanimoh Joseph Umoren](mmailto:aumoren@uncc.edu) -* [Blaise Thomas](mmailto:bthom108@uncc.edu) -* [Mercere Baker](mmailto:mbaker89@uncc.edu) +* [Akanimoh Joseph Umoren](mailto:aumoren@uncc.edu) +* [Blaise Thomas](mailto:bthom108@uncc.edu) +* [Mercere Baker](mailto:mbaker89@uncc.edu) ## Revisions From b06ee459255189de4e23619ea688ee9d9fd71e60 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:17:15 -0400 Subject: [PATCH 38/81] Final Draft Main V4 --- SRS.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/SRS.md b/SRS.md index 5bc6b3c8..fee8841b 100644 --- a/SRS.md +++ b/SRS.md @@ -138,7 +138,7 @@ Contstraint 7: The project has to be finished by the end of UNCC's 2023 spring s In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: - * **ID:** UC-1 +* **ID:** UC-1 * **Description:** The customer is trying to utilize the filter search funtion. * **Actors:** The customer * **Preconditions:** There needs to be an option for filter search that is clear and easy to find. @@ -167,7 +167,8 @@ In this section, you should list use cases for the project. Use cases are a thor * **Actors:** I will be building the web page, and adding the extra descriptions, Mercer will be going behind me to make sure the webpage will link to the checkout page * **Preconditions:** Has to come from a previous page that was the items brief description, I.E Under the rings page it is the ring 3 Item, clicking that leads to the ring 3 Item webpage * **Postconditions:** You've landed on the webpage for that specific item, complete with the photo, description, and add to cart button. - **ID:** UC-6 + +* **ID:** UC-6 * **Description:** Making sure that the webpages works across all devices * **Actors:** I will be making sure that the customers can access the page from different devices, such as tablets, smartphones, and computers * **Preconditions:** Has a device that can display webpage @@ -190,8 +191,8 @@ In this section, you should list use cases for the project. Use cases are a thor In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: * **ID:** US-1 - * **Type of User:** Customer - * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. + * **Type of User:** Customer + * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. * **ID:** US-2 * **Type of User:** Customer @@ -208,16 +209,18 @@ In this section, you should list user stories for the project. User stories are * **ID:** US-5 Web page that displays the item, a description, and an add to cart button for the user to purchase. * **Type of User:** Customer * **Description:** As I'm looking through the catalouge I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. + * **ID:** US-6 Web page that displays properly regardless of the device used to acess it. * **Type of User:** Customer * **Description:** As I'm looking through the catalogue I noticed an item that I liked, I clicked on the item and it took me to a separate page that provided more detail for me to make an informed decision, I then added to cart and return to shopping. Later I told my friend about the website, and he accessed it from his phone to take a look at the item I ordered. He was impressed on how easy to use on mobile it was. * **ID:** US-7 - * **Type of User:** Customer - * **Description:** The customer found our website and is interested in purchasing a piece of our jewelry. They browse the site, put an item in their shopping cart, click on the shopping cart icon, get taken to a checkout page, and confirm the order with an address and card information. - * **ID:** US-8 - * **Type of User:** IT - * **Description:** The customer has a question about the website or has problems purchasing their items. They can send their issues to the provided email to have it checked out. + * **Type of User:** Customer + * **Description:** The customer found our website and is interested in purchasing a piece of our jewelry. They browse the site, put an item in their shopping cart, click on the shopping cart icon, get taken to a checkout page, and confirm the order with an address and card information. + +* **ID:** US-8 + * **Type of User:** IT + * **Description:** The customer has a question about the website or has problems purchasing their items. They can send their issues to the provided email to have it checked out. ## Glossary @@ -231,7 +234,7 @@ In this section, you should list any terms that are used in the document that ma * **Definition:** A state in which two things are able to exist or occur together without problems or conflict. * **Term:** shopping cart - * **Definition:** software to allow customers to select products and buy them on the web. + * **Definition:** software to allow customers to select products and buy them on the web. * **Term:** Navigation bar * **Definition:** The webpage element that helps users navigate through the use of hyperlinks. \ No newline at end of file From 2fff1d2063015ac4668a7f32a7156bdd6f2dad09 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:25:38 -0400 Subject: [PATCH 39/81] Final Draft V5 --- SRS.md | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/SRS.md b/SRS.md index fee8841b..84f47d75 100644 --- a/SRS.md +++ b/SRS.md @@ -34,10 +34,6 @@ The idea for our project is to create a hands on jewlery store. We will build a ## Requirements -Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: - -Each group member must supply at least three functional requirements for the project. Each requirement should be written in the following format: - * **ID:** REQ-1 * **Description:** The customer is trying to use the filter search funtion to find the right type of chain. * **Type:** Functional @@ -123,21 +119,17 @@ Each group member must supply at least three functional requirements for the pro ## Constraints -In this section, you should list any constraints that you have for the project. Each group member must supply at least two constraints. These can be constraints on the project itself, the software system, or the stakeholders. Constraints can be anything that limits the scope of the project. For example, that this project's template code is written using Flask and Python constitutes a constraint on the backend of the project. Constraints can also be things like the required timeline of the project. Be creative. - -Constraint 1: We cannot include recommended items because we can't collect the user data to narrow it down. -Constraint 2: Stakeholders cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. -Constraint 3: We do not display stakeholder reviews but we have admin reviews. -Constraint 4: We do not control delivery prices because we deliver products using a third party delivery system. -Constraint 5: No automated payments accepted, Only Debit/Credit Cards. Only Available to US Region -Constraint 6: This project's code is written using Python, HTML, CSS, and Javascript. -Contstraint 7: The project has to be finished by the end of UNCC's 2023 spring semester. - +* **Constraint 1:** We cannot include recommended items because we can't collect the user data to narrow it down. +* **Constraint 2:** Stakeholders cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. +* **Constraint 3:** We do not display stakeholder reviews but we have admin reviews. +* **Constraint 4:** We do not control delivery prices because we deliver products using a third party delivery system. +* **Constraint 5:** No automated payments accepted, Only Debit/Credit Cards. Only Available to US Region +* **Constraint 6:** This project's code is written using Python, HTML, CSS, and Javascript. +* **Constraint 7:** The project has to be finished by the end of UNCC's 2023 spring semester. +* **Constraint 8:** ## Use Cases -In this section, you should list use cases for the project. Use cases are a thorough description of how the system will be used. Each group member must supply at least two use cases. Each use case should be written in the following format: - * **ID:** UC-1 * **Description:** The customer is trying to utilize the filter search funtion. * **Actors:** The customer @@ -188,8 +180,6 @@ In this section, you should list use cases for the project. Use cases are a thor ## User Stories -In this section, you should list user stories for the project. User stories are a short description of how a user will be interacting with the system. Each group member must supply at least two user stories. Each user story should be written in the following format: - * **ID:** US-1 * **Type of User:** Customer * **Description:** The customer opens up the website, navigates to the filter search button because they are looking for a certain type of ring, they apply the filters, and they will be directed to the options we offer based on their preference. @@ -225,8 +215,6 @@ In this section, you should list user stories for the project. User stories are ## Glossary -In this section, you should list any terms that are used in the document that may not be immediately obvious to a naive reader. Each group member must supply at least one term. Each term should be written in the following format: - * **Term:** Filter Search * **Definition:** the filter search is when a user can input certain things that they are looking for and not looking for (based on price, material, type) and will find items that match the conditions they have set in the search. From 01c9050a0d81b0aad850d7e2e265fa50416794ee Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:27:47 -0400 Subject: [PATCH 40/81] Final Draft For Real This Time --- SRS.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SRS.md b/SRS.md index 84f47d75..8f3933bc 100644 --- a/SRS.md +++ b/SRS.md @@ -123,10 +123,10 @@ The idea for our project is to create a hands on jewlery store. We will build a * **Constraint 2:** Stakeholders cannot choose from a very vast collection of items, our site will be limited to only the scope of items we can include. * **Constraint 3:** We do not display stakeholder reviews but we have admin reviews. * **Constraint 4:** We do not control delivery prices because we deliver products using a third party delivery system. -* **Constraint 5:** No automated payments accepted, Only Debit/Credit Cards. Only Available to US Region -* **Constraint 6:** This project's code is written using Python, HTML, CSS, and Javascript. -* **Constraint 7:** The project has to be finished by the end of UNCC's 2023 spring semester. -* **Constraint 8:** +* **Constraint 5:** No automated payments accepted, Only Debit/Credit Cards. +* **Constraint 6:** Only Available to US Region +* **Constraint 7:** This project's code is written using Python, HTML, CSS, and Javascript. +* **Constraint 8:** The project has to be finished by the end of UNCC's 2023 spring semester. ## Use Cases From 804d959d9af5ecd839ddbc9a2d3643a80cd886e6 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 30 Mar 2023 18:29:14 -0400 Subject: [PATCH 41/81] Final Draft, The reckoning --- SRS.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 8f3933bc..3176cc8a 100644 --- a/SRS.md +++ b/SRS.md @@ -83,12 +83,14 @@ The idea for our project is to create a hands on jewlery store. We will build a * **Rationale:** You'd have a list of the different products with images, onclick it will take you to just the the Item itself * **Testing:** Onclick should take you to different webPages + * **ID:** REQ-8 * **Description:** FAQ PAGE * **Type:** Non-Functional, gives people answers to FAQs * **Priority:** 5 * **Rationale:** When people have similar questions and need quick answers a FAQ page is usually what they'll seek out. * **Testing:** Test page on click + * **ID:** REQ-9 * **Description:** Works on Mobile * **Type:** Functional @@ -98,7 +100,7 @@ The idea for our project is to create a hands on jewlery store. We will build a * **ID:** REQ-10 * **Description:** Needs to have a shopping cart feature to hold their item(s) to purchase. - * **Type:** Functional + * **Type:** Functional * **Priority:** 5 * **Rationale:** An online shopping cart is one of the foundations odf commerical websites to purchase products. * **Testing:** Trying to store items in the cart and then buying those items at checkout. From 744efac5e81bfc3852578ac2c08cb7170300727d Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Tue, 4 Apr 2023 16:09:03 -0400 Subject: [PATCH 42/81] Create diagrams.md --- diagrams.md | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 diagrams.md diff --git a/diagrams.md b/diagrams.md new file mode 100644 index 00000000..a7bb2df7 --- /dev/null +++ b/diagrams.md @@ -0,0 +1,138 @@ +# Project 2: Design + +## Introduction + +In this phase, you will be mapping out your project and creating easily understandable diagrams that will help you and your team know your codebase inside and out. This also makes it much easier to communicate the flow of your application to less technical audiences or anyone who is new to your project. We will be using `pyreverse` and `plantuml` to help us create, update, and visualize our diagrams. + +This activity will require you to generate Class, Package, Use Case, and Sequence diagrams for your project. If you are unfamiliar with these diagrams, you can find an in-depth explanation of each diagram type [here](https://www.uml-diagrams.org/) or reference [this article](https://nulab.com/learn/software-development/uml-diagrams-guide/). + +## Task 1: Installations + +- Use `pip` to install the following packages: + - `pylint==2.17.1` + - `plantuml==0.3.0` +- Add both of these packages to your `requirements.txt` file, including the version numbers. Follow the format of the `flask` package in the file. +- Install `Graphviz` on your machine. You can find download instructions for your operating system [here](https://graphviz.org/download/). + +## Task 2: Initial Structure Diagrams + +- Each group member will create diagrams for at least one of the following subdirectories/files of your project: + - `authentication`: requires a package diagram + - `core`: requires both a package diagram and a class diagram + - `database`: requires both a package diagram and a class diagram + - `testing`: requires a package diagram + +All of the above diagrams must be generated, so split this work evenly and push and pull code often. To generate a class diagram for a subdirectory or file, you must first generate the `plantuml` files using `pyreverse`. Then, you must use `plantuml` to generate the diagram from the `plantuml` file. Here's an example of how to do this for the package diagram in the `testing` subdirectory. + +```bash +pyreverse --output puml --colorized -A --output-directory testing testin # generates testing/package.puml +python3.10 -m plantuml testing/package.puml # generates testing/package.png +``` + +Since `testing` has no classes, we do not need a class diagram, but if we did, we would change the `testing/package.puml` to `testing/classes.puml` in the last command. + +- Delete the `.puml` files that do not have a corresponding `.png` file. For example, since `testing` has no classes, we would delete `testing/classes.puml`. +- For each subdirectory, create copies of the `.puml` and `.png` files with naming schemes that include `_initial` in the name. + - For example, `testing/package.puml` would have a copy called `testing/package_initial.puml` and `testing/package.png` would have a copy called `testing/package_initial.png`. + +## Task 3: Update Structure Diagrams + +- Begin planning the implentations necessary to fulfill requirements listed in your `SRS.md` file. +- Go to the corresponding subdirectory, and update the `.puml` file to reflect the changes you have planned. + - For example, by implementing a method called `delete_cart` in the `UserSession` class from `core`, my `core/classes.puml` file would look like the one shown below because I added a line to the `UserSession` class that says `delete_cart(id: str) -> None`. + - [PlantUML class diagram documentation](https://plantuml.com/class-diagram) +- Be sure to regenerate the `.png` file for each subdirectory after you update the corresponding `.puml` file. + +```plantuml +@startuml classes +set namespaceSeparator none +class "Sessions" as store.core.session.Sessions #aliceblue { + sessions : dict + add_new_session(username: str, db: Database) -> None + get_all_sessions() -> dict + get_session(username: str) -> UserSession + remove_session(username: str) -> None +} +class "UserSession" as store.core.session.UserSession #aliceblue { + cart : dict + date : datetime, NoneType + db + total_cost : int + username : str + add_new_item(id: str, name: str, price: int, quantity: int, discount: float, tax_rate: float) -> None + empty_cart() -> dict + is_item_in_cart(id: str) -> bool + remove_item(id: str) -> None + delete_cart(id: str) -> None + submit_cart() -> None + update_item_quantity(id: str, change_to_quantity: int) -> None + update_total_cost() -> None +} +@enduml +``` + +## Task 4: Use Case Diagrams + +- Create a `diagrams` subdirectory from the project root directory, and navigate to it. +- Create a `cases` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each user type (actor) mentioned in your `SRS.md` file, create an appropriately named `.puml` file showcasing the use cases for that actor. + - For example, if I had an actor called `Customer`, I might create a file called `customer.puml` that looks like the template below. + - [PlantUML use case diagram documentation](https://plantuml.com/use-case-diagram) +- Generate a `.png` file from the `.puml` file. + - Remember, this will look something like: `python3.10 -m plantuml customer.puml` + +```plantuml +@startuml customer +left to right direction +actor Customer +rectangle "System" as system { + (Login) + (Register) + (View Cart) + (View Items) + (View Orders) + (View Profile) + (Logout) +} +Customer --> (Login) +Customer --> (Register) +Customer --> (View Cart) +Customer --> (View Items) +Customer --> (View Orders) +Customer --> (View Profile) +Customer --> (Logout) +@enduml +``` + +## Task 5: Sequence Diagrams + +- Create a `sequences` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each of the use cases shown in your use case diagrams, create an appropriately named `.puml` file showcasing the sequence of events for that use case and generate its corresponding `.png` file. + - For example, if I had a use case called `Login`, I might create a file called `login.puml` that looks like the template below. + - [PlantUML sequence diagram documentation](https://plantuml.com/sequence-diagram) + +```plantuml +@startuml login +actor Customer +boundary "System" as system +control "Sessions" as sessions +control "Authentication" as auth +Customer -> system: Login +activate system +system -> auth: login_pipeline(username, password) +activate auth +auth --> system: True +deactivate auth +system -> sessions: add_new_session(username, db) +activate sessions +sessions --> system: None +deactivate sessions +system -> system: redirect to home page +deactivate system +@enduml +``` + +## Submission Details + +- On Canvas, submit the following: + - the URL to your group's repository From d4315da6eaca96a4854ca29f83d4de5e300836b3 Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Thu, 6 Apr 2023 15:08:55 -0400 Subject: [PATCH 43/81] Diagram Update --- core/classes.puml | 24 ++++++++++++++++++++++++ core/classes_initial.puml | 24 ++++++++++++++++++++++++ core/packages.png | Bin 0 -> 3926 bytes core/packages.puml | 10 ++++++++++ core/packages_initial.png | Bin 0 -> 3926 bytes core/packages_initial.puml | 10 ++++++++++ requirements.txt | 4 +++- 7 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 core/classes.puml create mode 100644 core/classes_initial.puml create mode 100644 core/packages.png create mode 100644 core/packages.puml create mode 100644 core/packages_initial.png create mode 100644 core/packages_initial.puml diff --git a/core/classes.puml b/core/classes.puml new file mode 100644 index 00000000..9c62d774 --- /dev/null +++ b/core/classes.puml @@ -0,0 +1,24 @@ +@startuml classes +set namespaceSeparator none +class "Sessions" as core.session.Sessions #aliceblue { + sessions : dict + add_new_session(username: str, db: Database) -> None + get_all_sessions() -> dict + get_session(username: str) -> UserSession + remove_session(username: str) -> None +} +class "UserSession" as core.session.UserSession #aliceblue { + cart : dict + date : datetime, NoneType + db : Database + total_cost : int + username : str + add_new_item(id: str, name: str, price: int, quantity: int, discount: float, tax_rate: float) -> None + empty_cart() -> dict + is_item_in_cart(id: str) -> bool + remove_item(id: str) -> None + submit_cart() -> None + update_item_quantity(id: str, change_to_quantity: int) -> None + update_total_cost() -> None +} +@enduml diff --git a/core/classes_initial.puml b/core/classes_initial.puml new file mode 100644 index 00000000..9c62d774 --- /dev/null +++ b/core/classes_initial.puml @@ -0,0 +1,24 @@ +@startuml classes +set namespaceSeparator none +class "Sessions" as core.session.Sessions #aliceblue { + sessions : dict + add_new_session(username: str, db: Database) -> None + get_all_sessions() -> dict + get_session(username: str) -> UserSession + remove_session(username: str) -> None +} +class "UserSession" as core.session.UserSession #aliceblue { + cart : dict + date : datetime, NoneType + db : Database + total_cost : int + username : str + add_new_item(id: str, name: str, price: int, quantity: int, discount: float, tax_rate: float) -> None + empty_cart() -> dict + is_item_in_cart(id: str) -> bool + remove_item(id: str) -> None + submit_cart() -> None + update_item_quantity(id: str, change_to_quantity: int) -> None + update_total_cost() -> None +} +@enduml diff --git a/core/packages.png b/core/packages.png new file mode 100644 index 0000000000000000000000000000000000000000..d68ad8e717bd69b71ddbdb9d674cd96d3c88c14c GIT binary patch literal 3926 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 literal 0 HcmV?d00001 diff --git a/core/packages.puml b/core/packages.puml new file mode 100644 index 00000000..9ffa5cec --- /dev/null +++ b/core/packages.puml @@ -0,0 +1,10 @@ +@startuml packages +set namespaceSeparator none +package "core" as core #aliceblue { +} +package "core.session" as core.session #aliceblue { +} +package "core.utils" as core.utils #aliceblue { +} +core.session --> core.utils +@enduml diff --git a/core/packages_initial.png b/core/packages_initial.png new file mode 100644 index 0000000000000000000000000000000000000000..d68ad8e717bd69b71ddbdb9d674cd96d3c88c14c GIT binary patch literal 3926 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 literal 0 HcmV?d00001 diff --git a/core/packages_initial.puml b/core/packages_initial.puml new file mode 100644 index 00000000..9ffa5cec --- /dev/null +++ b/core/packages_initial.puml @@ -0,0 +1,10 @@ +@startuml packages +set namespaceSeparator none +package "core" as core #aliceblue { +} +package "core.session" as core.session #aliceblue { +} +package "core.utils" as core.utils #aliceblue { +} +core.session --> core.utils +@enduml diff --git a/requirements.txt b/requirements.txt index c39f059d..63c9afdb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ -flask==2.2.2 \ No newline at end of file +flask==2.2.2 +pylint==2.17.1 +plantuml==0.3.0 \ No newline at end of file From 77375676a690bdc9842bb3e7846fc4f6bdc23b8c Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Thu, 6 Apr 2023 16:19:35 -0400 Subject: [PATCH 44/81] classes.png update --- core/classes.png | Bin 0 -> 28678 bytes core/classes_initial.png | Bin 0 -> 28678 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 core/classes.png create mode 100644 core/classes_initial.png diff --git a/core/classes.png b/core/classes.png new file mode 100644 index 0000000000000000000000000000000000000000..e12b8388b64f4f637cc77e869873e9379a073a90 GIT binary patch literal 28678 zcma&ObzGEP+XXrxihzK03y5?%q_h%JLn94JmvlDvMq;z-3*#kcB zB)< zcfk(^doeY8eJg91*M>&+5OG6GLt9;YLjwvu7YY-5duuyhR#xlRx|a417Oz?Ktt=e7 zJITQ%Hcge)?EiTkToD3sPVi9Fv>JGf>v>f0gqSsZQ04V!lm!HtLWDRCj!#Afeg1YT zOr(6HZDe?J4L!0r)bIQ=+o!8MqP1L}x1|hy!+F;f;uB zTZsjjUmZNC&p3m)&7qb(XmcMX@J-A)gpcyl>0MSjjMm4tqk>#B0D zSs9cs`-Q|ns^D06sJ~dKn9osCUFrKHp87GiRVj_+#YoBDRFcc;-7saCMMhjxP3*_S zK!ejA>hpUhYCAU0T%FP+_m;LlGe7s0p!j+r4VC z@r@Sw^vUVmK}-CBp-j+{x~V7OnTg)GMJC5HR13=D9w(A*t|yWmVvac&q`m}m_?UO6 zzhpB|hw6-3)_BhuA;LGJ|GxNFc5v>zs2+)~UWA8-lj>~*tlJ13lFx9lun;=>D2V+Z!X8yUMpAfM={-l>u*GzsAZH`@;$S1G{^$EE7f(#N>1sULp*n55OZy`Mg)4$P z@0wmcCcFp#fmK20gmC@8n-|Wx{h&90f&X5EaR>U>n@5@`TL1arW5RV_!sdV9`c519 z9pS&%EnItbUmsi|ikWXq%Xy(pfwhj!c6oaQgf#^6gcY5<$goSr=^n!M<;O~~sHUGB z=KVfDyMpf{NQ_#c!O5>GJ8cD|>suIheZcVgXjKXS8-(QpI>}IWL)3#mOR?d7Fs~5EHsbZCea0wSA(cArPA4Ni<|+aQT5Uoc4Rxm$LrO|Yxzmno z8_aR`>zC`D=p;Q?$9z^`1S442vw&9eEC|6`JErcn!aExD0TN^WzLJY}msHw<1f76PHzeHsMTLM;Ye@1D1W?cv$W%l)M*GnZ-Y5}~-R+c9W41H1Jq znB^`=uJ<6JIDcLI(|kw1TsU@ogB?n=jz-p^_ECjvy)o+)9t0vv`0wcNLl+A))Jr_` z)XDE$!eBnDBa#I*W|Kx!x;lC-XC$d#zSQ%&d`L!w%-_G6&>vtzpBg;5`n~lrj%%?2 zN3+mwW#AUCYL*U^mxh;%rFLdgi(v5=86e-#1gM($zoRAhM)BJn3IN znv@LlH&8op<;)q%mJJKSz(J#}Hsh*J-Kl0K-?5~w4=4&ZW{qS~Dj%9W%AYvhiN4}3 zayaXrr4pBm6Z9QHg3RmweevbNy0vhDiJC_$6{>DwI@Q^`GF!DmVi7Pk0iG&l6qeTU zhS6-*X@pu$f9;@;uIBEs#S38MN&`|2{BsWKz8o*oJ74JO>kmjpuk_Uo%96B@TE^U1j~Zn#Q!D-e8il_j$3_~Tg8mO{azFMzXbZ8$J6 zFjrH^qb>j97dgb6{I6wi?@bdM_+%#zhIql(FR4+>ae-I1O;&6#b{rIP1d zfgMOlh4td|(>DkrA2tM??SGe(#iB*~qo!>#sAfwAm`|&=MSs=Myv&HNIatpt&r`4I z?ktPX8j9LTR=~XFi$NRP?8|kKN~WqwCysk5)K{-BB_+vQwj@6s|CwYndq^&<1+gVS1S{wj0sRrXiclNUU9Rb-VoIy$thBXOvcI>!}X9hZ+Q%ozKva*`pC~I|CF|Gd4+7JaZ)OANK zzg|mzLZi%l&yw1l%OW+u{(J;Qz4+CboAU0@ldk>KAL+^L1k7H=BAI$Effe;v2n<+p z#s?qrk~aj>Y&UnUf@R06mM6We6=%OGk4<5ck0=vH5QYa!Hm%rVLS~S!Gc3N*JHlHO zY#enZJXb$Ql{}JYm=)4hhWytu{KIZ1vu^Y@3@{Hdz$W-L^LSh@M{6#fxwlkow@0~e zqvFOi*hexEJvLA?(=b&nGc8#{@p0T;Pd`3B_8&0X%O}lnd1AN7nldXvF?RN;-A2a8 zw)uA^>vjRXO16ef?FYhJGrWj@#fHeyl*jP^?$ValuCGc(c!FQBKaHeHrcGVxZu&}L z^GEs;!5_-zf zf#JoKb5C-!y3%!Adx4XEk2%FSVJdxMcz|5sFlyeHsM%k_=$rU)3)6!KRSf z`9t%wrL#?w;V;&o9u^f9tq`G0Vsy}01trR-8s$}1RyL=lof4r>k#Z|U)Nu4%roOzo z=)g$ZmmpA}<(_o!8tAc4pIyH&X&b_?e$Ib(!8+-BNRvqOz=E}IE*R9I`;vdBHF$#l zxmjB>J@Kyc0b09XN9ty6Zsai%3Ivi*@K;>uebuO_vV4A_PTsv>+aT=ayF-s3!#4u7WQQr!g;lGtyofS%Z-m z?(trc%S80~kqBm)$9e%95dj3ECH~hy-%}b6r8+h2-yssAy|;u2D>NC|RTyaHG8y$V z6ZS`d*xvnjurt+#W|NEfPE$i^>Lp93N6v0LX)Ezl)CgSWUA2;3M*F0L6{dms%ooXk_tFyDS;T0O2p{)c50m6g+@6!Tk(1`Z$hrzGj z1pkg1jvQG3ePsBrI{$2P|Dx;?ww0Ig*C03pMm;_^)qXulBEy z1HU>WT%(n5um1;Hv8^Z6+_`Mc%F6m`)!jAnGLip#F1#OTRQ)r^#c)C;JY_D08s3|d z+6`b!K}H@Xc#pUB4W!cL5^5eD+www5eTZ6~`)chL{PX`j^FTn6U9=a;em`S{auy*8 zNqk(~pU$fP<-{{$ zSVTxNoBr79fpVqoM#d_qrCXW>p8^Yq;?Hr1Ecc_P)JIY9?HuN{DQHcxhTG&@cz&8I zlF33X9o4B-`MM|ND|f3b#S8p&9DN$vTNvo@r@sHs0ukubc55*yXZ23tWbSIK8G^Lp zFDW^YmZz%q#qdUCuJQt2aB}^90s`?IxhVcUEhm;%CfPfr#PH!${}cJL12I1(aGG9iPPuo!j>`?SyCAeSE~|`_->`86>T6>gxb_Dhv4& z4_ZO7^$3+l16(g?(1{KiMkI=N-PS7PJ3bXO*g0U|-{EXQQ8MlfW9eyVL}uezG0-=G z4_ocuIp~fw*2k5TO=4qL^5AL(MJ_cpRg!pv*V+Kghhb;bZ(_;A!XX^s?m;W{7Sq5bskpU{?JZ0***%)6S2?wYn| z&n^JD`Sc#)!_Mir$2^>z%z}dT>VZ*@JWGis`<-UwbF>OyHPKD(EtJV18M9pcD(bT9 z=%Aj%!Pc1cC|Kw_)Syj#DgqBq3Zy^5oq>0a-61Uh|90g6_s-I3R_m5bC56f{VY(rK zyX?~b+4gABgnNp#XU;?|(uv*&axc$Uo(^a430-!t`4T`~K_t$rX?T4Tju>+`1Rra> z{hvnSZ63K!^YYHlPRSCpiuC!m?|k|zqeWrjx#Swmc5EFY@NR3Y_k{7`JWlP>teE6G zAf)D5T0bUl@AU}PaC1(>!2Ee$NiXG3N<~OWO2BF}4?N7q7i_{aCRK7BwY0SQ^jaQR zp2ZB_+hxbsEzSkNRy9Y9nv07o&p!4+-I>SH_X77PXjt2#nlCTnzBt!epRDp8tP(IN z(+Q-`0{A^*aZzb`Vb7c9B{XUGc!rKfbZLW6kV=SDsfAFc0ie_Lu84Gu>^+A3le zjiL<4N!QZ5^R2E}&5eySB@$YHX7xriyb9V$inVmQszu3vwy5JVh;IFyo?)0r2QH57XM!_yZ1P}9uV9b0=GNAn0k3jRObxoS*ie>IyEeAgh>1AL)*#?C7MUerOgewr>8fgm&W3PC%yZ-Z1-4F6%u!}Bp!w#*m7eN6a`Viq4Ii(r4=e@z z)hUU)2`AE)bQ=5dd(o0=85tRMf<_4%>T4gOZ>AP>fzwn&ts$YOUOTUwBLK=a!j^W?mcs51i&B)g?pP0%!Y~w(gpE^E$_#OW`}{O71+N zZ*A547fuL7*Xu!&=42sfTYo_`&`{wi9kJ_zW%C~dU2}RQ3t#iZ(B>Ghyk<)r)1VeQ zEf0#>OZc9f2fWC47wR37f8c5_!r1D!YlWwTowL!PR zO7=9q!|^L}|JmsfAID)e{#i1W*0r3R$7+B6V1U50DCjbMMDD<~x{vH*{G`hg0M#xc z5L-d_hP{qbl0_vsCzcnhtyO`l>pT&hM(1guj6HOm_L?`ax96b$qKzENPX?@7AO7|)_q?n3LofhE zb*b(Q6MuRihfHuRWxy-xWw8lQhisgnm$&b5uD4}O^XSq`&ljK$fF{mi2{)2aB?qSZ z=9jbiH-lYy!4c?;8a!t2@jrP(*p=xH(p%5bx_XUgqNf$+Lj)te#))@phJ$UXQO_*j zZ#fCZI)3N3TUiR$PLh^o!AcJ8UEOpWLhe*zN{WknKI>e9&)g;xm(jZKfsB!^g!@yR z9y7vAfBii%r+G_D3pEY(P>;#>Vx_ z@#WbQ?U=X?8P}-NaF<5D0I>e8JwZXONlV;*(1)};l1CWiJQ{hgZW7@eWKdR4uoP7= z1$V8x&NO~rny?VOV#(?jz$~@gGvQl?hStoSCCYt3XJ-rYFqQ(zb^e@O=|#Sx!%Xk2 znZM+7z&W*BZO;s;ji0eoDw%6r( zG|yi2_HM%WS)9z5Bm!K5l+OfH6aa1kdHE(#kbQ2Kt&Sue=+5*sD`$CL+*#q7J<`8x z?kx@vW8Lpah~sgf01K8AyzncEK%o(3(j zPEFS`|318G*fZDqmt+reJwn5L~Kim-! z9-bK6SJygX(7w@1KKJ$a!O`YSUKuF6W_UWrnaLHtgJ|DYLhLt+WKi}0_)&&Y`?-h2 z@2rZ}XnIW+US3|#y!|dJoeJEXm&ZKtF3jzK@`N@ioQ52aIhXmSTH4syfSkKES~lI! z-0rr0(M|jP18BTJ+i<;vUN+)^MpR3|j*?$33l1Mm+A1x?Pq}yn(8U(I+S+DgYXvDx zMCDz!*F>%hI+ubD^M;=32@B2DN?$!s&pibFa7RwrpX#S9JNHoooscak&gxe=mEA0x zQi>e_)?Yl@z%I5ogX7^gnR%l3@M?X!9nM<+!=yJ$a$qsa^4Zio_=br_SMtDiWjVdA zz+wyNK~Smx4AcB4aX9x6Yss&tPH9TD2mSl1gWtUNT~{}KHywu3%0U8LoXojL&cjOy zg=SmNKK~eRzd8O9DTMAXZpR#K^h{@4wz|)}^Nr`&U607!=YELk zC{4)6Qv~ARtHMKyVx|eDS?%)6>#E{CLGAT0HABXTROi5GyDZsj%7=ySVFGCWlMzJX zrd0~ziTS`8pXZV=sjy}M*gHB(q9v#l=p+#qs4OOA;sxZ~ofI^e>H20t@frvO z2xY! zmp4^-0LTqxQPdIkXwPn~((?|CL{LqqPA`!~H7#`I^?|-5T{(W8(8HIVv85a=F$CR%+|^gLUiJeZVe(9_OM>NiOjF z|3a3^FBL}O>WU{{C@~K7u*nD!f%*d3MY+zuFHOAIRqAxm11g@gKIj^X4)ksy`u!ue zAq|A-qfptTI$UycA)E2nI^u?aRGYu&6PY1Q^zMO>#~Ux1BB>#>xiYaJ)0*2ZnDAsU zj$U%pw_yvJxa+SYDH`r#;5zC11Vok!IVsNuba|SM=B6qt4K$m(nlowEc>)-~IAWQj z^SfMpyc}nNot;4O`=2&Yx8SwYi;2$t64-#;a}W^T=eKS$z<4IT;Lwt3Kt;}A4zJB5 zheGkpUOL&SQ+2wAk7>MdF6S*l8JmMv%m?n3=wfbwSrerk|JA}scYgX?zzf?LKu$G& zo>;^u0sUFuB4T4%4@pE9)+#K?p=Lj5U%E^BSUk8e*H~c#X;E8qS&QV|b&Z>w6zekm z3J~-Tva>bRX!Xx3?V#@+ub_eSuzH0HZz`h+*)N3NqE6=TWAuBb%QLp(Gr5JJf^MVZ zh09H6y2>Xpk(pggplZmt(Zk04XDu-Qti@i?&*`dp%sk7?V|reixJT-Vtq1*`(HY;d zxify8K32*jdfYSmhe>*o`+`;*mxRP^;AaK@1xytcX6OSNOOp;7|NEG(%n6j2_e6N`JUKzgV?SeJP##XqjI-UB|}VurQ5Ktown-_jG=;Q3Xh@cpS1ui(ZIpd@dx_)j3Wo~jCPFGCUP?`rbJECX7`>sDTEOPva0qEm71$}w%8r4fLS`rNgO|7!hu=Zp_ z*Ygg#e;?X2%{=4*^OiZM*Ag~Mb*cPMx2qb5kf{r2Rmi;B&DQ>rnY5{uGx*VtpkUOF z&K&3l^z_u)sF`}{o%T`9KQwV@!sSzVYs0}_#0e?C0t^B@JNuCM#FmgP8!vAh?o9qI zaibnht&DZAepNruc5>H?!{%&dB@-TL!@%4Om5gM=I8QdXW<5`S4S2~z4?jo}Um7RV}?4ws>ISyCnba*KPQGZ+viB?C&9~;g3$xdMHSl0@RjW@d;LqA{v2I z-4tOTiB?b;;*KcHHIgz29jI6AK9N{vX$mElemp&cVasM`o2Dhkm6`BZ_H*#?_5mh< z7mfh4azo0wUzFG6SQwtDXB^U|f-yb4yunYniYhn2kL>ac8i`bc zf`PX}oNwM57rDm8X*yNv=T01!j!TKhiG=Ox|En}N z*xk^C%RW;cannP)*0#rg0thp_PYQ1IiS69&t3yK9QY`7;I)Vl zLSgmoh%fmb2@U+US~%>2LY_{+F{=7JH>^tu-wvbdnfVQ0J4TjvwF`vnAkv0uA_wYi$1rix-FnmmQP$D|&tZ4JCMoHz^3` zAiW^&I}mRzq?-jJa>(=l2KvMPI@M$Vqgq>ARdTcpK{Oqn{-%+s$y3M)fr5I#M9swJ0}})6wAJw600Z#TB(5 z$wb+qTqX5F$%6opII=J)Y@w!N35vPq*ub>nsiY@EFDz}mkq8|sE!qh3X%Ol(8XWiz zKIb*IjKbUS?Cg@o*5>Afi%S9*sR=lB725W9JiuynZ9f)SuC*x_FUdzS#R6I|(%o%# zdi=C`^&>flc^?~fx&aV$0EMLd=6%%H*Vy`xLbYz8FkytU0G`zbV4#pv3vP?UTA(_- zQ0{eIz+!2|AiGi#5Sx>)$FP7qOemb1{)#rx5zP~S|Kd}6u;MWLP;9*1?fl{=xo7p# z%yGwnp-*8T)YSv*WuSiujio3R&9!JwUwLOW*6m^t==bZEO|0L81FU%#XX`Mk<`{uO zzsLMi?Uca?khgE)@X_(RyVV8$xInP`MIsZA=PBY<)T_vxA=tsl>+$E*fWO4?75PxN zYGcmkA=9_%Z2)k=;0gB6es23|Qepz@_)EbnWCfN9H>xr1N;g?@0cuOTCnh3ZgXGcxeACp%yk5q!auUiX?E zSb9w2SYInq%LO46Z14@wZV>}|Mj06yMzz9M5xXX5mI7|!gIID=UUt7k-7YFRXR z83Xk$?DH=?b@Bz!~mIwkCaPCD=Y;o`YD&J?@$Q(f2 zj~@-~Q0ERuHLNUxr-@%RM@uy4453F4{@Thu6jS}8=={jSS62ISuP%|1svhcym|aYl zNXWjh@hpt=KNa!1wP~Df@>hiq+ivw2<_-$Vmer+v6zm%N7iZU(_bPCNQ2*z$(2K&^ zKS0Q@hkqn75ITT4XGk{14w*TH=S;vxVNpTp{cm&)3R;jm3-n;|K1Sb>lS45S-a$U0 zECGFX{B&GcypR8omNn3fU+H7EChNBG(?Be3y&%GmaB|BD~5YgL8e}a`5VJ%!iF8b;(UN~pU3-yt>K@9 zfTW8e93*Lg9|s%;Ep2Ub30(0beZ$;%Qa| zD6zU(2E^+DWH52monkO0CBSw~fu><^*7*ar6Y~td!ghI`Z0SulFT#D(;$V~2=OdR! zLC&iy-RV-3a2*;nA|}nCwbKgXS*#V12)p&P8(ve0rXRmS+qg=E@6{9Z>w82oar{qt zQFM;@<`#?4n_KLUOb+G+OAD&*ZG9>}}|d>VGp z2ZT&~=Y4p{S@oErW#O~Aje#j!8vq4Ss||m`-y|6;UcsbxilR#2p7%Lk_P+q#+VX3# zQNM`B+t}QwM>0NQfp~6}8~Tdpel%#&1^G$^o&YcOvlDOra&n#=4#{RF>u*Tj>XOLm; z$d-V65QA!g%>-!ZvJ>Th0<(cc=g09dhE$cbwq{+x1>JJ}qIa7A#`NvDdyu=CI|aB4 z1?%6*6HKcN2tC}sutJ6M7j|QT*hw}D8{shmRyKNyVW%}({ibsf&b@sA=(UTi&eo87 zmbrmT;^jNO?Ji43uSOlphOdYV$=_A*_=737{&<>S)ccRu9s}*fy`aE-SI~t3NE92U z$d+xb+t&g3RvDRj_E(0Oj&il16F-v*Gqw)?pI580-Jp39#H?ATBZZZO+m}?>m%irg zKgc8czta7}=M0*Bks8_uvpCAW^5(n$_vIFT_edDQv*euhaeJRufHQ2g9WPK)J#Va( zSxQn@$Y3FoTK@iVBgby50U*KhL0yq%918I+k2ln6e%|9^h1N#3ztoL8Y^dG$O zFG=-{wN*<_^3a)q6)S3q^Jr7(c(y!b$2Qbs@a!=YL6^|O-#Q!B2N^xFJzaKu@D8N7 zL>E48imPiLZ~G6w=C7QYVl%(C74XaYJ7`Ngawq4;LAATS{VA34MLsr=u2rgG zpqZ*an^k4d0wD-|MPd|}pd1XITgjCY9Ml}G4ty1p77TbbsQDXU1_Cmk4H1+0Pz zap=$pehvZ$&vVNN7NscOG|RT259T`})2TSnHweHl0T6LXLDPdY+o-F@M9?mHP?w_tdz1NcE2e7Kr5ILNUxUg|ww6~izwIZ)1)m$G1cx5uhJ{Vjj#Q@!}=9JOpV z7u)GuUP+uzeJg=NJ7$QpLLCP{qY1=pn@3-NzrSgXC?g8z-2n=Qrwxd8)4Onr<`~qL z7r<5kr^;_&4lZt|5&$~dNSaYfwIXl)8vh|XrG?jkqL9FQB;qcND0Wr6n6_dUKua4q z0_;I&n4YmZ{J##1fU&8yt!+!_l#?^1Pt|I)Q=F1cBK=MI#<4JSY0&i?Mm)Y4t&n~F z`fD{Ju*OlAeK9T86ub=T6q;~rABuOCFwY{JWV=14@_ecI{n_Wk6}o6mu1^{^0E^on zPn|OFhPobumVYDZ>vVPE@SACraY>$$=iB+h4!j!cAU>NNKISOr(dfjVN1$u#y#|KO ztk6K5dhc;TnMj#UQ%%#6UQeC`M(j_IegPb@mn73WXTN;D{*gN)toL-V}ZT(6;8)7W>I|lob`~j zGi+#)S)KkZa~J(o)l<<|zQJC(4-|XLff~7dyCn{Lwh_>`SsEjo0$a6fA^TtKV~aVK zH=H<9k6(kmh2rne&x9|ptok3%U-16BWrO;UG=E65?vZR%6Pe+%Nf_3yNa-*pt|4 zV@5x&(=ggp$CNbd{($H}7UG9jKRLG^;FH1D72F`f_qPH|t zD^XetA)nDwvrcynh;i8oHRthm3%~CMbd-D57qp{u%bSemZh5y|U8Y?i>oseMZQ?}v{QTETA_VjJy)~QHRrk zBKiutCpSe_p!XUuatc!NPXKP2v!JiP#RVtuO1kz~k@y!@we$iS|0S-cnyXGrio~x@ z8@y_lAOyaO+NizsCME&!hMFqfEi^sbX(;mZ(mAP;+7CCRL=(?=UM|*1axUGdof)qK!@g$9zP75tr;RTmAf6 z<7U7uLED(rP4+{*;iO&L4ls6|S5N1X^`}Z)4cd@dEl%W&?Z`eQ7*(EjVCXE8=pt6* z779CebX$*^uHiIQmja7pmU+X+t$$WwVf~d0`-eW?cBaJ@_v@9QqPq{1k)axizoAc8 z_Wx(=mMh5p%T_9IO`|$$@naE=+2B_^0)pt62xXzvCSZ5z{GeTPlom%)v2owGV!H3g z?mMX7e_2x>&C_{CW|m$rK%%+vv#kI?4k$fkdN7rD`Z{*KG3C3diF&xDX#XqR94-q_ z+Lq5>;!N$^9^V#x$g1FR9rvEglQ?e-6#-#F?KO`)H!kb!-)Ku7KvVjSgEa54WE^lU zA+O6P1yqOaSAo<7I78X68Bi;W->Jry&ayY*DTcp{i}8U2aHA^%h+ z;O)yM zGNxe0u<)3Eev=D=L}$rJU3JF+v7<`FU|+-e;1gaMB^~sskkzSwIaX8pc52iH(cJq+ zOT32a?i=nhF_yH^By;k=jIQUx;jYdbl@ISfp38Am3w+5JB;)pF`ox>CGQ~a#$+(^f zN8YFxa|c76G}EMe=}Tl9y((M>wO~zAmrZMq7ta^WhO9jH3$D8OBK*{|tez`XXpjrL z{bweS^_YBjfvW_*$)j(fT`l!^#j<;$up&E}jpP}hysY?z2KHL9H;IvD4|rn5RDmJr znco-BMt4Gx0#`pDwm>}+)xgp_uH~?z-pc3<5y~L z9w_!DPA?jy2nPqk@%6!^1@nzL^QGJtTfS_4_0xHRks4`t-h5Q2=?M)_9T{_-3eRfi zM3E?oLy_;MTLJ^qLG zF=%+kY-nwa?PrwpCH!o9Vv6oS#;McqiPt;it1@ z_zS1tK_1}5a^DN@tqkP8Fw6b1D*CsjAz26EOW&;x59E>2b!|w!6b;+s+{ehii*a+# zGQN8G9H(A3yrAl|Rw;>2%&iD1<)`e1di^j#&(O^qiWpn25oX5tO z*wt~<2@SAlHcrkBP!tABG@O&CF8cJ;AC6(7XVx7#Yra`PsRjYwWj|PM=E0NS!cE(o zezfdeUYu?G_5%%qeBrBSyC08Q-BhN7GAyew$J|w)gGwxU^K=7Q|Lf`Mb&ZIyG5sEk z3Empe)q}Zp4poU>@+e>~Ok*n{diUDC$rjK*<#Bo#_%fSv_8z zQ2Ht^c;$;`TqVZF^=97X9HB{;mtHS&zFVTyR{S*$JSI~`IDItCgg|u-J2^NPk)E{w z6;4L?53NcjN~ppGeKE>Zrju8x8dyrI4>Lze7k7GFD>Dq8K2l@8OT@6sjdC{}!bD)L z6GwJ7la%;d6y|;B^)}WIg%Y_62+1A~i0y@yoNuxUj!7spk#sK~)?)xZTuwuLa1jX5)I#Wi!r`#nd_ zJHbZG5)-AMK51o^irV@cB6IohmJ5qEY{~Xj&AlOf|4aJ60x~9j47}zp||!U1i*9bofI$ z%KRtqWHg}4enx^cEh5@{Eb~n_E(|f*8F0ulI ztc2);!ZJ$Zg|M>}W-4WB7Wnu5RvZrISLJlsH$L= zr5M`4ya<>~A5>n|;^=%~R=wcXwwK27T(%*iu9qE%P<>aSC{1U*E_A%G%RLEuLvVX} z)i=MXyW63&K1^qkvGAAdxE7mi76JEX>Dss6`SkRd1+W_hqdm20%VR6GWZkf{(8K}!^4m(E(nT4oYB;=xp`b-An7r3 zK9CH|x&^MbD@7Zr)OsF=dF^f@QMO9Z!rcU)5DE`2Fah5$K3NNk?FPknDz7;Lg@q1C z0z%6%lLNye_|>9bcTZ+YC#%B}c`p+50dB_URW9mmiLtwtHmxLVO)dob8Rze4j!F;8eDYI7+L1FiqG)*>+`FuosNbaO zcMmOJ@FIqaz+HGifBo)vTB?OofRBIt^z!3vTed@Rq$LQ9p&jS+7W36HBE<|JJJ*sH z>NWelV~-WkXV_uKx{nH)7ExSW*bby`7S^)D6JN5*0aQmtR24d+$;?bmODnB>Jh%S2i$3lqHftYQ+yAH{ChPetfQb6!ZXX z$w?F60e%acSys$0>UfDDkYjv1oyhs66n)RU_x-^vc%xiL-RiI$Ejm7M_%$KWLwBBj zd!<0$XX&LB8ss-0GI2k;d-rCj;{zmjfar7Y4d~du+8&q( z01MBbQm-+6^)$ZivduxNW&c7TM4kNhFXWq*hHcL@J3*sxF4y{`zY+1}m-00JHawtj zxF2#?;Pm&WKUQ5J8p}V4NznQN{C{Xsb#1vmutO_}nQPDe&HC$dTR(-W6e%tMUw9}l z5K|2Lox%A?Y)+Z6E5WPX+_$&UfYAXQAXInoPyNZb3|&io`d840u{Nt6+NA&7@duuh zZ)kQjIxLJbZJFo7{15l%Lc{^(qFfCd14?5J2y{SnG!Jj^`G$}Rn4XgA;LKaYcWf*d z%)(W~cd`+og|O}&kO;v+WIubX$&ah|!9)O?+B0lf=03en#%1cY)c60a4nBx9%GPDf zRd8eyk4PI#6vQXf45Hhah2xM1j)8lOQikt68_6MXW9 z?aH}B9k&GHFS=(Uq&@GQTW&Mk<@g$xTD^;i0YSIB7WHK(J-(+t*#;ht}kSf@Io@ z$=*DH>wnnkmoyt`q~8q}25f%FDU{rQ3<6vJyBpqz5YoiZm>A_s>(o{mUZ;)c9(UHo z`SQzqI}XuTR?%bNwH=rNtedP3yyY)|j5Oc#1t~uwC`!BoE?+hZUE3r4X*tcwAFflU zVub8!%loPS7h${_oqj#v`)?45p=e3b&pl*I8BZ{My1*XG-m1S@{BU zc3OeOYFaVm11_97B7u(>t_gF2Z_9g<(P0s$y z20~LW$7yJk!Q@ik7Wj~()OZku@>AgP7qZ*Khe<9TN-6iuTB4b?r%`ilIZZ?84;|8f zVvWND7d?U4%rAQQ;aB-IZA90;Sn_2Hhh4C6)) z{_YEFC}>)VgOS4O$o;3e)5e(#|DYX=8ute%c`wu|gGDsuaria(gBokTH+=Pva`6cw z_W-rIUGOiIfr}9Sh>+WK9EcXrwJ-W3s8fU6L|JaEzW3-!&8Gg?g*@*YuByY~hSr(! z3UFmhMKMKInehD715Ubg7nJc)Rq(Y4z_AAsEI+Uq0m2ka;uL861I#k|WRzy8cClC9 z9sLl>|12s{>a2JAGsaYLysI{`2?7b`)EN$UjGi)st7MA*LzRY14MCvs(J$84+VffXUf4mslmUQKXv_U zSb~4a1v{}KE~6aK&)~3jhZ(bPjOPLI9M1zN3DT&cxhmdN*)a~&O zSGnyhi%l$6i=NXc&OY6({lXb>@GT6GV$5sZljRiM)&K1)og`XNm=GR3^Q5#UgX36$ z`G-u@;w@zZ#~D^N!X03-o1&T_^vFD`y>n$pq)xyh#I>BR3i#zuwNf%N;pBW1B~&>) zCT&PW>`7kf9`Qy%wfV3K(i)9|Xc_4$Hyf!ySKtzwS(ldE&>mmCiI9!-7Pvf&ZMs{EM9f zlVBn^+c6P#@y%B15Cx9!cz}`WFQf-lUgcC>i)tQbEv)Q^O-U==cwRMedsAB5DKgqs zGyM{w3p{*Z9PfhJE{h~o$T+pG^@p}ugZVA)r8a^k2dQ7`LtkA7ggdWeiy;s7*?Zua z@lLn{KdS&-LVx^@N+js!cD=D0JFh(tVNQ;>(<4bU77z2aV(K%N1^B+C#(!mON*$MS zm$CUa7`v+s{4<5l?HxSoIElIX*#j%%b;gm5FO^Eu9+oDAc?iRUO!gi84BFU3Ca>+m zuNjS0m(;IryWIK1Xjo!o*xP9gGK# zf{OlcKV>#6Hjl@hdsqt(N~lne4YW}n45|FD!{etWZWc?yJX^_*CR6@i>NqWGz<)wn zAR+(Bj7-qBl;2!Z%!H@q0vXuKaAuk$m-T+^8!+F;ohpel^3}30Lj2$%D~esHc>Kg| zO0TSW6TAHl9J+zyNN?}AE1*31#0fUX)5F;&$@_Y+_i6c$V#efz%%n6=T1Qd9HxVc% z^B+cwj{{Gp;LbQlKEA~lIcab{d0hCwi(Cfh(@-gq^3d0esH=~|!J9FejjT~E$ZmQn ztOR{?{(Nq1wjx5>24ebVQ5g0ZV)6z zDM@LO7A2*TX6Q}{De3O~_P{*xzTbOY{sDt?=A3=@*=y~!?)x_-U|TmA09*FMSYs8U z{fgU)R8ccxUY3tn%nmi8a>}LjB~fS&S0`-aGG;idU%&ELFb z&&qX8t=GdRbj8DLvd8T?I29DI^6|iF_>UGypZfQ=2N4b0H6 zQHpo}b;+hg^1h-oNQM$JJm@k8ZH)Q!${izh-!HI{ya&y8A4>@+ok#0-LhPU?o-dG;1mP`6YVX%5I@9lykzJF>Y*tQ>lH1iR}qj)&^eccT1qhziBJP1^Q4GR%l}bO zZo=8#wbZ(+MR@@_5JH*n9jKh!k%IX+kjiQc<*jy$W1>DulNqO!?7 zgGM*a(AC4~FC15cLn76MXr_jv>ZuiQD+|NFLBhqXgc>a~{}wgRmK|7!6U@!D zM!CM>ZeCj7qOo}%E?igHn9H(M7~*nR^q{-!Qu4NR=~YHChew3PN~`YZ$y1>S2)%KqV%@!5M{*mpi?Exv2bOGJcQH(bj|h+Dab(jT~K{NY!1T<~5ZTAz`--86S=6@2gzE$xr&ucwX4FfA=d0@J7AJ_H{iG&pwtnTUJofw-3z4Z#1oJ~CfEH-`^u-+*1D1|jkW$NU#L5d8W#FsQwTbQbqH?t7a( z0#4x0J+&EcX76USEXIha24o+af}l2L(QCwGq#D=w54j!^MMB7 zN^jg;i3OBq3oWy=O^d)_9G+--hB!bzkmCbfB(VuNfINet&m2(AnYG+K-448oeL;gO zX*dsrz?)P^b?H9<7P<#c;N3LL|G;BF^+zA*j29Od2a5adhdNIf1j`ZKp4p4gu#~AL zWL3{Xrs#S>MOW%{kwk@VvogD>-#{Xk53*pKr757lQnw7I1z~zUb?(>v)XnPMHn711 zjw%Gn0%4P)1{=wjB^E7BO+*};t3c8#^YY%axLSLS>fPHG5#?s(j(K2wuqhrvC>QSo zKhMG8RQZhrz?MVs5O>EnoblA_laV@3OF7+wD=Z6x7ErZvo1D^XJ?#saV^xUMv<1Mx zOSx;dNQo?)UWU|$CxC^pQ6oS_7?{Wz@S3Z1ToBo{2dSr2Wb&tcuA-9u{VOuXH4XZMc7{7cRl~AswKlFpUbM) zy9g}I40YujxwG^UfHh?IBdPkR2VD0PW#qJd|BfqymvG*Ce9KRlR5>L4Fg!|zMgySf zzOwjr7LV>MZdUI-pEHn`4>|nxj8c4U>UuU~ACt9GLYq={SS#>_tBN||W2*gZ8Qb16 zRiBZCJd1x%I0n=_ft9)Np=F9%_PKh+2U<~Rno z*uT7D+pDRwQ#sh7z;Wd&ozuXFN+PW*y;kNQo%e46B?UFL(x7y?pqAUD*IarYyoGL1 zf+1gN4tT=l{D2nG4qJj-Y330_3fiiW4KqB4dE$U$KF=Iax~Mb0Qu??Elx6EU*&PZI z5=+13sMvF$usmD@1MCf&hk*0S-qGAd`ucC@7y;aO=s@%d1Gw|}@nY&gUtCT2K>X(F zV|RJ}Kk;I@GmroSLfF9f|7XV?Q$clS--5@Ua(()_3m*a6MHxt@!M{QYmeH8t?ryV^C?EHy47!PQZy_TvvKxD7!M-Z?pb7gQF zM0Z{lwT*bI40eMw)>m!{!8PXVYuZS$oI?ue^Y4sYoObe6M1$JB>JHFrmR~FmpXOo3 zh$7`{lfb^N29NjxU~ZYCy%F2!&SoT~T2pU|8PjJRK|hBioLEZ42p?P)2H8KW%io^y zaKPt808lz5j?#!MrG3Mx%*IX?F?aR0{kv3+AIY_uf)Zch!*?b&lob~HlmfhbeDB{X zd|c1ei~#7K6=XMj`JFusfEpwO&BZMg>oWkoDZNMjb8Pcn0ek1Okeh`*tvsbbKU5NR zOZN%XtbRW9&_>?X4e3zd!4EA(IP%n<4%Y+6n)v(p5>R0P>?Jcgi>KhcX?Xvcyfo)~ zdpZ%HsW*PH;h0ucB1~~JE(qVllXKw51*BjEdyf(9I2Kd+LxYEbz4a5n8`U>Nxpj+mMu-3L3kYd7$B zgh%5XK=q3n(7l{rE-@Ku^#~DLi#cw>42t?q|8jv``{%uS`dkZN6rX?<6VS<6wz3+& z+sF3zD6-D!P#+yvf(;kVj#KVg8Ai@?l2LO@TA{7#Z->14qCFLNx7Up7Y%R0R0zPf6 z`><-{qFIq&H!Qo{hnL`>pcMZV_i+QcqP{!D5?}~qdlRYOtQAfZYY^SERaBm+*zDT} zF?drP1m;nul-z4g{Wruyji2JbV=26h2^8t{u&D(rROeX%OVj*I z`|jez1~6Y~Jho4LL}3+>wsz&fP~wsOAHjR>o~*oDX`Ak$2+j5fqk4 z$D6JZr*4-U0T5u1r^Gnuaviv)Ke9p#hTL)0_KOu^;HzcK~XDy_uaq_Cas z1}=xk95Ef-XiTk@Xx_iDkb^CL2L@WTe~}Se6zH3{_Y+ytOn|KuRIV8mtAVSt>0{yV ztH51*uvq}Q1sdO8lS}HP!GTv>{ZDcwE=B7j$-sKxLr~9GjS}DY(5Gbjt#!o`Ub9t| zbPyQ9ksJ@X`F?Whl-5s^&@h74vaeVWSTaTs=9;udUgP$=@zLS~sdz{m34Kf}_G?)o zmXkd5jPwsf))Snp{gABsQcC> zC|C2C{4@vXF$l_-OLJwh@&JbnP6_%NtKawUUS5SaSgJuAtGp(ukTyWpfmd`#l33G_r5U@sG)qJ_W5xujN}6%d6Fu37#o<(EJV~fm5J6LwRneNY zCHg9tri{r?kWR{i;psM`?%7r-%L*lqULYqYmvdDrbzS#^)|;L@{_NL%F!BRuZ^N~y z=k9jt_4eaGBja$cDbg{K>XTUro_YFCH{>|(z{)3K38)!?7K0&mulB-OwkBL7T?^^$ zz!|w8XO2nxivwj2id-OxeMrXvR!%eNuk3~Jrnyp(|NrC538MYV??OW$d1MDVy3!EY zh7l!+@WReyYL*v*sH_Dx3W|@@@4Uxdh6J5nKENISExy3iS0SLop8;2Ynr*eDp>@jt_9o zfVr92el)g0#^GL*=2erlYx293aw5;}e9b7}U}=Kd5LimoJ$DBLwaQ)fAepFh22*dI z%4kZm=(~QD{$^(1XH~So8Sy{H0)PPlb=wF-5|9m`{<3uE(_6WOuv0=ldQ1|QzS4fSir z7cnjHoO0+Il@hVo`NkgpY1bFe9(HDz|b))l)gDL^H~O<}AZ-mdTvD_EAX zsaeJRq*3j2lmUaF+?|&}P*hJsa>i&q(w17$7GLX0XwI*6r%p4v4_eUCchU<}2KSi+ z4LcV8z=mphGKBBtD4?_D;+rs{qXj7Y!Lom?WbF zP0z)t!X~nQJEa9;VJk33vOK(>{6kwphhB$V`PvDd$<4~k1o5Qtiu*D_$I@&5$dtZJm zeh*DpK!IeOzSe{nuce*JcfdVEivWHqv^q~OMb{23y42bGMyH)K%1`uEDpLw;BB zdB83c5?LoA%*)yIc`E*pXd@keb0T3--ER}E1?p-no2i&+-ru{-GqCt)IDAc8!|hEl zeGWUz3r~aBFNR+U)9j_!X0PT8>UZZREETC%dAMiMKeEkPABPR9bM7?l@~RNa4BZ@H z`_AhXyojx1jl-Zu3zx7{CYDm55ZUsmbX)^uQd!Zngopdocfvo$cX_eSE@HRjU0B>H zG3A6l6M4hP?^A8vo}*(^$v)3MY;SE_aMOELAt-o`O--#IS$UGxLZ!tSqFCBFCF&iV^jqa# z_VWB%W8TN|;-EGbrY0;Zx#&N;Yr|8Wot+K+cGJ_ea$0l2GPdfH5gOMR(4r63BoLEm z;1i|`<4j6CkHt**Zxy4YC=M1o9$P?#?%CR>pC1l zHRDX4KM@}vCVf=o(8uvCtfRI8s_1H}Tmm0+A8~3fjb6oX2=0+&=3h>2dpkif3zt@m zbH^Bha-bBeylAGu@VOnGLDv6N)%jYHa#TPwX1$HY%r)PW~ z=Oe>nlld~T3L8V!0VA*Ok2TH@i06%$`F&_wFT9RIfqwNYqVbr};AlJ^PWa}<%! zNc?uu92fra5x=WXncT|GaAu3uNR@(>HD%4|u}#<5UciT8^`tz#3cBHj{vwBjXFTR? zF=}#msPN)q^qEUg*VOQsyif4tpW z@5h(xDENGUMg7y)ashnE^ug_`Y3f533Df6^=D%;(+9SG^ygDl`Uc;e{oI)M_as7|G!#^jB&hKXOl);D?#ARQ9W8KDUdD%N{!LiD^HgM)l2 za?|5MGNNbO`o{jOyuQlZ{Tbb>_#;ssRSu(V8r$ctWV*aCt^6rP1^pg2=2)D$4eAH? zSfWbg@U>6Z+kWOxBqS!D-Kgkjhcw>hE5Zy7ROcuaF>&uGx__!Sn%468;MY!1Lqp+| zTdkmfF!s(o{M+^?SlbRK8P>|P^Dxyfqwh!s7GD?>O<4@O08!}lG;-x5@6cAZk**t} zl*;X9*9(`6wmLeo)b1WBJN!T?RG!Trk*s~v%5M)Pa9l89CAH9u`@cYI9L?qqg9DY$M2-MaCa$8)|cuO<~vz2 zHtP+k=HFYxnVifWewpqeI_?zq?d)sJlXe69=o9hnFqSt?Gknx*+?@}9>aT;yvnk(&X=(Z$bGSQdbaM~#i|s{5Z-Ww{hsg_ zIaEF(xi~(qB=8LoKHU6{XBAoU2lN@eeUUTK>H%!-xwB~@ok8_U5A~mAa&YfHeu8?y z?oO%P8a$>-N}5?CX~xy^b ziR@mjMAuyPuaX=`nd?SBnWt-fr?MUKijEC0ehj4P?j{J63l@Vwu2CsBqW7A{vCT43 z=p?fDcw7{E?0i6CNG;MqCX>CoK-w+EOqv$sUmw=7>73auZnwu43W?DUaqskJqCTvno02&(|BJ4Rpa-8QT& z@50ZYaZ<{Ubgn=6EFP|$6o1wk%{{;ao5>=JKyA&Ez`5%_b#@RM>cW4&HcYgf$wV?g zNcXT>sJXPy)*|oZcW_~^`+?J2jZdWZDLO26a7{rLD)jkHgNQx4?)~2xbV;E`?Cveg zb}=7cGY4Y-$52b~?5i9>HDijBf%Ftn0xd7Q;!HgG{f#L25fsvU;%S4shGfiFtT?LVBlSKD{C)jFJz2e{XyTq(eIB zTx^b}A=@g?hAMd&kK8xw+H&5;!Nuxm*QuyLo}5Eq*;bl?367})4gclMkk z6&-=xu6tmCK}R>a?L*W0BFH4f1*Imz^_gaATijfpUbj%K2nQ_y$)wq;oqn<|plsh? zw^KbV7Th7(_Fi33T5C!^gp%BimuFOa1r@O_2qb+QftQ>IbFtWuF=BoQa}8x_Bbc6> zCsEy`_NsX`)D~RLQ~I?SQr=$GA=&9}y4tw3V{hAVk1jDW@$<6}bO9{oY+ooC8I(A= z_&JjleB9YxO*;H{0MY4Z9dfZuBg?IIZ5ST5w%UE$7FqJ#(ft=2v-Z6FRhB}(vi+*d zg0<{u%oThC)EBkPuHq#yPb_wKR$3kNa;l$rdRLL5b=+siSsiv@c->f$b{+--bJjpq@!=S@0Jb9qv& zSY!sTQ@P$+%@+tOcP4YuyQ{nV_RsYS)WVql#=OAu8*~w>{ZRpKCXn66Kl+6Icg%Gux4m< zy)DJLEBvuE!W{m;6N{Hhmx;yl33vwJ`J0Z0V4prF(N!n2#n~S*FX(Zy=VWKMv$;zl z;N03rRBjj{+em{w{7OMVnm)Hd6Q(73=W1!vEB6!)rzar z%gVGhBrn6onZAXURfle|b6tI2NC%=Fgo47W9j2qAlA2F@d2%4@0smI%E{}itGmQ`i s;sLw*xfRC;5%;ftE%g2OTT(8rWy^D!Dz#K0T5c#Zl8O@f;xByu52vMq;z-3*#kcB zB)< zcfk(^doeY8eJg91*M>&+5OG6GLt9;YLjwvu7YY-5duuyhR#xlRx|a417Oz?Ktt=e7 zJITQ%Hcge)?EiTkToD3sPVi9Fv>JGf>v>f0gqSsZQ04V!lm!HtLWDRCj!#Afeg1YT zOr(6HZDe?J4L!0r)bIQ=+o!8MqP1L}x1|hy!+F;f;uB zTZsjjUmZNC&p3m)&7qb(XmcMX@J-A)gpcyl>0MSjjMm4tqk>#B0D zSs9cs`-Q|ns^D06sJ~dKn9osCUFrKHp87GiRVj_+#YoBDRFcc;-7saCMMhjxP3*_S zK!ejA>hpUhYCAU0T%FP+_m;LlGe7s0p!j+r4VC z@r@Sw^vUVmK}-CBp-j+{x~V7OnTg)GMJC5HR13=D9w(A*t|yWmVvac&q`m}m_?UO6 zzhpB|hw6-3)_BhuA;LGJ|GxNFc5v>zs2+)~UWA8-lj>~*tlJ13lFx9lun;=>D2V+Z!X8yUMpAfM={-l>u*GzsAZH`@;$S1G{^$EE7f(#N>1sULp*n55OZy`Mg)4$P z@0wmcCcFp#fmK20gmC@8n-|Wx{h&90f&X5EaR>U>n@5@`TL1arW5RV_!sdV9`c519 z9pS&%EnItbUmsi|ikWXq%Xy(pfwhj!c6oaQgf#^6gcY5<$goSr=^n!M<;O~~sHUGB z=KVfDyMpf{NQ_#c!O5>GJ8cD|>suIheZcVgXjKXS8-(QpI>}IWL)3#mOR?d7Fs~5EHsbZCea0wSA(cArPA4Ni<|+aQT5Uoc4Rxm$LrO|Yxzmno z8_aR`>zC`D=p;Q?$9z^`1S442vw&9eEC|6`JErcn!aExD0TN^WzLJY}msHw<1f76PHzeHsMTLM;Ye@1D1W?cv$W%l)M*GnZ-Y5}~-R+c9W41H1Jq znB^`=uJ<6JIDcLI(|kw1TsU@ogB?n=jz-p^_ECjvy)o+)9t0vv`0wcNLl+A))Jr_` z)XDE$!eBnDBa#I*W|Kx!x;lC-XC$d#zSQ%&d`L!w%-_G6&>vtzpBg;5`n~lrj%%?2 zN3+mwW#AUCYL*U^mxh;%rFLdgi(v5=86e-#1gM($zoRAhM)BJn3IN znv@LlH&8op<;)q%mJJKSz(J#}Hsh*J-Kl0K-?5~w4=4&ZW{qS~Dj%9W%AYvhiN4}3 zayaXrr4pBm6Z9QHg3RmweevbNy0vhDiJC_$6{>DwI@Q^`GF!DmVi7Pk0iG&l6qeTU zhS6-*X@pu$f9;@;uIBEs#S38MN&`|2{BsWKz8o*oJ74JO>kmjpuk_Uo%96B@TE^U1j~Zn#Q!D-e8il_j$3_~Tg8mO{azFMzXbZ8$J6 zFjrH^qb>j97dgb6{I6wi?@bdM_+%#zhIql(FR4+>ae-I1O;&6#b{rIP1d zfgMOlh4td|(>DkrA2tM??SGe(#iB*~qo!>#sAfwAm`|&=MSs=Myv&HNIatpt&r`4I z?ktPX8j9LTR=~XFi$NRP?8|kKN~WqwCysk5)K{-BB_+vQwj@6s|CwYndq^&<1+gVS1S{wj0sRrXiclNUU9Rb-VoIy$thBXOvcI>!}X9hZ+Q%ozKva*`pC~I|CF|Gd4+7JaZ)OANK zzg|mzLZi%l&yw1l%OW+u{(J;Qz4+CboAU0@ldk>KAL+^L1k7H=BAI$Effe;v2n<+p z#s?qrk~aj>Y&UnUf@R06mM6We6=%OGk4<5ck0=vH5QYa!Hm%rVLS~S!Gc3N*JHlHO zY#enZJXb$Ql{}JYm=)4hhWytu{KIZ1vu^Y@3@{Hdz$W-L^LSh@M{6#fxwlkow@0~e zqvFOi*hexEJvLA?(=b&nGc8#{@p0T;Pd`3B_8&0X%O}lnd1AN7nldXvF?RN;-A2a8 zw)uA^>vjRXO16ef?FYhJGrWj@#fHeyl*jP^?$ValuCGc(c!FQBKaHeHrcGVxZu&}L z^GEs;!5_-zf zf#JoKb5C-!y3%!Adx4XEk2%FSVJdxMcz|5sFlyeHsM%k_=$rU)3)6!KRSf z`9t%wrL#?w;V;&o9u^f9tq`G0Vsy}01trR-8s$}1RyL=lof4r>k#Z|U)Nu4%roOzo z=)g$ZmmpA}<(_o!8tAc4pIyH&X&b_?e$Ib(!8+-BNRvqOz=E}IE*R9I`;vdBHF$#l zxmjB>J@Kyc0b09XN9ty6Zsai%3Ivi*@K;>uebuO_vV4A_PTsv>+aT=ayF-s3!#4u7WQQr!g;lGtyofS%Z-m z?(trc%S80~kqBm)$9e%95dj3ECH~hy-%}b6r8+h2-yssAy|;u2D>NC|RTyaHG8y$V z6ZS`d*xvnjurt+#W|NEfPE$i^>Lp93N6v0LX)Ezl)CgSWUA2;3M*F0L6{dms%ooXk_tFyDS;T0O2p{)c50m6g+@6!Tk(1`Z$hrzGj z1pkg1jvQG3ePsBrI{$2P|Dx;?ww0Ig*C03pMm;_^)qXulBEy z1HU>WT%(n5um1;Hv8^Z6+_`Mc%F6m`)!jAnGLip#F1#OTRQ)r^#c)C;JY_D08s3|d z+6`b!K}H@Xc#pUB4W!cL5^5eD+www5eTZ6~`)chL{PX`j^FTn6U9=a;em`S{auy*8 zNqk(~pU$fP<-{{$ zSVTxNoBr79fpVqoM#d_qrCXW>p8^Yq;?Hr1Ecc_P)JIY9?HuN{DQHcxhTG&@cz&8I zlF33X9o4B-`MM|ND|f3b#S8p&9DN$vTNvo@r@sHs0ukubc55*yXZ23tWbSIK8G^Lp zFDW^YmZz%q#qdUCuJQt2aB}^90s`?IxhVcUEhm;%CfPfr#PH!${}cJL12I1(aGG9iPPuo!j>`?SyCAeSE~|`_->`86>T6>gxb_Dhv4& z4_ZO7^$3+l16(g?(1{KiMkI=N-PS7PJ3bXO*g0U|-{EXQQ8MlfW9eyVL}uezG0-=G z4_ocuIp~fw*2k5TO=4qL^5AL(MJ_cpRg!pv*V+Kghhb;bZ(_;A!XX^s?m;W{7Sq5bskpU{?JZ0***%)6S2?wYn| z&n^JD`Sc#)!_Mir$2^>z%z}dT>VZ*@JWGis`<-UwbF>OyHPKD(EtJV18M9pcD(bT9 z=%Aj%!Pc1cC|Kw_)Syj#DgqBq3Zy^5oq>0a-61Uh|90g6_s-I3R_m5bC56f{VY(rK zyX?~b+4gABgnNp#XU;?|(uv*&axc$Uo(^a430-!t`4T`~K_t$rX?T4Tju>+`1Rra> z{hvnSZ63K!^YYHlPRSCpiuC!m?|k|zqeWrjx#Swmc5EFY@NR3Y_k{7`JWlP>teE6G zAf)D5T0bUl@AU}PaC1(>!2Ee$NiXG3N<~OWO2BF}4?N7q7i_{aCRK7BwY0SQ^jaQR zp2ZB_+hxbsEzSkNRy9Y9nv07o&p!4+-I>SH_X77PXjt2#nlCTnzBt!epRDp8tP(IN z(+Q-`0{A^*aZzb`Vb7c9B{XUGc!rKfbZLW6kV=SDsfAFc0ie_Lu84Gu>^+A3le zjiL<4N!QZ5^R2E}&5eySB@$YHX7xriyb9V$inVmQszu3vwy5JVh;IFyo?)0r2QH57XM!_yZ1P}9uV9b0=GNAn0k3jRObxoS*ie>IyEeAgh>1AL)*#?C7MUerOgewr>8fgm&W3PC%yZ-Z1-4F6%u!}Bp!w#*m7eN6a`Viq4Ii(r4=e@z z)hUU)2`AE)bQ=5dd(o0=85tRMf<_4%>T4gOZ>AP>fzwn&ts$YOUOTUwBLK=a!j^W?mcs51i&B)g?pP0%!Y~w(gpE^E$_#OW`}{O71+N zZ*A547fuL7*Xu!&=42sfTYo_`&`{wi9kJ_zW%C~dU2}RQ3t#iZ(B>Ghyk<)r)1VeQ zEf0#>OZc9f2fWC47wR37f8c5_!r1D!YlWwTowL!PR zO7=9q!|^L}|JmsfAID)e{#i1W*0r3R$7+B6V1U50DCjbMMDD<~x{vH*{G`hg0M#xc z5L-d_hP{qbl0_vsCzcnhtyO`l>pT&hM(1guj6HOm_L?`ax96b$qKzENPX?@7AO7|)_q?n3LofhE zb*b(Q6MuRihfHuRWxy-xWw8lQhisgnm$&b5uD4}O^XSq`&ljK$fF{mi2{)2aB?qSZ z=9jbiH-lYy!4c?;8a!t2@jrP(*p=xH(p%5bx_XUgqNf$+Lj)te#))@phJ$UXQO_*j zZ#fCZI)3N3TUiR$PLh^o!AcJ8UEOpWLhe*zN{WknKI>e9&)g;xm(jZKfsB!^g!@yR z9y7vAfBii%r+G_D3pEY(P>;#>Vx_ z@#WbQ?U=X?8P}-NaF<5D0I>e8JwZXONlV;*(1)};l1CWiJQ{hgZW7@eWKdR4uoP7= z1$V8x&NO~rny?VOV#(?jz$~@gGvQl?hStoSCCYt3XJ-rYFqQ(zb^e@O=|#Sx!%Xk2 znZM+7z&W*BZO;s;ji0eoDw%6r( zG|yi2_HM%WS)9z5Bm!K5l+OfH6aa1kdHE(#kbQ2Kt&Sue=+5*sD`$CL+*#q7J<`8x z?kx@vW8Lpah~sgf01K8AyzncEK%o(3(j zPEFS`|318G*fZDqmt+reJwn5L~Kim-! z9-bK6SJygX(7w@1KKJ$a!O`YSUKuF6W_UWrnaLHtgJ|DYLhLt+WKi}0_)&&Y`?-h2 z@2rZ}XnIW+US3|#y!|dJoeJEXm&ZKtF3jzK@`N@ioQ52aIhXmSTH4syfSkKES~lI! z-0rr0(M|jP18BTJ+i<;vUN+)^MpR3|j*?$33l1Mm+A1x?Pq}yn(8U(I+S+DgYXvDx zMCDz!*F>%hI+ubD^M;=32@B2DN?$!s&pibFa7RwrpX#S9JNHoooscak&gxe=mEA0x zQi>e_)?Yl@z%I5ogX7^gnR%l3@M?X!9nM<+!=yJ$a$qsa^4Zio_=br_SMtDiWjVdA zz+wyNK~Smx4AcB4aX9x6Yss&tPH9TD2mSl1gWtUNT~{}KHywu3%0U8LoXojL&cjOy zg=SmNKK~eRzd8O9DTMAXZpR#K^h{@4wz|)}^Nr`&U607!=YELk zC{4)6Qv~ARtHMKyVx|eDS?%)6>#E{CLGAT0HABXTROi5GyDZsj%7=ySVFGCWlMzJX zrd0~ziTS`8pXZV=sjy}M*gHB(q9v#l=p+#qs4OOA;sxZ~ofI^e>H20t@frvO z2xY! zmp4^-0LTqxQPdIkXwPn~((?|CL{LqqPA`!~H7#`I^?|-5T{(W8(8HIVv85a=F$CR%+|^gLUiJeZVe(9_OM>NiOjF z|3a3^FBL}O>WU{{C@~K7u*nD!f%*d3MY+zuFHOAIRqAxm11g@gKIj^X4)ksy`u!ue zAq|A-qfptTI$UycA)E2nI^u?aRGYu&6PY1Q^zMO>#~Ux1BB>#>xiYaJ)0*2ZnDAsU zj$U%pw_yvJxa+SYDH`r#;5zC11Vok!IVsNuba|SM=B6qt4K$m(nlowEc>)-~IAWQj z^SfMpyc}nNot;4O`=2&Yx8SwYi;2$t64-#;a}W^T=eKS$z<4IT;Lwt3Kt;}A4zJB5 zheGkpUOL&SQ+2wAk7>MdF6S*l8JmMv%m?n3=wfbwSrerk|JA}scYgX?zzf?LKu$G& zo>;^u0sUFuB4T4%4@pE9)+#K?p=Lj5U%E^BSUk8e*H~c#X;E8qS&QV|b&Z>w6zekm z3J~-Tva>bRX!Xx3?V#@+ub_eSuzH0HZz`h+*)N3NqE6=TWAuBb%QLp(Gr5JJf^MVZ zh09H6y2>Xpk(pggplZmt(Zk04XDu-Qti@i?&*`dp%sk7?V|reixJT-Vtq1*`(HY;d zxify8K32*jdfYSmhe>*o`+`;*mxRP^;AaK@1xytcX6OSNOOp;7|NEG(%n6j2_e6N`JUKzgV?SeJP##XqjI-UB|}VurQ5Ktown-_jG=;Q3Xh@cpS1ui(ZIpd@dx_)j3Wo~jCPFGCUP?`rbJECX7`>sDTEOPva0qEm71$}w%8r4fLS`rNgO|7!hu=Zp_ z*Ygg#e;?X2%{=4*^OiZM*Ag~Mb*cPMx2qb5kf{r2Rmi;B&DQ>rnY5{uGx*VtpkUOF z&K&3l^z_u)sF`}{o%T`9KQwV@!sSzVYs0}_#0e?C0t^B@JNuCM#FmgP8!vAh?o9qI zaibnht&DZAepNruc5>H?!{%&dB@-TL!@%4Om5gM=I8QdXW<5`S4S2~z4?jo}Um7RV}?4ws>ISyCnba*KPQGZ+viB?C&9~;g3$xdMHSl0@RjW@d;LqA{v2I z-4tOTiB?b;;*KcHHIgz29jI6AK9N{vX$mElemp&cVasM`o2Dhkm6`BZ_H*#?_5mh< z7mfh4azo0wUzFG6SQwtDXB^U|f-yb4yunYniYhn2kL>ac8i`bc zf`PX}oNwM57rDm8X*yNv=T01!j!TKhiG=Ox|En}N z*xk^C%RW;cannP)*0#rg0thp_PYQ1IiS69&t3yK9QY`7;I)Vl zLSgmoh%fmb2@U+US~%>2LY_{+F{=7JH>^tu-wvbdnfVQ0J4TjvwF`vnAkv0uA_wYi$1rix-FnmmQP$D|&tZ4JCMoHz^3` zAiW^&I}mRzq?-jJa>(=l2KvMPI@M$Vqgq>ARdTcpK{Oqn{-%+s$y3M)fr5I#M9swJ0}})6wAJw600Z#TB(5 z$wb+qTqX5F$%6opII=J)Y@w!N35vPq*ub>nsiY@EFDz}mkq8|sE!qh3X%Ol(8XWiz zKIb*IjKbUS?Cg@o*5>Afi%S9*sR=lB725W9JiuynZ9f)SuC*x_FUdzS#R6I|(%o%# zdi=C`^&>flc^?~fx&aV$0EMLd=6%%H*Vy`xLbYz8FkytU0G`zbV4#pv3vP?UTA(_- zQ0{eIz+!2|AiGi#5Sx>)$FP7qOemb1{)#rx5zP~S|Kd}6u;MWLP;9*1?fl{=xo7p# z%yGwnp-*8T)YSv*WuSiujio3R&9!JwUwLOW*6m^t==bZEO|0L81FU%#XX`Mk<`{uO zzsLMi?Uca?khgE)@X_(RyVV8$xInP`MIsZA=PBY<)T_vxA=tsl>+$E*fWO4?75PxN zYGcmkA=9_%Z2)k=;0gB6es23|Qepz@_)EbnWCfN9H>xr1N;g?@0cuOTCnh3ZgXGcxeACp%yk5q!auUiX?E zSb9w2SYInq%LO46Z14@wZV>}|Mj06yMzz9M5xXX5mI7|!gIID=UUt7k-7YFRXR z83Xk$?DH=?b@Bz!~mIwkCaPCD=Y;o`YD&J?@$Q(f2 zj~@-~Q0ERuHLNUxr-@%RM@uy4453F4{@Thu6jS}8=={jSS62ISuP%|1svhcym|aYl zNXWjh@hpt=KNa!1wP~Df@>hiq+ivw2<_-$Vmer+v6zm%N7iZU(_bPCNQ2*z$(2K&^ zKS0Q@hkqn75ITT4XGk{14w*TH=S;vxVNpTp{cm&)3R;jm3-n;|K1Sb>lS45S-a$U0 zECGFX{B&GcypR8omNn3fU+H7EChNBG(?Be3y&%GmaB|BD~5YgL8e}a`5VJ%!iF8b;(UN~pU3-yt>K@9 zfTW8e93*Lg9|s%;Ep2Ub30(0beZ$;%Qa| zD6zU(2E^+DWH52monkO0CBSw~fu><^*7*ar6Y~td!ghI`Z0SulFT#D(;$V~2=OdR! zLC&iy-RV-3a2*;nA|}nCwbKgXS*#V12)p&P8(ve0rXRmS+qg=E@6{9Z>w82oar{qt zQFM;@<`#?4n_KLUOb+G+OAD&*ZG9>}}|d>VGp z2ZT&~=Y4p{S@oErW#O~Aje#j!8vq4Ss||m`-y|6;UcsbxilR#2p7%Lk_P+q#+VX3# zQNM`B+t}QwM>0NQfp~6}8~Tdpel%#&1^G$^o&YcOvlDOra&n#=4#{RF>u*Tj>XOLm; z$d-V65QA!g%>-!ZvJ>Th0<(cc=g09dhE$cbwq{+x1>JJ}qIa7A#`NvDdyu=CI|aB4 z1?%6*6HKcN2tC}sutJ6M7j|QT*hw}D8{shmRyKNyVW%}({ibsf&b@sA=(UTi&eo87 zmbrmT;^jNO?Ji43uSOlphOdYV$=_A*_=737{&<>S)ccRu9s}*fy`aE-SI~t3NE92U z$d+xb+t&g3RvDRj_E(0Oj&il16F-v*Gqw)?pI580-Jp39#H?ATBZZZO+m}?>m%irg zKgc8czta7}=M0*Bks8_uvpCAW^5(n$_vIFT_edDQv*euhaeJRufHQ2g9WPK)J#Va( zSxQn@$Y3FoTK@iVBgby50U*KhL0yq%918I+k2ln6e%|9^h1N#3ztoL8Y^dG$O zFG=-{wN*<_^3a)q6)S3q^Jr7(c(y!b$2Qbs@a!=YL6^|O-#Q!B2N^xFJzaKu@D8N7 zL>E48imPiLZ~G6w=C7QYVl%(C74XaYJ7`Ngawq4;LAATS{VA34MLsr=u2rgG zpqZ*an^k4d0wD-|MPd|}pd1XITgjCY9Ml}G4ty1p77TbbsQDXU1_Cmk4H1+0Pz zap=$pehvZ$&vVNN7NscOG|RT259T`})2TSnHweHl0T6LXLDPdY+o-F@M9?mHP?w_tdz1NcE2e7Kr5ILNUxUg|ww6~izwIZ)1)m$G1cx5uhJ{Vjj#Q@!}=9JOpV z7u)GuUP+uzeJg=NJ7$QpLLCP{qY1=pn@3-NzrSgXC?g8z-2n=Qrwxd8)4Onr<`~qL z7r<5kr^;_&4lZt|5&$~dNSaYfwIXl)8vh|XrG?jkqL9FQB;qcND0Wr6n6_dUKua4q z0_;I&n4YmZ{J##1fU&8yt!+!_l#?^1Pt|I)Q=F1cBK=MI#<4JSY0&i?Mm)Y4t&n~F z`fD{Ju*OlAeK9T86ub=T6q;~rABuOCFwY{JWV=14@_ecI{n_Wk6}o6mu1^{^0E^on zPn|OFhPobumVYDZ>vVPE@SACraY>$$=iB+h4!j!cAU>NNKISOr(dfjVN1$u#y#|KO ztk6K5dhc;TnMj#UQ%%#6UQeC`M(j_IegPb@mn73WXTN;D{*gN)toL-V}ZT(6;8)7W>I|lob`~j zGi+#)S)KkZa~J(o)l<<|zQJC(4-|XLff~7dyCn{Lwh_>`SsEjo0$a6fA^TtKV~aVK zH=H<9k6(kmh2rne&x9|ptok3%U-16BWrO;UG=E65?vZR%6Pe+%Nf_3yNa-*pt|4 zV@5x&(=ggp$CNbd{($H}7UG9jKRLG^;FH1D72F`f_qPH|t zD^XetA)nDwvrcynh;i8oHRthm3%~CMbd-D57qp{u%bSemZh5y|U8Y?i>oseMZQ?}v{QTETA_VjJy)~QHRrk zBKiutCpSe_p!XUuatc!NPXKP2v!JiP#RVtuO1kz~k@y!@we$iS|0S-cnyXGrio~x@ z8@y_lAOyaO+NizsCME&!hMFqfEi^sbX(;mZ(mAP;+7CCRL=(?=UM|*1axUGdof)qK!@g$9zP75tr;RTmAf6 z<7U7uLED(rP4+{*;iO&L4ls6|S5N1X^`}Z)4cd@dEl%W&?Z`eQ7*(EjVCXE8=pt6* z779CebX$*^uHiIQmja7pmU+X+t$$WwVf~d0`-eW?cBaJ@_v@9QqPq{1k)axizoAc8 z_Wx(=mMh5p%T_9IO`|$$@naE=+2B_^0)pt62xXzvCSZ5z{GeTPlom%)v2owGV!H3g z?mMX7e_2x>&C_{CW|m$rK%%+vv#kI?4k$fkdN7rD`Z{*KG3C3diF&xDX#XqR94-q_ z+Lq5>;!N$^9^V#x$g1FR9rvEglQ?e-6#-#F?KO`)H!kb!-)Ku7KvVjSgEa54WE^lU zA+O6P1yqOaSAo<7I78X68Bi;W->Jry&ayY*DTcp{i}8U2aHA^%h+ z;O)yM zGNxe0u<)3Eev=D=L}$rJU3JF+v7<`FU|+-e;1gaMB^~sskkzSwIaX8pc52iH(cJq+ zOT32a?i=nhF_yH^By;k=jIQUx;jYdbl@ISfp38Am3w+5JB;)pF`ox>CGQ~a#$+(^f zN8YFxa|c76G}EMe=}Tl9y((M>wO~zAmrZMq7ta^WhO9jH3$D8OBK*{|tez`XXpjrL z{bweS^_YBjfvW_*$)j(fT`l!^#j<;$up&E}jpP}hysY?z2KHL9H;IvD4|rn5RDmJr znco-BMt4Gx0#`pDwm>}+)xgp_uH~?z-pc3<5y~L z9w_!DPA?jy2nPqk@%6!^1@nzL^QGJtTfS_4_0xHRks4`t-h5Q2=?M)_9T{_-3eRfi zM3E?oLy_;MTLJ^qLG zF=%+kY-nwa?PrwpCH!o9Vv6oS#;McqiPt;it1@ z_zS1tK_1}5a^DN@tqkP8Fw6b1D*CsjAz26EOW&;x59E>2b!|w!6b;+s+{ehii*a+# zGQN8G9H(A3yrAl|Rw;>2%&iD1<)`e1di^j#&(O^qiWpn25oX5tO z*wt~<2@SAlHcrkBP!tABG@O&CF8cJ;AC6(7XVx7#Yra`PsRjYwWj|PM=E0NS!cE(o zezfdeUYu?G_5%%qeBrBSyC08Q-BhN7GAyew$J|w)gGwxU^K=7Q|Lf`Mb&ZIyG5sEk z3Empe)q}Zp4poU>@+e>~Ok*n{diUDC$rjK*<#Bo#_%fSv_8z zQ2Ht^c;$;`TqVZF^=97X9HB{;mtHS&zFVTyR{S*$JSI~`IDItCgg|u-J2^NPk)E{w z6;4L?53NcjN~ppGeKE>Zrju8x8dyrI4>Lze7k7GFD>Dq8K2l@8OT@6sjdC{}!bD)L z6GwJ7la%;d6y|;B^)}WIg%Y_62+1A~i0y@yoNuxUj!7spk#sK~)?)xZTuwuLa1jX5)I#Wi!r`#nd_ zJHbZG5)-AMK51o^irV@cB6IohmJ5qEY{~Xj&AlOf|4aJ60x~9j47}zp||!U1i*9bofI$ z%KRtqWHg}4enx^cEh5@{Eb~n_E(|f*8F0ulI ztc2);!ZJ$Zg|M>}W-4WB7Wnu5RvZrISLJlsH$L= zr5M`4ya<>~A5>n|;^=%~R=wcXwwK27T(%*iu9qE%P<>aSC{1U*E_A%G%RLEuLvVX} z)i=MXyW63&K1^qkvGAAdxE7mi76JEX>Dss6`SkRd1+W_hqdm20%VR6GWZkf{(8K}!^4m(E(nT4oYB;=xp`b-An7r3 zK9CH|x&^MbD@7Zr)OsF=dF^f@QMO9Z!rcU)5DE`2Fah5$K3NNk?FPknDz7;Lg@q1C z0z%6%lLNye_|>9bcTZ+YC#%B}c`p+50dB_URW9mmiLtwtHmxLVO)dob8Rze4j!F;8eDYI7+L1FiqG)*>+`FuosNbaO zcMmOJ@FIqaz+HGifBo)vTB?OofRBIt^z!3vTed@Rq$LQ9p&jS+7W36HBE<|JJJ*sH z>NWelV~-WkXV_uKx{nH)7ExSW*bby`7S^)D6JN5*0aQmtR24d+$;?bmODnB>Jh%S2i$3lqHftYQ+yAH{ChPetfQb6!ZXX z$w?F60e%acSys$0>UfDDkYjv1oyhs66n)RU_x-^vc%xiL-RiI$Ejm7M_%$KWLwBBj zd!<0$XX&LB8ss-0GI2k;d-rCj;{zmjfar7Y4d~du+8&q( z01MBbQm-+6^)$ZivduxNW&c7TM4kNhFXWq*hHcL@J3*sxF4y{`zY+1}m-00JHawtj zxF2#?;Pm&WKUQ5J8p}V4NznQN{C{Xsb#1vmutO_}nQPDe&HC$dTR(-W6e%tMUw9}l z5K|2Lox%A?Y)+Z6E5WPX+_$&UfYAXQAXInoPyNZb3|&io`d840u{Nt6+NA&7@duuh zZ)kQjIxLJbZJFo7{15l%Lc{^(qFfCd14?5J2y{SnG!Jj^`G$}Rn4XgA;LKaYcWf*d z%)(W~cd`+og|O}&kO;v+WIubX$&ah|!9)O?+B0lf=03en#%1cY)c60a4nBx9%GPDf zRd8eyk4PI#6vQXf45Hhah2xM1j)8lOQikt68_6MXW9 z?aH}B9k&GHFS=(Uq&@GQTW&Mk<@g$xTD^;i0YSIB7WHK(J-(+t*#;ht}kSf@Io@ z$=*DH>wnnkmoyt`q~8q}25f%FDU{rQ3<6vJyBpqz5YoiZm>A_s>(o{mUZ;)c9(UHo z`SQzqI}XuTR?%bNwH=rNtedP3yyY)|j5Oc#1t~uwC`!BoE?+hZUE3r4X*tcwAFflU zVub8!%loPS7h${_oqj#v`)?45p=e3b&pl*I8BZ{My1*XG-m1S@{BU zc3OeOYFaVm11_97B7u(>t_gF2Z_9g<(P0s$y z20~LW$7yJk!Q@ik7Wj~()OZku@>AgP7qZ*Khe<9TN-6iuTB4b?r%`ilIZZ?84;|8f zVvWND7d?U4%rAQQ;aB-IZA90;Sn_2Hhh4C6)) z{_YEFC}>)VgOS4O$o;3e)5e(#|DYX=8ute%c`wu|gGDsuaria(gBokTH+=Pva`6cw z_W-rIUGOiIfr}9Sh>+WK9EcXrwJ-W3s8fU6L|JaEzW3-!&8Gg?g*@*YuByY~hSr(! z3UFmhMKMKInehD715Ubg7nJc)Rq(Y4z_AAsEI+Uq0m2ka;uL861I#k|WRzy8cClC9 z9sLl>|12s{>a2JAGsaYLysI{`2?7b`)EN$UjGi)st7MA*LzRY14MCvs(J$84+VffXUf4mslmUQKXv_U zSb~4a1v{}KE~6aK&)~3jhZ(bPjOPLI9M1zN3DT&cxhmdN*)a~&O zSGnyhi%l$6i=NXc&OY6({lXb>@GT6GV$5sZljRiM)&K1)og`XNm=GR3^Q5#UgX36$ z`G-u@;w@zZ#~D^N!X03-o1&T_^vFD`y>n$pq)xyh#I>BR3i#zuwNf%N;pBW1B~&>) zCT&PW>`7kf9`Qy%wfV3K(i)9|Xc_4$Hyf!ySKtzwS(ldE&>mmCiI9!-7Pvf&ZMs{EM9f zlVBn^+c6P#@y%B15Cx9!cz}`WFQf-lUgcC>i)tQbEv)Q^O-U==cwRMedsAB5DKgqs zGyM{w3p{*Z9PfhJE{h~o$T+pG^@p}ugZVA)r8a^k2dQ7`LtkA7ggdWeiy;s7*?Zua z@lLn{KdS&-LVx^@N+js!cD=D0JFh(tVNQ;>(<4bU77z2aV(K%N1^B+C#(!mON*$MS zm$CUa7`v+s{4<5l?HxSoIElIX*#j%%b;gm5FO^Eu9+oDAc?iRUO!gi84BFU3Ca>+m zuNjS0m(;IryWIK1Xjo!o*xP9gGK# zf{OlcKV>#6Hjl@hdsqt(N~lne4YW}n45|FD!{etWZWc?yJX^_*CR6@i>NqWGz<)wn zAR+(Bj7-qBl;2!Z%!H@q0vXuKaAuk$m-T+^8!+F;ohpel^3}30Lj2$%D~esHc>Kg| zO0TSW6TAHl9J+zyNN?}AE1*31#0fUX)5F;&$@_Y+_i6c$V#efz%%n6=T1Qd9HxVc% z^B+cwj{{Gp;LbQlKEA~lIcab{d0hCwi(Cfh(@-gq^3d0esH=~|!J9FejjT~E$ZmQn ztOR{?{(Nq1wjx5>24ebVQ5g0ZV)6z zDM@LO7A2*TX6Q}{De3O~_P{*xzTbOY{sDt?=A3=@*=y~!?)x_-U|TmA09*FMSYs8U z{fgU)R8ccxUY3tn%nmi8a>}LjB~fS&S0`-aGG;idU%&ELFb z&&qX8t=GdRbj8DLvd8T?I29DI^6|iF_>UGypZfQ=2N4b0H6 zQHpo}b;+hg^1h-oNQM$JJm@k8ZH)Q!${izh-!HI{ya&y8A4>@+ok#0-LhPU?o-dG;1mP`6YVX%5I@9lykzJF>Y*tQ>lH1iR}qj)&^eccT1qhziBJP1^Q4GR%l}bO zZo=8#wbZ(+MR@@_5JH*n9jKh!k%IX+kjiQc<*jy$W1>DulNqO!?7 zgGM*a(AC4~FC15cLn76MXr_jv>ZuiQD+|NFLBhqXgc>a~{}wgRmK|7!6U@!D zM!CM>ZeCj7qOo}%E?igHn9H(M7~*nR^q{-!Qu4NR=~YHChew3PN~`YZ$y1>S2)%KqV%@!5M{*mpi?Exv2bOGJcQH(bj|h+Dab(jT~K{NY!1T<~5ZTAz`--86S=6@2gzE$xr&ucwX4FfA=d0@J7AJ_H{iG&pwtnTUJofw-3z4Z#1oJ~CfEH-`^u-+*1D1|jkW$NU#L5d8W#FsQwTbQbqH?t7a( z0#4x0J+&EcX76USEXIha24o+af}l2L(QCwGq#D=w54j!^MMB7 zN^jg;i3OBq3oWy=O^d)_9G+--hB!bzkmCbfB(VuNfINet&m2(AnYG+K-448oeL;gO zX*dsrz?)P^b?H9<7P<#c;N3LL|G;BF^+zA*j29Od2a5adhdNIf1j`ZKp4p4gu#~AL zWL3{Xrs#S>MOW%{kwk@VvogD>-#{Xk53*pKr757lQnw7I1z~zUb?(>v)XnPMHn711 zjw%Gn0%4P)1{=wjB^E7BO+*};t3c8#^YY%axLSLS>fPHG5#?s(j(K2wuqhrvC>QSo zKhMG8RQZhrz?MVs5O>EnoblA_laV@3OF7+wD=Z6x7ErZvo1D^XJ?#saV^xUMv<1Mx zOSx;dNQo?)UWU|$CxC^pQ6oS_7?{Wz@S3Z1ToBo{2dSr2Wb&tcuA-9u{VOuXH4XZMc7{7cRl~AswKlFpUbM) zy9g}I40YujxwG^UfHh?IBdPkR2VD0PW#qJd|BfqymvG*Ce9KRlR5>L4Fg!|zMgySf zzOwjr7LV>MZdUI-pEHn`4>|nxj8c4U>UuU~ACt9GLYq={SS#>_tBN||W2*gZ8Qb16 zRiBZCJd1x%I0n=_ft9)Np=F9%_PKh+2U<~Rno z*uT7D+pDRwQ#sh7z;Wd&ozuXFN+PW*y;kNQo%e46B?UFL(x7y?pqAUD*IarYyoGL1 zf+1gN4tT=l{D2nG4qJj-Y330_3fiiW4KqB4dE$U$KF=Iax~Mb0Qu??Elx6EU*&PZI z5=+13sMvF$usmD@1MCf&hk*0S-qGAd`ucC@7y;aO=s@%d1Gw|}@nY&gUtCT2K>X(F zV|RJ}Kk;I@GmroSLfF9f|7XV?Q$clS--5@Ua(()_3m*a6MHxt@!M{QYmeH8t?ryV^C?EHy47!PQZy_TvvKxD7!M-Z?pb7gQF zM0Z{lwT*bI40eMw)>m!{!8PXVYuZS$oI?ue^Y4sYoObe6M1$JB>JHFrmR~FmpXOo3 zh$7`{lfb^N29NjxU~ZYCy%F2!&SoT~T2pU|8PjJRK|hBioLEZ42p?P)2H8KW%io^y zaKPt808lz5j?#!MrG3Mx%*IX?F?aR0{kv3+AIY_uf)Zch!*?b&lob~HlmfhbeDB{X zd|c1ei~#7K6=XMj`JFusfEpwO&BZMg>oWkoDZNMjb8Pcn0ek1Okeh`*tvsbbKU5NR zOZN%XtbRW9&_>?X4e3zd!4EA(IP%n<4%Y+6n)v(p5>R0P>?Jcgi>KhcX?Xvcyfo)~ zdpZ%HsW*PH;h0ucB1~~JE(qVllXKw51*BjEdyf(9I2Kd+LxYEbz4a5n8`U>Nxpj+mMu-3L3kYd7$B zgh%5XK=q3n(7l{rE-@Ku^#~DLi#cw>42t?q|8jv``{%uS`dkZN6rX?<6VS<6wz3+& z+sF3zD6-D!P#+yvf(;kVj#KVg8Ai@?l2LO@TA{7#Z->14qCFLNx7Up7Y%R0R0zPf6 z`><-{qFIq&H!Qo{hnL`>pcMZV_i+QcqP{!D5?}~qdlRYOtQAfZYY^SERaBm+*zDT} zF?drP1m;nul-z4g{Wruyji2JbV=26h2^8t{u&D(rROeX%OVj*I z`|jez1~6Y~Jho4LL}3+>wsz&fP~wsOAHjR>o~*oDX`Ak$2+j5fqk4 z$D6JZr*4-U0T5u1r^Gnuaviv)Ke9p#hTL)0_KOu^;HzcK~XDy_uaq_Cas z1}=xk95Ef-XiTk@Xx_iDkb^CL2L@WTe~}Se6zH3{_Y+ytOn|KuRIV8mtAVSt>0{yV ztH51*uvq}Q1sdO8lS}HP!GTv>{ZDcwE=B7j$-sKxLr~9GjS}DY(5Gbjt#!o`Ub9t| zbPyQ9ksJ@X`F?Whl-5s^&@h74vaeVWSTaTs=9;udUgP$=@zLS~sdz{m34Kf}_G?)o zmXkd5jPwsf))Snp{gABsQcC> zC|C2C{4@vXF$l_-OLJwh@&JbnP6_%NtKawUUS5SaSgJuAtGp(ukTyWpfmd`#l33G_r5U@sG)qJ_W5xujN}6%d6Fu37#o<(EJV~fm5J6LwRneNY zCHg9tri{r?kWR{i;psM`?%7r-%L*lqULYqYmvdDrbzS#^)|;L@{_NL%F!BRuZ^N~y z=k9jt_4eaGBja$cDbg{K>XTUro_YFCH{>|(z{)3K38)!?7K0&mulB-OwkBL7T?^^$ zz!|w8XO2nxivwj2id-OxeMrXvR!%eNuk3~Jrnyp(|NrC538MYV??OW$d1MDVy3!EY zh7l!+@WReyYL*v*sH_Dx3W|@@@4Uxdh6J5nKENISExy3iS0SLop8;2Ynr*eDp>@jt_9o zfVr92el)g0#^GL*=2erlYx293aw5;}e9b7}U}=Kd5LimoJ$DBLwaQ)fAepFh22*dI z%4kZm=(~QD{$^(1XH~So8Sy{H0)PPlb=wF-5|9m`{<3uE(_6WOuv0=ldQ1|QzS4fSir z7cnjHoO0+Il@hVo`NkgpY1bFe9(HDz|b))l)gDL^H~O<}AZ-mdTvD_EAX zsaeJRq*3j2lmUaF+?|&}P*hJsa>i&q(w17$7GLX0XwI*6r%p4v4_eUCchU<}2KSi+ z4LcV8z=mphGKBBtD4?_D;+rs{qXj7Y!Lom?WbF zP0z)t!X~nQJEa9;VJk33vOK(>{6kwphhB$V`PvDd$<4~k1o5Qtiu*D_$I@&5$dtZJm zeh*DpK!IeOzSe{nuce*JcfdVEivWHqv^q~OMb{23y42bGMyH)K%1`uEDpLw;BB zdB83c5?LoA%*)yIc`E*pXd@keb0T3--ER}E1?p-no2i&+-ru{-GqCt)IDAc8!|hEl zeGWUz3r~aBFNR+U)9j_!X0PT8>UZZREETC%dAMiMKeEkPABPR9bM7?l@~RNa4BZ@H z`_AhXyojx1jl-Zu3zx7{CYDm55ZUsmbX)^uQd!Zngopdocfvo$cX_eSE@HRjU0B>H zG3A6l6M4hP?^A8vo}*(^$v)3MY;SE_aMOELAt-o`O--#IS$UGxLZ!tSqFCBFCF&iV^jqa# z_VWB%W8TN|;-EGbrY0;Zx#&N;Yr|8Wot+K+cGJ_ea$0l2GPdfH5gOMR(4r63BoLEm z;1i|`<4j6CkHt**Zxy4YC=M1o9$P?#?%CR>pC1l zHRDX4KM@}vCVf=o(8uvCtfRI8s_1H}Tmm0+A8~3fjb6oX2=0+&=3h>2dpkif3zt@m zbH^Bha-bBeylAGu@VOnGLDv6N)%jYHa#TPwX1$HY%r)PW~ z=Oe>nlld~T3L8V!0VA*Ok2TH@i06%$`F&_wFT9RIfqwNYqVbr};AlJ^PWa}<%! zNc?uu92fra5x=WXncT|GaAu3uNR@(>HD%4|u}#<5UciT8^`tz#3cBHj{vwBjXFTR? zF=}#msPN)q^qEUg*VOQsyif4tpW z@5h(xDENGUMg7y)ashnE^ug_`Y3f533Df6^=D%;(+9SG^ygDl`Uc;e{oI)M_as7|G!#^jB&hKXOl);D?#ARQ9W8KDUdD%N{!LiD^HgM)l2 za?|5MGNNbO`o{jOyuQlZ{Tbb>_#;ssRSu(V8r$ctWV*aCt^6rP1^pg2=2)D$4eAH? zSfWbg@U>6Z+kWOxBqS!D-Kgkjhcw>hE5Zy7ROcuaF>&uGx__!Sn%468;MY!1Lqp+| zTdkmfF!s(o{M+^?SlbRK8P>|P^Dxyfqwh!s7GD?>O<4@O08!}lG;-x5@6cAZk**t} zl*;X9*9(`6wmLeo)b1WBJN!T?RG!Trk*s~v%5M)Pa9l89CAH9u`@cYI9L?qqg9DY$M2-MaCa$8)|cuO<~vz2 zHtP+k=HFYxnVifWewpqeI_?zq?d)sJlXe69=o9hnFqSt?Gknx*+?@}9>aT;yvnk(&X=(Z$bGSQdbaM~#i|s{5Z-Ww{hsg_ zIaEF(xi~(qB=8LoKHU6{XBAoU2lN@eeUUTK>H%!-xwB~@ok8_U5A~mAa&YfHeu8?y z?oO%P8a$>-N}5?CX~xy^b ziR@mjMAuyPuaX=`nd?SBnWt-fr?MUKijEC0ehj4P?j{J63l@Vwu2CsBqW7A{vCT43 z=p?fDcw7{E?0i6CNG;MqCX>CoK-w+EOqv$sUmw=7>73auZnwu43W?DUaqskJqCTvno02&(|BJ4Rpa-8QT& z@50ZYaZ<{Ubgn=6EFP|$6o1wk%{{;ao5>=JKyA&Ez`5%_b#@RM>cW4&HcYgf$wV?g zNcXT>sJXPy)*|oZcW_~^`+?J2jZdWZDLO26a7{rLD)jkHgNQx4?)~2xbV;E`?Cveg zb}=7cGY4Y-$52b~?5i9>HDijBf%Ftn0xd7Q;!HgG{f#L25fsvU;%S4shGfiFtT?LVBlSKD{C)jFJz2e{XyTq(eIB zTx^b}A=@g?hAMd&kK8xw+H&5;!Nuxm*QuyLo}5Eq*;bl?367})4gclMkk z6&-=xu6tmCK}R>a?L*W0BFH4f1*Imz^_gaATijfpUbj%K2nQ_y$)wq;oqn<|plsh? zw^KbV7Th7(_Fi33T5C!^gp%BimuFOa1r@O_2qb+QftQ>IbFtWuF=BoQa}8x_Bbc6> zCsEy`_NsX`)D~RLQ~I?SQr=$GA=&9}y4tw3V{hAVk1jDW@$<6}bO9{oY+ooC8I(A= z_&JjleB9YxO*;H{0MY4Z9dfZuBg?IIZ5ST5w%UE$7FqJ#(ft=2v-Z6FRhB}(vi+*d zg0<{u%oThC)EBkPuHq#yPb_wKR$3kNa;l$rdRLL5b=+siSsiv@c->f$b{+--bJjpq@!=S@0Jb9qv& zSY!sTQ@P$+%@+tOcP4YuyQ{nV_RsYS)WVql#=OAu8*~w>{ZRpKCXn66Kl+6Icg%Gux4m< zy)DJLEBvuE!W{m;6N{Hhmx;yl33vwJ`J0Z0V4prF(N!n2#n~S*FX(Zy=VWKMv$;zl z;N03rRBjj{+em{w{7OMVnm)Hd6Q(73=W1!vEB6!)rzar z%gVGhBrn6onZAXURfle|b6tI2NC%=Fgo47W9j2qAlA2F@d2%4@0smI%E{}itGmQ`i s;sLw*xfRC;5%;ftE%g2OTT(8rWy^D!Dz#K0T5c#Zl8O@f;xByu52 Date: Thu, 6 Apr 2023 17:44:23 -0400 Subject: [PATCH 45/81] Updated Requirements --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index c39f059d..2b3107aa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ +pylint==2.17.1 +plantuml==0.3.0 flask==2.2.2 \ No newline at end of file From 06acbb1f8acf999c650f89673b4653ea8c0a86eb Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Fri, 7 Apr 2023 14:04:47 -0400 Subject: [PATCH 46/81] Task 2 changes --- app.py | 2 +- database/classes.png | Bin 0 -> 98851 bytes database/classes.puml | 54 ++++++++++++++++ database/db.py | 2 +- database/packages.png | Bin 0 -> 2537 bytes database/packages.puml | 7 +++ diagrams.md | 138 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 database/classes.png create mode 100644 database/classes.puml create mode 100644 database/packages.png create mode 100644 database/packages.puml create mode 100644 diagrams.md diff --git a/app.py b/app.py index adcee448..e4e4877d 100644 --- a/app.py +++ b/app.py @@ -138,4 +138,4 @@ def checkout(): if __name__ == '__main__': - app.run(debug=True, host=HOST, port=PORT) + app.run(debug=True, host=HOST, port=PORT) \ No newline at end of file diff --git a/database/classes.png b/database/classes.png new file mode 100644 index 0000000000000000000000000000000000000000..5484c97d7ca85f6e055216e03e71057bba0cceb9 GIT binary patch literal 98851 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%0Dd9vo0n()pC^H^ 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 literal 0 HcmV?d00001 diff --git a/database/classes.puml b/database/classes.puml new file mode 100644 index 00000000..70f3090c --- /dev/null +++ b/database/classes.puml @@ -0,0 +1,54 @@ +@startuml classes +set namespaceSeparator none +class "Database" as database.db.Database #aliceblue { + connection + cursor + database_path : str + get_all_item_ids() + get_all_user_information() + get_cost_by_sale_id(sale_id: int) + get_email_by_username(username: str) + get_first_name_by_username(username: str) + get_full_inventory() + get_full_sale_by_id(sale_id: int) + get_full_sales_information() + get_item_category_by_id(item_id: int) + get_item_id_by_sale_id(sale_id: int) + get_item_image_url_by_id(item_id: int) + get_item_info_by_id(item_id: int) + get_item_name_by_id(item_id: int) + get_item_price_by_id(item_id: int) + get_item_stock_by_id(item_id: int) + get_last_name_by_username(username: str) + get_password_hash_by_username(username: str) + get_quantity_by_sale_id(sale_id: int) + get_sale_date_by_sale_id(sale_id: int) + get_sales_by_cost_range(start_cost: float, end_cost: float) + get_sales_by_date_range(start_date: dt.date, end_date: dt.date) + get_sales_by_item_id(item_id: int) + get_sales_by_quantity_range(start_quantity: int, end_quantity: int) + get_sales_by_transaction_id(transaction_id: int) + get_sales_by_username(username: str) + get_transaction_id_by_sale_id(sale_id: int) + get_username_by_sale_id(sale_id: int) + insert_new_item(item_name: str, price: int, info: str) -> None + insert_new_sale(transaction_id: int, username: str, item_id: int, quantity: int, sale_date: dt.date, cost: float) + insert_user(username: str, password_hash: str, email: str, first_name: str, last_name: str) -> None + set_email(username: str, new_email: str) + set_first_name(username: str, new_first_name: str) + set_item_category(item_id: int, new_category: str) + set_item_image_url(item_id: int, new_image_url: str) + set_item_info(item_id: int, new_info: str) + set_item_name(item_id: int, new_name: str) + set_item_price(item_id: int, new_price: float) + set_item_stock(item_id: int, new_stock: int) + set_last_name(username: str, new_last_name: str) + set_password_hash(username: str, new_password_hash: str) + set_sale_cost(sale_id: int, discount: float, tax: float) + set_sale_date(sale_id: int, new_sale_date: dt.date) + set_sale_item_id(sale_id: int, new_item_id: int) + set_sale_quantity(sale_id: int, new_quantity: int) + set_sale_transaction_id(sale_id: int, new_transaction_id: int) + set_sale_username(sale_id: int, new_username: str) +} +@enduml \ No newline at end of file diff --git a/database/db.py b/database/db.py index 55fea435..454418dc 100644 --- a/database/db.py +++ b/database/db.py @@ -718,4 +718,4 @@ def set_sale_cost(self, sale_id: int, discount: float = 0, tax: float = 0.05): self.cursor.execute( "UPDATE sales SET cost = ? WHERE id = ?", (new_cost, sale_id)) - self.connection.commit() + self.connection.commit() \ No newline at end of file diff --git a/database/packages.png b/database/packages.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb575dd486f0e423f4f326b85226653ad2b323f GIT binary patch literal 2537 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 TYbHZ9a{&+zuJ%=S{ None`. + - [PlantUML class diagram documentation](https://plantuml.com/class-diagram) +- Be sure to regenerate the `.png` file for each subdirectory after you update the corresponding `.puml` file. + +```plantuml +@startuml classes +set namespaceSeparator none +class "Sessions" as store.core.session.Sessions #aliceblue { + sessions : dict + add_new_session(username: str, db: Database) -> None + get_all_sessions() -> dict + get_session(username: str) -> UserSession + remove_session(username: str) -> None +} +class "UserSession" as store.core.session.UserSession #aliceblue { + cart : dict + date : datetime, NoneType + db + total_cost : int + username : str + add_new_item(id: str, name: str, price: int, quantity: int, discount: float, tax_rate: float) -> None + empty_cart() -> dict + is_item_in_cart(id: str) -> bool + remove_item(id: str) -> None + delete_cart(id: str) -> None + submit_cart() -> None + update_item_quantity(id: str, change_to_quantity: int) -> None + update_total_cost() -> None +} +@enduml +``` + +## Task 4: Use Case Diagrams + +- Create a `diagrams` subdirectory from the project root directory, and navigate to it. +- Create a `cases` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each user type (actor) mentioned in your `SRS.md` file, create an appropriately named `.puml` file showcasing the use cases for that actor. + - For example, if I had an actor called `Customer`, I might create a file called `customer.puml` that looks like the template below. + - [PlantUML use case diagram documentation](https://plantuml.com/use-case-diagram) +- Generate a `.png` file from the `.puml` file. + - Remember, this will look something like: `python3.10 -m plantuml customer.puml` + +```plantuml +@startuml customer +left to right direction +actor Customer +rectangle "System" as system { + (Login) + (Register) + (View Cart) + (View Items) + (View Orders) + (View Profile) + (Logout) +} +Customer --> (Login) +Customer --> (Register) +Customer --> (View Cart) +Customer --> (View Items) +Customer --> (View Orders) +Customer --> (View Profile) +Customer --> (Logout) +@enduml +``` + +## Task 5: Sequence Diagrams + +- Create a `sequences` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each of the use cases shown in your use case diagrams, create an appropriately named `.puml` file showcasing the sequence of events for that use case and generate its corresponding `.png` file. + - For example, if I had a use case called `Login`, I might create a file called `login.puml` that looks like the template below. + - [PlantUML sequence diagram documentation](https://plantuml.com/sequence-diagram) + +```plantuml +@startuml login +actor Customer +boundary "System" as system +control "Sessions" as sessions +control "Authentication" as auth +Customer -> system: Login +activate system +system -> auth: login_pipeline(username, password) +activate auth +auth --> system: True +deactivate auth +system -> sessions: add_new_session(username, db) +activate sessions +sessions --> system: None +deactivate sessions +system -> system: redirect to home page +deactivate system +@enduml +``` + +## Submission Details + +- On Canvas, submit the following: + - the URL to your group's repository From 90c469d6370df9ca0978a436f98378a0bfcd8939 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Fri, 7 Apr 2023 15:50:16 -0400 Subject: [PATCH 47/81] updated testing diagrams packages.puml --- diagrams.md | 138 ++++++++++++++++++++++++++++++++++ requirements.txt | 4 +- testing/packages.png | Bin 0 -> 53533 bytes testing/packages.puml | 51 +++++++++++++ testing/packages_initial.png | Bin 0 -> 3845 bytes testing/packages_initial.puml | 11 +++ 6 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 diagrams.md create mode 100644 testing/packages.png create mode 100644 testing/packages.puml create mode 100644 testing/packages_initial.png create mode 100644 testing/packages_initial.puml diff --git a/diagrams.md b/diagrams.md new file mode 100644 index 00000000..a7bb2df7 --- /dev/null +++ b/diagrams.md @@ -0,0 +1,138 @@ +# Project 2: Design + +## Introduction + +In this phase, you will be mapping out your project and creating easily understandable diagrams that will help you and your team know your codebase inside and out. This also makes it much easier to communicate the flow of your application to less technical audiences or anyone who is new to your project. We will be using `pyreverse` and `plantuml` to help us create, update, and visualize our diagrams. + +This activity will require you to generate Class, Package, Use Case, and Sequence diagrams for your project. If you are unfamiliar with these diagrams, you can find an in-depth explanation of each diagram type [here](https://www.uml-diagrams.org/) or reference [this article](https://nulab.com/learn/software-development/uml-diagrams-guide/). + +## Task 1: Installations + +- Use `pip` to install the following packages: + - `pylint==2.17.1` + - `plantuml==0.3.0` +- Add both of these packages to your `requirements.txt` file, including the version numbers. Follow the format of the `flask` package in the file. +- Install `Graphviz` on your machine. You can find download instructions for your operating system [here](https://graphviz.org/download/). + +## Task 2: Initial Structure Diagrams + +- Each group member will create diagrams for at least one of the following subdirectories/files of your project: + - `authentication`: requires a package diagram + - `core`: requires both a package diagram and a class diagram + - `database`: requires both a package diagram and a class diagram + - `testing`: requires a package diagram + +All of the above diagrams must be generated, so split this work evenly and push and pull code often. To generate a class diagram for a subdirectory or file, you must first generate the `plantuml` files using `pyreverse`. Then, you must use `plantuml` to generate the diagram from the `plantuml` file. Here's an example of how to do this for the package diagram in the `testing` subdirectory. + +```bash +pyreverse --output puml --colorized -A --output-directory testing testin # generates testing/package.puml +python3.10 -m plantuml testing/package.puml # generates testing/package.png +``` + +Since `testing` has no classes, we do not need a class diagram, but if we did, we would change the `testing/package.puml` to `testing/classes.puml` in the last command. + +- Delete the `.puml` files that do not have a corresponding `.png` file. For example, since `testing` has no classes, we would delete `testing/classes.puml`. +- For each subdirectory, create copies of the `.puml` and `.png` files with naming schemes that include `_initial` in the name. + - For example, `testing/package.puml` would have a copy called `testing/package_initial.puml` and `testing/package.png` would have a copy called `testing/package_initial.png`. + +## Task 3: Update Structure Diagrams + +- Begin planning the implentations necessary to fulfill requirements listed in your `SRS.md` file. +- Go to the corresponding subdirectory, and update the `.puml` file to reflect the changes you have planned. + - For example, by implementing a method called `delete_cart` in the `UserSession` class from `core`, my `core/classes.puml` file would look like the one shown below because I added a line to the `UserSession` class that says `delete_cart(id: str) -> None`. + - [PlantUML class diagram documentation](https://plantuml.com/class-diagram) +- Be sure to regenerate the `.png` file for each subdirectory after you update the corresponding `.puml` file. + +```plantuml +@startuml classes +set namespaceSeparator none +class "Sessions" as store.core.session.Sessions #aliceblue { + sessions : dict + add_new_session(username: str, db: Database) -> None + get_all_sessions() -> dict + get_session(username: str) -> UserSession + remove_session(username: str) -> None +} +class "UserSession" as store.core.session.UserSession #aliceblue { + cart : dict + date : datetime, NoneType + db + total_cost : int + username : str + add_new_item(id: str, name: str, price: int, quantity: int, discount: float, tax_rate: float) -> None + empty_cart() -> dict + is_item_in_cart(id: str) -> bool + remove_item(id: str) -> None + delete_cart(id: str) -> None + submit_cart() -> None + update_item_quantity(id: str, change_to_quantity: int) -> None + update_total_cost() -> None +} +@enduml +``` + +## Task 4: Use Case Diagrams + +- Create a `diagrams` subdirectory from the project root directory, and navigate to it. +- Create a `cases` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each user type (actor) mentioned in your `SRS.md` file, create an appropriately named `.puml` file showcasing the use cases for that actor. + - For example, if I had an actor called `Customer`, I might create a file called `customer.puml` that looks like the template below. + - [PlantUML use case diagram documentation](https://plantuml.com/use-case-diagram) +- Generate a `.png` file from the `.puml` file. + - Remember, this will look something like: `python3.10 -m plantuml customer.puml` + +```plantuml +@startuml customer +left to right direction +actor Customer +rectangle "System" as system { + (Login) + (Register) + (View Cart) + (View Items) + (View Orders) + (View Profile) + (Logout) +} +Customer --> (Login) +Customer --> (Register) +Customer --> (View Cart) +Customer --> (View Items) +Customer --> (View Orders) +Customer --> (View Profile) +Customer --> (Logout) +@enduml +``` + +## Task 5: Sequence Diagrams + +- Create a `sequences` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each of the use cases shown in your use case diagrams, create an appropriately named `.puml` file showcasing the sequence of events for that use case and generate its corresponding `.png` file. + - For example, if I had a use case called `Login`, I might create a file called `login.puml` that looks like the template below. + - [PlantUML sequence diagram documentation](https://plantuml.com/sequence-diagram) + +```plantuml +@startuml login +actor Customer +boundary "System" as system +control "Sessions" as sessions +control "Authentication" as auth +Customer -> system: Login +activate system +system -> auth: login_pipeline(username, password) +activate auth +auth --> system: True +deactivate auth +system -> sessions: add_new_session(username, db) +activate sessions +sessions --> system: None +deactivate sessions +system -> system: redirect to home page +deactivate system +@enduml +``` + +## Submission Details + +- On Canvas, submit the following: + - the URL to your group's repository diff --git a/requirements.txt b/requirements.txt index c39f059d..63c9afdb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ -flask==2.2.2 \ No newline at end of file +flask==2.2.2 +pylint==2.17.1 +plantuml==0.3.0 \ No newline at end of file diff --git a/testing/packages.png b/testing/packages.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b758c1e44efe2c0132ee4a52722a92ababd3ea GIT binary patch literal 53533 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 "Filter" +"Filter" --> "SearchResult" +} +package "testing.shoppingCart" as testing.shoppingCart #aliceblue { +class "CartItem" { + -itemId : String + -quantity : Integer + -price : Float + +getTotalPrice() : Float +} +class "Cart" { + -items : List + +addItem(item: CartItem) : void + +removeItem(itemId: String) : void + +getItems() : List + +getTotalPrice() : Float + +checkout() : void +} +"Cart" --> "CartItem" +} +@enduml + + + \ No newline at end of file diff --git a/testing/packages_initial.png b/testing/packages_initial.png new file mode 100644 index 0000000000000000000000000000000000000000..fa59ed070b6d9b38a291cfbdf6640e531cad3d3f GIT binary patch literal 3845 zcmeHK`9G9x7bi=WFePItTg<2?#unKdMog9=J<7ffDq|mejU{4|C1WWJ8nUH4*6d2w z^u!R^h7vNEu^YR0dV1c^`_udW1@ABSxj)zEzRz{8@AsVRd=Jjd)PRRego}xZi3ec_ zzrn{o5E9Z=Vpfs~d*Nz}3su&k5s-l5h@@xP!s?_^U&q zK4>Q|On@g^&c)j^@bgD;CMIUFyEkuR{=Lq`%wlp@Ycx)ajKD;#F^Ev4EsE)kt-?IdY=_4j*^+5RpYMN^Eep5WA9$#IS>yWD1ZFo z0qTeh@*SGe_4GjX;CV18g35`(o~8SN3eN?luO#?s{~6+R-ehng^D0KK;xX;*8K2Ja zl)M4cGPx#JHA{~rfS4A&o^8V}6{Jw`%9{g1tG+w|h__x&DFX2Y*ex&CK?Yn+wKv?346kIBBDZzOgksNuO&mcB4(uC+T6@;U|J< zjmwi$2QBmm{4(G#$6x?fn3*mYj)!3Zto8i5r=uh|qE4OuFE-UAP7K%Sw;o^V$F1nU zmf(8Nt!}2IJ|Q7tdWk1lhD(Um@l;+r3ZJZkE+dE~b`P@mI9po=50wr%lgH0x0TNE1 zULF-s5c5#TejA9DceUFE3mP@;0TC7M4WOlsVu83ZK}MMBX20zXIXv^nK%}G zKBnrvh~CcH_>(6me3>cf8UO5Kh@XKwo-#q9+;BrdvPrS?73n+NftQh=}@HFDZc=;LbrBewL_B7>HFOWG8; zvhviCbPiX@n+Q%94M-70dgf9H3RGK^$YOkst_pZBWZ6SV8v#o57Cwjbl4{>{1IJ-E zsQej{WA}P(jA&);fiF#svvR)Cij?5^4y9S6#f61-*8*e?#IbGU^G6ET3!~JEI<#;= zuuGVz_frE)=dgt<@1*DYS9ZSoNwI({uDiz-ieyM;USrWbFpg?0=OvkWtZrpT3Flu+ zqI@YC%zLjV7Q9`d=Wy1Ys*g-PA*^1e7t70Xoab}m=}zHx>+4$$ejQ`}eHupvcvJP| zsETs$u#A9wg8~~`T_ZBL#jYW+d9C!-Pq|(9;s85sjftDKwwL6j9<13it5yA!(_GB< zr>t0nZtZ`l;YW*lZ@RuxtI0{D8qb_8t8SI3)e@HH4EJojOf&J@o>v{L^h1g(q_|!7 z`IZ+emeo0SL1Z~=zx$h{UI}4NvkE1r6HN%Bv|18$0?#(vY#peY64KqY;5iY4<}_~S zalBI|Vg^uSXRa*lifBM~^SzzY!foykrL{ur{(MG9{eU{u(Awg$err84e4;9vHFLwXg*xMnh_V;N1LSsJf zsZG+O3Tdn)l;g$z`B-EYgF896{SwG5(=4^iY zY}M<49Z1=C6-|wPypxsv6@SP05cVm@9>)|K9j;iYyOhS+r zk{b&O1^xvxU6bgj!Qox)W%JjV;D`

qpb)p1P@d6}Z zq35kMg`eesV*Qy9F_;aP!iA z)MAID1|$Tm8(SdQULtcG>^sIF%*tU;q-L<__zOaUqo=#nQj%!=;WB)gHrX}#xJnsY z*OY$6pdK1$flM?9`|=YJ7r4ER3CJ?7(TKIiPqHUMQV>=p7Rb)X&bbN0tRS7I0N0nc z>$=pe<4g4-7`#gKAY{{bgyK5RZ;Bv?YAc7EeNQJH@RobpUZ9KLt54JQFV@~ z7s3*T4zrF#px<^jBeJpCz1aSr8!YPIo4nH5@zoKge)I4 z$(-rmrIG1c-Q+gI4CeXd1kVXZqyvK>0!}WAzR0&yX^O?%E1ztpWRA8hN`(URDl4HB z5{qHM9WdFaWHocqOGr7GW3NMM95#WrNj)f9f<2@>jioI!F1fSvj*i8fNymi^625-uBWY@`Rw_eVChy!N7}JT8^gi>)}xtE@t&4ASXeZ4Ic5R;K-+ z-B7#I&$7)p+nU&Oo{SF(r$p) z_k!%L@-HPaKl=r{l&Z#S8C4GwBV?*Eu3UbkrUGi`M!;&>fKs1!teEPr%6(tQEuO0t zE8-C5(bWePooY7V3w0FMpqd)@BRzJrMU5{a3Il1X7$dpt}x*H8<9Wd?69l74!y0@xkh*-+)kU?`G#@FHO`^ zTV4S!Kkh1YuX-j51EXexs9DW0C*uGBJ*m` zMw!Y|i>mHM6L;r;SHRMUZ+o|SwfnI5D(C6b0;-oU`*!*<<7B!`T<3{xixW9= zzvU9YaTLHrigr{SKc$=cY!ijh(|cHVF<~wAS7gUh3&_$OBxOaHbjF`fakSlHEQzQ; zU8?+Xk?q7Wc}}yGK)eKeu=_LLqTnS=&7O*+`u9#9k^t>4c*4ge&`VotU-aqNn6)qA z0-o=;=8|p(*RO(~NfV6g4v!jKe!)I`9Tz|7aHpR-Edli)BH z{eK|;8xh->JC<+wg5-wF`gU6`{f3tS?)k*q%g;mseKm=j69h5@e;VJGa$2uPX=!Qu z%ff5_`S1b+QeIs8^e59m$0Q4hNOb-?jezm9g234sfoQ3nLkStx8#XqOH%hK+4*%qY z3g_Ly!Z9B&cn)Vj(#sy^AKhhMre Q=20euzA5~Tu4B}{07%>*XaE2J literal 0 HcmV?d00001 diff --git a/testing/packages_initial.puml b/testing/packages_initial.puml new file mode 100644 index 00000000..6e3f7ce9 --- /dev/null +++ b/testing/packages_initial.puml @@ -0,0 +1,11 @@ +@startuml packages +set namespaceSeparator none +package "testing" as testing #aliceblue { +} +package "testing.authTests" as testing.authTests #aliceblue { +} +package "testing.coreTests" as testing.coreTests #aliceblue { +} +package "testing.dbTests" as testing.dbTests #aliceblue { +} +@enduml From 01fb95385029bc2054926928074108a3d7a7b5e5 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Mon, 10 Apr 2023 21:41:26 -0400 Subject: [PATCH 48/81] updated use case diagrams and sequence diagrams --- diagrams/cases/customer.png | Bin 0 -> 10989 bytes diagrams/cases/customer.puml | 12 ++++++++++++ diagrams/sequences/login.png | Bin 0 -> 19138 bytes diagrams/sequences/login.puml | 18 ++++++++++++++++++ diagrams/sequences/viewCart.puml | 3 +++ 5 files changed, 33 insertions(+) create mode 100644 diagrams/cases/customer.png create mode 100644 diagrams/cases/customer.puml create mode 100644 diagrams/sequences/login.png create mode 100644 diagrams/sequences/login.puml create mode 100644 diagrams/sequences/viewCart.puml diff --git a/diagrams/cases/customer.png b/diagrams/cases/customer.png new file mode 100644 index 0000000000000000000000000000000000000000..79235c11dfb7057087e4fb74445c0edb30663aad GIT binary patch literal 10989 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 cb6ql}7si@bF;^PGxzj6ZO4^Fm@>XI02TL (Login) +Customer --> (View Cart) +Customer --> (View Items) +@enduml diff --git a/diagrams/sequences/login.png b/diagrams/sequences/login.png new file mode 100644 index 0000000000000000000000000000000000000000..7d190dc86de134783d7a7996ba8ecfba3c97cde9 GIT binary patch literal 19138 zcmc({Wmr{R7dE<)(hY(lp`aj$bf|!UlprDv0-H{ikXE`8MOr{gKvHtkDWHUa0f=-; zhlF%D-`L<2@B5w~-#LHIb3K<_d+)X8T63;3$GGo%jIsO_aU}%e z1U>?RWqtAleDjV_!599p*xpsQeQ0IvWNv6=i@0ZKY53H@*6`8g2TqqwY;CP=ZgFy2 zn;Tf#+F6)$JhZZ~|ItVTL%2OwQMdi;djuAYt|jry7~JtO4gsGe7K>n zC?16MP2>nhNW_($zyQz4W3xoc&T6(y0Un`0qx%S#3=lo(0+q zlzns1&96Yre_DKx)+hOD7~bmAG(kMJ+}ao{+AaBjfc<`NtSw&uv+uKuleB@2;`#kaV-4QMYD{@%J(klN+6Fe>#@lA&3~ zEi&eja9j(lzkuUSjKWkJIMH-D?pD!bij^nlUR<}xeuy5E?AqO2)A!BYP+^C&mzBlIa34xGoloA(J zanzlUJLO1rw_>yI+hy8QgtV8XZr{G_Nq2(slc73^we7D$zms_9U$U0v2RffU!#!sp zBiS4J8TVx<4>rY_r8|oERSi*I*|dJo@-NgW9do5h~_Hc2AQNf`S z)rIO>uR6@_aC>?}8=iNK&WSA?`0Gxn0+0XpSw&p zeg@e$+z-D5KK%M>IU0W5B0r}>%e5LcT6gdJ+wJ?BnyN;>u9mhPd~`~9MJ@DeZKlH& zV^3AJJ?MOw&G^kBswZRh{8GddTFyJ$ZSTG=3|A*`;=v6tZmE#nxKSuc68_-waA6@w z&;>3cR`}r>?r>&poIq~U9g$YetKZ%S1`@#KN1L$WCu;cV8Mcp6%Yk?%7W!wccR(<; zP@@`LutwiC9qH$%JQ*DI`KRAGW22V%=D)wca*u)OU3GV4oEtwgvtJ%;AJ0!)@?;W$ z=hFiZG__Q_uV%n^TQK^GZrE-5ZZMW(F3h6)s{`88Aq0lsf#a9lV3G2LtCVpms(un8 z5RqTg(Id5oqHwO+xEacN)FbT#!qfY@DB1b;Mb@?HWrw{g_)Q(BLq+t&undg%8-ap< z6>wa2nHNLKR$Msaj1eM69x+VhtnK>1+{I zcyPB1wwAxr^yFxLO+Ue7ejW3bXVgH2omp?b!D&kFZ_Uk<7PmiTYZN6XCm)~T$vZJQ z$zwGnC@AP!C3dVNwYeVWWSnYzfK_>ws(H#WvS);_=1)SW3a!#n&CwxJu7g|VWEseyKHUI zgOi5Gbnjc}spaMIY0i0NWNH{0!ffStUU`XG4-ql3ap)_tA%R803tUEf?WwG*D;%rk z`>`@nE3-XTis|w?H&u&O6AKExWABjJD$>ab*-lUA8(jJNDsFEwN}!yEDV0>3k#%x3 z085|cy%ojW�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 system: Login +activate system +system -> auth: login_pipeline(username, password) +activate auth +auth --> system: True +deactivate auth +system -> sessions: add_new_session(username, db) +activate sessions +sessions --> system: None +deactivate sessions +system -> system: redirect to home page +deactivate system +@enduml diff --git a/diagrams/sequences/viewCart.puml b/diagrams/sequences/viewCart.puml new file mode 100644 index 00000000..43fdf4a9 --- /dev/null +++ b/diagrams/sequences/viewCart.puml @@ -0,0 +1,3 @@ +@startuml classes +set namespaceSeparator none +@enduml From 4c2d14a4ee0278f777093874f34056cc934b5745 Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Tue, 11 Apr 2023 13:44:44 -0400 Subject: [PATCH 49/81] Design update 4/11/23 --- database/diagrams/PullFromDatabase.png | Bin 0 -> 12681 bytes database/diagrams/PullFromDatabase.puml | 13 +++++++++++++ .../diagrams/sequences/UpdatingDatabase.png | Bin 0 -> 31589 bytes .../diagrams/sequences/UpdatingDatabase.puml | 17 +++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 database/diagrams/PullFromDatabase.png create mode 100644 database/diagrams/PullFromDatabase.puml create mode 100644 database/diagrams/sequences/UpdatingDatabase.png create mode 100644 database/diagrams/sequences/UpdatingDatabase.puml diff --git a/database/diagrams/PullFromDatabase.png b/database/diagrams/PullFromDatabase.png new file mode 100644 index 0000000000000000000000000000000000000000..5d164f19596747e46515f56544c125333c7a3926 GIT binary patch literal 12681 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 (payment) : include + (checkout) .> (Inventory -1) + (Database) .> (checkout) : extends + (checkout) -- Database +} +@enduml \ No newline at end of file diff --git a/database/diagrams/sequences/UpdatingDatabase.png b/database/diagrams/sequences/UpdatingDatabase.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d276a30372d6411b6512df9d8cb843eee0be46 GIT binary patch literal 31589 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 Sequence1 : to actor +Sequence -> Sequence2 : To boundary +Sequence -> Sequence3 : To control +Sequence -> Sequence4 : To entity +Sequence -> Sequence5 : To database +Sequence -> Sequence6 : To collections +Sequence -> Sequence7 : To queue +@enduml \ No newline at end of file From 09d1eea8c1638b854e18d6eb113aaa63e25e411e Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Tue, 11 Apr 2023 15:15:25 -0400 Subject: [PATCH 50/81] update login.puml --- diagrams/sequences/login.png | Bin 19138 -> 22821 bytes diagrams/sequences/login.puml | 6 ++++++ diagrams/sequences/viewCart.puml | 3 --- 3 files changed, 6 insertions(+), 3 deletions(-) delete mode 100644 diagrams/sequences/viewCart.puml diff --git a/diagrams/sequences/login.png b/diagrams/sequences/login.png index 7d190dc86de134783d7a7996ba8ecfba3c97cde9..bd1a464c036f4cf7b406f5c8790238a271f2e2f9 100644 GIT binary patch literal 22821 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 Iol`;+04x()aU}%e z1U>?RWqtAleDjV_!599p*xpsQeQ0IvWNv6=i@0ZKY53H@*6`8g2TqqwY;CP=ZgFy2 zn;Tf#+F6)$JhZZ~|ItVTL%2OwQMdi;djuAYt|jry7~JtO4gsGe7K>n zC?16MP2>nhNW_($zyQz4W3xoc&T6(y0Un`0qx%S#3=lo(0+q zlzns1&96Yre_DKx)+hOD7~bmAG(kMJ+}ao{+AaBjfc<`NtSw&uv+uKuleB@2;`#kaV-4QMYD{@%J(klN+6Fe>#@lA&3~ zEi&eja9j(lzkuUSjKWkJIMH-D?pD!bij^nlUR<}xeuy5E?AqO2)A!BYP+^C&mzBlIa34xGoloA(J zanzlUJLO1rw_>yI+hy8QgtV8XZr{G_Nq2(slc73^we7D$zms_9U$U0v2RffU!#!sp zBiS4J8TVx<4>rY_r8|oERSi*I*|dJo@-NgW9do5h~_Hc2AQNf`S z)rIO>uR6@_aC>?}8=iNK&WSA?`0Gxn0+0XpSw&p zeg@e$+z-D5KK%M>IU0W5B0r}>%e5LcT6gdJ+wJ?BnyN;>u9mhPd~`~9MJ@DeZKlH& zV^3AJJ?MOw&G^kBswZRh{8GddTFyJ$ZSTG=3|A*`;=v6tZmE#nxKSuc68_-waA6@w z&;>3cR`}r>?r>&poIq~U9g$YetKZ%S1`@#KN1L$WCu;cV8Mcp6%Yk?%7W!wccR(<; zP@@`LutwiC9qH$%JQ*DI`KRAGW22V%=D)wca*u)OU3GV4oEtwgvtJ%;AJ0!)@?;W$ z=hFiZG__Q_uV%n^TQK^GZrE-5ZZMW(F3h6)s{`88Aq0lsf#a9lV3G2LtCVpms(un8 z5RqTg(Id5oqHwO+xEacN)FbT#!qfY@DB1b;Mb@?HWrw{g_)Q(BLq+t&undg%8-ap< z6>wa2nHNLKR$Msaj1eM69x+VhtnK>1+{I zcyPB1wwAxr^yFxLO+Ue7ejW3bXVgH2omp?b!D&kFZ_Uk<7PmiTYZN6XCm)~T$vZJQ z$zwGnC@AP!C3dVNwYeVWWSnYzfK_>ws(H#WvS);_=1)SW3a!#n&CwxJu7g|VWEseyKHUI zgOi5Gbnjc}spaMIY0i0NWNH{0!ffStUU`XG4-ql3ap)_tA%R803tUEf?WwG*D;%rk z`>`@nE3-XTis|w?H&u&O6AKExWABjJD$>ab*-lUA8(jJNDsFEwN}!yEDV0>3k#%x3 z085|cy%ojW�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 system: None deactivate sessions system -> system: redirect to home page +Customer -> system: View Cart +activate system +system -> auth: viewCart +activate auth +auth -> system: True +deactivate auth deactivate system @enduml diff --git a/diagrams/sequences/viewCart.puml b/diagrams/sequences/viewCart.puml deleted file mode 100644 index 43fdf4a9..00000000 --- a/diagrams/sequences/viewCart.puml +++ /dev/null @@ -1,3 +0,0 @@ -@startuml classes -set namespaceSeparator none -@enduml From ab42fd654ff76308c0879aa10deffb29ae8f2b71 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Tue, 11 Apr 2023 20:06:51 -0400 Subject: [PATCH 51/81] Diagrams --- authentication/packages.png | Bin 0 -> 32116 bytes authentication/packages.puml | 30 ++++++ authentication/packages_initial.png | Bin 0 -> 2736 bytes authentication/packages_initial.puml | 7 ++ diagrams.md | 138 +++++++++++++++++++++++++++ diagrams/cases/customer.png | Bin 0 -> 17805 bytes diagrams/cases/customer.puml | 16 ++++ diagrams/sequences/login.png | Bin 0 -> 22782 bytes diagrams/sequences/login.puml | 24 +++++ 9 files changed, 215 insertions(+) create mode 100644 authentication/packages.png create mode 100644 authentication/packages.puml create mode 100644 authentication/packages_initial.png create mode 100644 authentication/packages_initial.puml create mode 100644 diagrams.md create mode 100644 diagrams/cases/customer.png create mode 100644 diagrams/cases/customer.puml create mode 100644 diagrams/sequences/login.png create mode 100644 diagrams/sequences/login.puml diff --git a/authentication/packages.png b/authentication/packages.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5b81e431f92bfc1f2c1b3854a8b8b34334836b GIT binary patch literal 32116 zcmc$GWk8f$8|@f?3WyTYpi)u-QqrOV($WnA(%mtXiJ*XVhje#HgCO0_07ExJGc?>i zsOOyTeBZr)FMm|#o%h}E-p_uXwbrw?J}+g&uy2sufIuMF;xC@dLm+7M5Xhy=*DizK z#ESn+1b;Bti>TV`TUoo98yMO{#0)GAY<2AoUfw>C9}x{iWE!7T0}oe7h}rG&Z!`I(q$2uCRvH5o;UTO?;Z#i?AT1JkVK^fMljx+)EAJxOuAOh^zY-x70r%L(tGSm><+)u)$; zNDckZSB#}=aTvUPaoPwf25spi9ED`jO%e2T7AlYG1Ju^(nltrLSIB>6EUyZfpWyN&ez z$U#x;(m1|+xV~yf?M=K`)uk?H%@*)AkZ7)&xIA8 zwbx=XHIwthN*q4qzO}9ZI�IYz!Cm0c@2yQ$b7pHrcqHBo-^ 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 literal 0 HcmV?d00001 diff --git a/authentication/packages.puml b/authentication/packages.puml new file mode 100644 index 00000000..485d34b2 --- /dev/null +++ b/authentication/packages.puml @@ -0,0 +1,30 @@ +@startuml packages +set namespaceSeparator none +package "authentication" as authentication #aliceblue { +} +package "authentication.authTools" as authentication.authTools #aliceblue { +} +package "authentication.login" as authentication.login #aliceblue { +class "Sessions" { + username : str + db : Database + add_new_session(self, username: str, db: Database) -> None + get_session(self, username: str) -> UserSession + remove_session(self, username: str) -> None + get_all_sessions(self) -> dict +} + +class "AuthTools" { + username : str + password : str + key : str + salt : str + hash_password(password: str, salt: str = None) -> tuple + username_exists(username: str) -> bool + update_passwords(username: str, key: str, salt: str) + check_password(password: str, salt: str, key: str) -> bool + login_pipeline(username: str, password: str) -> bool + +} +} +@enduml diff --git a/authentication/packages_initial.png b/authentication/packages_initial.png new file mode 100644 index 0000000000000000000000000000000000000000..f20677a044d184c0b4a36f058de248dcbd67b95c GIT binary patch literal 2736 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 literal 0 HcmV?d00001 diff --git a/authentication/packages_initial.puml b/authentication/packages_initial.puml new file mode 100644 index 00000000..80d19a41 --- /dev/null +++ b/authentication/packages_initial.puml @@ -0,0 +1,7 @@ +@startuml packages +set namespaceSeparator none +package "authentication" as authentication #aliceblue { +} +package "authentication.authTools" as authentication.authTools #aliceblue { +} +@enduml diff --git a/diagrams.md b/diagrams.md new file mode 100644 index 00000000..a7bb2df7 --- /dev/null +++ b/diagrams.md @@ -0,0 +1,138 @@ +# Project 2: Design + +## Introduction + +In this phase, you will be mapping out your project and creating easily understandable diagrams that will help you and your team know your codebase inside and out. This also makes it much easier to communicate the flow of your application to less technical audiences or anyone who is new to your project. We will be using `pyreverse` and `plantuml` to help us create, update, and visualize our diagrams. + +This activity will require you to generate Class, Package, Use Case, and Sequence diagrams for your project. If you are unfamiliar with these diagrams, you can find an in-depth explanation of each diagram type [here](https://www.uml-diagrams.org/) or reference [this article](https://nulab.com/learn/software-development/uml-diagrams-guide/). + +## Task 1: Installations + +- Use `pip` to install the following packages: + - `pylint==2.17.1` + - `plantuml==0.3.0` +- Add both of these packages to your `requirements.txt` file, including the version numbers. Follow the format of the `flask` package in the file. +- Install `Graphviz` on your machine. You can find download instructions for your operating system [here](https://graphviz.org/download/). + +## Task 2: Initial Structure Diagrams + +- Each group member will create diagrams for at least one of the following subdirectories/files of your project: + - `authentication`: requires a package diagram + - `core`: requires both a package diagram and a class diagram + - `database`: requires both a package diagram and a class diagram + - `testing`: requires a package diagram + +All of the above diagrams must be generated, so split this work evenly and push and pull code often. To generate a class diagram for a subdirectory or file, you must first generate the `plantuml` files using `pyreverse`. Then, you must use `plantuml` to generate the diagram from the `plantuml` file. Here's an example of how to do this for the package diagram in the `testing` subdirectory. + +```bash +pyreverse --output puml --colorized -A --output-directory testing testin # generates testing/package.puml +python3.10 -m plantuml testing/package.puml # generates testing/package.png +``` + +Since `testing` has no classes, we do not need a class diagram, but if we did, we would change the `testing/package.puml` to `testing/classes.puml` in the last command. + +- Delete the `.puml` files that do not have a corresponding `.png` file. For example, since `testing` has no classes, we would delete `testing/classes.puml`. +- For each subdirectory, create copies of the `.puml` and `.png` files with naming schemes that include `_initial` in the name. + - For example, `testing/package.puml` would have a copy called `testing/package_initial.puml` and `testing/package.png` would have a copy called `testing/package_initial.png`. + +## Task 3: Update Structure Diagrams + +- Begin planning the implentations necessary to fulfill requirements listed in your `SRS.md` file. +- Go to the corresponding subdirectory, and update the `.puml` file to reflect the changes you have planned. + - For example, by implementing a method called `delete_cart` in the `UserSession` class from `core`, my `core/classes.puml` file would look like the one shown below because I added a line to the `UserSession` class that says `delete_cart(id: str) -> None`. + - [PlantUML class diagram documentation](https://plantuml.com/class-diagram) +- Be sure to regenerate the `.png` file for each subdirectory after you update the corresponding `.puml` file. + +```plantuml +@startuml classes +set namespaceSeparator none +class "Sessions" as store.core.session.Sessions #aliceblue { + sessions : dict + add_new_session(username: str, db: Database) -> None + get_all_sessions() -> dict + get_session(username: str) -> UserSession + remove_session(username: str) -> None +} +class "UserSession" as store.core.session.UserSession #aliceblue { + cart : dict + date : datetime, NoneType + db + total_cost : int + username : str + add_new_item(id: str, name: str, price: int, quantity: int, discount: float, tax_rate: float) -> None + empty_cart() -> dict + is_item_in_cart(id: str) -> bool + remove_item(id: str) -> None + delete_cart(id: str) -> None + submit_cart() -> None + update_item_quantity(id: str, change_to_quantity: int) -> None + update_total_cost() -> None +} +@enduml +``` + +## Task 4: Use Case Diagrams + +- Create a `diagrams` subdirectory from the project root directory, and navigate to it. +- Create a `cases` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each user type (actor) mentioned in your `SRS.md` file, create an appropriately named `.puml` file showcasing the use cases for that actor. + - For example, if I had an actor called `Customer`, I might create a file called `customer.puml` that looks like the template below. + - [PlantUML use case diagram documentation](https://plantuml.com/use-case-diagram) +- Generate a `.png` file from the `.puml` file. + - Remember, this will look something like: `python3.10 -m plantuml customer.puml` + +```plantuml +@startuml customer +left to right direction +actor Customer +rectangle "System" as system { + (Login) + (Register) + (View Cart) + (View Items) + (View Orders) + (View Profile) + (Logout) +} +Customer --> (Login) +Customer --> (Register) +Customer --> (View Cart) +Customer --> (View Items) +Customer --> (View Orders) +Customer --> (View Profile) +Customer --> (Logout) +@enduml +``` + +## Task 5: Sequence Diagrams + +- Create a `sequences` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each of the use cases shown in your use case diagrams, create an appropriately named `.puml` file showcasing the sequence of events for that use case and generate its corresponding `.png` file. + - For example, if I had a use case called `Login`, I might create a file called `login.puml` that looks like the template below. + - [PlantUML sequence diagram documentation](https://plantuml.com/sequence-diagram) + +```plantuml +@startuml login +actor Customer +boundary "System" as system +control "Sessions" as sessions +control "Authentication" as auth +Customer -> system: Login +activate system +system -> auth: login_pipeline(username, password) +activate auth +auth --> system: True +deactivate auth +system -> sessions: add_new_session(username, db) +activate sessions +sessions --> system: None +deactivate sessions +system -> system: redirect to home page +deactivate system +@enduml +``` + +## Submission Details + +- On Canvas, submit the following: + - the URL to your group's repository diff --git a/diagrams/cases/customer.png b/diagrams/cases/customer.png new file mode 100644 index 0000000000000000000000000000000000000000..4bf7a2392fbae30235c0cece9cd47acd27d38929 GIT binary patch literal 17805 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 HCgT49>{;~% literal 0 HcmV?d00001 diff --git a/diagrams/cases/customer.puml b/diagrams/cases/customer.puml new file mode 100644 index 00000000..1a9cbc83 --- /dev/null +++ b/diagrams/cases/customer.puml @@ -0,0 +1,16 @@ +@startuml customer +left to right direction +actor Customer +rectangle "System" as system { + (Login) + (View Cart) + (View Items) + (View Orders) + (Logout) +} +Customer --> (Login) +Customer --> (View Cart) +Customer --> (View Items) +Customer --> (View Orders) +Customer --> (Logout) +@enduml \ No newline at end of file diff --git a/diagrams/sequences/login.png b/diagrams/sequences/login.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8275e7e74da70db05b2ee051a247f9afdd8b4e GIT binary patch literal 22782 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 Jmvv4FO#lq3cgp|( literal 0 HcmV?d00001 diff --git a/diagrams/sequences/login.puml b/diagrams/sequences/login.puml new file mode 100644 index 00000000..f83696bb --- /dev/null +++ b/diagrams/sequences/login.puml @@ -0,0 +1,24 @@ +@startuml login +actor Customer +boundary "System" as system +control "Sessions" as sessions +control "Authentication" as auth +Customer -> system: Login +activate system +system -> auth: login_pipeline(username, password) +activate auth +auth --> system: True +deactivate auth +system -> sessions: add_new_session(username, db) +activate sessions +sessions --> system: None +deactivate sessions +system -> system: redirect to home page +Customer -> system: Login +activate system +system -> auth: username_exists(username) +activate auth +auth --> system: True +deactivate auth +deactivate system +@enduml \ No newline at end of file From a80b988cb74132ef30d857a72b78f9697abd05ec Mon Sep 17 00:00:00 2001 From: Blaise Thomas Date: Tue, 11 Apr 2023 20:40:04 -0400 Subject: [PATCH 52/81] 3 of 4 --- diagrams.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diagrams.md b/diagrams.md index d5684f99..53b63f57 100644 --- a/diagrams.md +++ b/diagrams.md @@ -1,5 +1,5 @@ # Project 2: Design - +Blaise Thomas ## Introduction In this phase, you will be mapping out your project and creating easily understandable diagrams that will help you and your team know your codebase inside and out. This also makes it much easier to communicate the flow of your application to less technical audiences or anyone who is new to your project. We will be using `pyreverse` and `plantuml` to help us create, update, and visualize our diagrams. From bbce8cfc6960c559436dbadbb86073624353bc86 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Tue, 11 Apr 2023 21:06:12 -0400 Subject: [PATCH 53/81] Updated diagrams --- .../cases/{customer.png => customerExperience.png} | Bin .../{customer.puml => customerExperience.puml} | 0 diagrams/sequences/{login.png => loginAttempt.png} | Bin .../sequences/{login.puml => loginAttempt.puml} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename diagrams/cases/{customer.png => customerExperience.png} (100%) rename diagrams/cases/{customer.puml => customerExperience.puml} (100%) rename diagrams/sequences/{login.png => loginAttempt.png} (100%) rename diagrams/sequences/{login.puml => loginAttempt.puml} (100%) diff --git a/diagrams/cases/customer.png b/diagrams/cases/customerExperience.png similarity index 100% rename from diagrams/cases/customer.png rename to diagrams/cases/customerExperience.png diff --git a/diagrams/cases/customer.puml b/diagrams/cases/customerExperience.puml similarity index 100% rename from diagrams/cases/customer.puml rename to diagrams/cases/customerExperience.puml diff --git a/diagrams/sequences/login.png b/diagrams/sequences/loginAttempt.png similarity index 100% rename from diagrams/sequences/login.png rename to diagrams/sequences/loginAttempt.png diff --git a/diagrams/sequences/login.puml b/diagrams/sequences/loginAttempt.puml similarity index 100% rename from diagrams/sequences/login.puml rename to diagrams/sequences/loginAttempt.puml From 5532624208fcda82647a25ac8a8fee7f0d1f377a Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 13 Apr 2023 17:29:29 -0400 Subject: [PATCH 54/81] updates to style.css and home.html --- authentication/passwords.txt | 3 ++- database/startingData.sql | 2 +- static/css/style.css | 21 +++++++++++++++++++++ static/images/diamond_ring.jpeg | Bin 0 -> 15676 bytes templates/home.html | 4 +++- 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 static/images/diamond_ring.jpeg diff --git a/authentication/passwords.txt b/authentication/passwords.txt index 3d93be76..01b749f9 100644 --- a/authentication/passwords.txt +++ b/authentication/passwords.txt @@ -1,4 +1,5 @@ aturing:0d911297a1e34f4fcce78537f9aaa66a:b93727798b520dc10d145b53909c061f082ff14cd5f8cb4ab24c3b71bfa57d7e12e1296029be74c06a0d91ba32756f9fc978047fbe7232be67f94dfc1de9ced9 dritchie:e11d3b1a66b1ad362223c30b78138519:67aff785bd17ac24448d491926ff7aadd8fa75e51a2f7a9bfc31889bad0adcd2989061a27ccd9eff9e5e31f2bc14b5c193727e116dc8dc48259acb3919171cd4 llamport:89d0e5fe8d06ec113839c8f319d7033e:9171d14954eeda4e70777c23d98e349818125cdaeb884ff97ebf8cc0a9c7778f54ce394256588148132a03ebea891e44077c659e6c0132fa87a8cf77e436ae11 -bliskov:e71dda285effa69e1c29ac810fe7a986:1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2 \ No newline at end of file +bliskov:e71dda285effa69e1c29ac810fe7a986:1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2 +:173c8ae295ab703115e87cb8e41c7d6a:3a042dda12ce7741413936f3cad966fce4d2540c873413949347f4a65feea73c0a20cac69b831b503faf8f4bf5cbee2f482ca629d6f69756e6f6575e7f5fed06 \ No newline at end of file diff --git a/database/startingData.sql b/database/startingData.sql index 19da65d3..83755821 100644 --- a/database/startingData.sql +++ b/database/startingData.sql @@ -11,7 +11,7 @@ INSERT into `users` (`username`, `password_hash`, `email`, `first_name`, `last_n VALUES ('bliskov', '1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2', 'barbara@thor.com', 'Barbara', 'Liskov'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) -VALUES ('Apples', 'An edible cultivation of the Malus genus.', 2.00, 100, 'static/images/apple.jpeg', 'Fruit'); +VALUES ('Diamond Ring', 'A luxurious ring with a sparkling diamond as the centerpiece.', 5000.00, 50, 'static/images/diamond_ring.jpeg', 'Jewelry'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) VALUES ('Bananas', 'A long curved fruit which grows in clusters and has soft pulpy flesh and yellow skin when ripe.', 1.00, 100, 'static/images/banana.jpeg', 'Fruit'); diff --git a/static/css/style.css b/static/css/style.css index c5aeb0ea..f5cdafc5 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -40,6 +40,7 @@ /*

*/ #product_card { + position: relative; margin: 0 auto; margin-top: 10px; margin-bottom: 10px; @@ -50,6 +51,7 @@ } .product_card-img { + display: block; width: 300px; height: 300px; } @@ -65,6 +67,8 @@ .product_card-text { /* Centered */ + display: none; + position: absolute; text-align: center; font-size: 15px; margin-top: 10px; @@ -73,6 +77,23 @@ height: 60px; } +.overlay { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + height: 100%; + width: 100%; + opacity: 0; + transition: .5s ease; + background-color: #008CBA; + } + +.product_card-img:hover .overlay { + opacity: 1; +} + .product_card-price { text-align: center; font-size: 15px; diff --git a/static/images/diamond_ring.jpeg b/static/images/diamond_ring.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..aa6ea82be8506750c1643172228e4093ac4ae682 GIT binary patch literal 15676 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 Q42b*8a6o^22Aoa*AFjDpBme*a literal 0 HcmV?d00001 diff --git a/templates/home.html b/templates/home.html index cc35f50a..9bdf4009 100644 --- a/templates/home.html +++ b/templates/home.html @@ -16,7 +16,9 @@

Products

...
{{ product.item_name }}
-

{{ product.info }}

+
+

{{ product.info }}

+

${{ product.price }}

From e1010171d01deab217bce98fe6c74b5186923195 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 13 Apr 2023 17:31:46 -0400 Subject: [PATCH 55/81] update to style.css --- static/css/style.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/static/css/style.css b/static/css/style.css index f5cdafc5..21c13cfa 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -83,11 +83,11 @@ bottom: 0; left: 0; right: 0; - height: 100%; - width: 100%; + height: 95%; + width: 95%; opacity: 0; transition: .5s ease; - background-color: #008CBA; + background-color: #09b6f0; } .product_card-img:hover .overlay { From b244e05c2be78e70a3c8ae6f10bf55f4571e65c8 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 13 Apr 2023 17:35:15 -0400 Subject: [PATCH 56/81] update to style.css --- static/css/style.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/css/style.css b/static/css/style.css index 21c13cfa..bd45a362 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -83,8 +83,8 @@ bottom: 0; left: 0; right: 0; - height: 95%; - width: 95%; + height: 100%; + width: 100%; opacity: 0; transition: .5s ease; background-color: #09b6f0; From 3f3a40f127333252e84c301efb1e890819379de8 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 13 Apr 2023 17:55:58 -0400 Subject: [PATCH 57/81] update style.css --- static/css/style.css | 4 ++-- templates/index.html | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/static/css/style.css b/static/css/style.css index bd45a362..aeb65889 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -47,7 +47,7 @@ width: 302px; background-color: #cac2c2; border: 1px solid rgb(178, 178, 178); - height: 500px; + height: 302px; } .product_card-img { @@ -90,7 +90,7 @@ background-color: #09b6f0; } -.product_card-img:hover .overlay { +.product_card:hover .overlay { opacity: 1; } diff --git a/templates/index.html b/templates/index.html index e65edc97..469ff94b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -18,14 +18,14 @@

Products

{% for product in products %}
-
-
- ... -
-
{{ product.item_name }}
+
+ ... +
+
{{ product.item_name }}
+

{{ product.info }}

-

${{ product.price }}

+

${{ product.price }}

From 75e20ed6e56ca096b48e5e3dbed44b326ac79d18 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 13 Apr 2023 18:05:45 -0400 Subject: [PATCH 58/81] update to style.css hover --- static/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/css/style.css b/static/css/style.css index aeb65889..43906a90 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -67,7 +67,7 @@ .product_card-text { /* Centered */ - display: none; + display: block; position: absolute; text-align: center; font-size: 15px; From f438f32a68d187ebf6143b92ca933708f70bfe17 Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 13 Apr 2023 19:42:46 -0400 Subject: [PATCH 59/81] finalized images, description, and hover feature --- database/startingData.sql | 4 ++-- static/css/style.css | 12 ++++++++---- static/images/cuban_chain.jpeg | Bin 0 -> 23882 bytes static/images/diamond_earring.jpeg | Bin 0 -> 194465 bytes 4 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 static/images/cuban_chain.jpeg create mode 100644 static/images/diamond_earring.jpeg diff --git a/database/startingData.sql b/database/startingData.sql index 83755821..04a71563 100644 --- a/database/startingData.sql +++ b/database/startingData.sql @@ -14,10 +14,10 @@ INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `ca VALUES ('Diamond Ring', 'A luxurious ring with a sparkling diamond as the centerpiece.', 5000.00, 50, 'static/images/diamond_ring.jpeg', 'Jewelry'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) -VALUES ('Bananas', 'A long curved fruit which grows in clusters and has soft pulpy flesh and yellow skin when ripe.', 1.00, 100, 'static/images/banana.jpeg', 'Fruit'); +VALUES ('Cuban Link Chain', 'A stylish chain with tightly interlocking links, made of high-quality materials.', 10,000.00, 100, 'static/images/cuban_chain.jpeg', 'Fruit'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) -VALUES ('Mangos', 'The best fruit on the planet.', 4.00, 100, 'static/images/mango.jpeg', 'Fruit'); +VALUES ('Diamond Earring', 'Elegant earrings featuring dazzling diamonds that catch the light beautifully.', 3,000.00, 100, 'static/images/diamond_earring.jpeg', 'Fruit'); INSERT into `sales` (`transaction_id`, `username`, `item_id`, `quantity`, `sale_date`, `cost`) VALUES ('1', 'aturing', '1', 10, '2022-12-21 7:30:30', 5.50); diff --git a/static/css/style.css b/static/css/style.css index 43906a90..57550b35 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -67,14 +67,18 @@ .product_card-text { /* Centered */ + color: white; display: block; position: absolute; text-align: center; - font-size: 15px; - margin-top: 10px; - margin-bottom: 10px; - font-style: italic; + font-style: oblique; + font-size: large; height: 60px; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); } .overlay { diff --git a/static/images/cuban_chain.jpeg b/static/images/cuban_chain.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0764212f963f388c986dac0cee86592a11cc9de8 GIT binary patch literal 23882 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 literal 0 HcmV?d00001 diff --git a/static/images/diamond_earring.jpeg b/static/images/diamond_earring.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3b95f75155c7612b6ef69fbd50f866a1b3655e3f GIT binary patch literal 194465 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 literal 0 HcmV?d00001 From b6549396320156f06e8236e0f0a337881c4c865f Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Thu, 13 Apr 2023 20:08:44 -0400 Subject: [PATCH 60/81] final version of hover feature --- database/startingData.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/startingData.sql b/database/startingData.sql index 04a71563..14eb1fc0 100644 --- a/database/startingData.sql +++ b/database/startingData.sql @@ -14,10 +14,10 @@ INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `ca VALUES ('Diamond Ring', 'A luxurious ring with a sparkling diamond as the centerpiece.', 5000.00, 50, 'static/images/diamond_ring.jpeg', 'Jewelry'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) -VALUES ('Cuban Link Chain', 'A stylish chain with tightly interlocking links, made of high-quality materials.', 10,000.00, 100, 'static/images/cuban_chain.jpeg', 'Fruit'); +VALUES ('Cuban Link Chain', 'A stylish chain with tightly interlocking links, made of high-quality materials.', 10000.00, 100, 'static/images/cuban_chain.jpeg', 'Jewelry'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) -VALUES ('Diamond Earring', 'Elegant earrings featuring dazzling diamonds that catch the light beautifully.', 3,000.00, 100, 'static/images/diamond_earring.jpeg', 'Fruit'); +VALUES ('Diamond Earring', 'Elegant earrings featuring dazzling diamonds that catch the light beautifully.', 3000.00, 100, 'static/images/diamond_earring.jpeg', 'Jewelry'); INSERT into `sales` (`transaction_id`, `username`, `item_id`, `quantity`, `sale_date`, `cost`) VALUES ('1', 'aturing', '1', 10, '2022-12-21 7:30:30', 5.50); From f871f323f85c3c95dd13522ab919acb8a3c3af88 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Thu, 13 Apr 2023 20:43:02 -0400 Subject: [PATCH 61/81] Navigation bar implementation implementing the navigation bar for the website for better accessibility. --- implementation.md | 23 +++++++++++++++++ static/css/style.css | 57 +++++++++++++++++++++++++++++++++++++++++ static/images/logo.png | Bin 0 -> 41263 bytes templates/layout.html | 24 +++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 implementation.md create mode 100644 static/images/logo.png diff --git a/implementation.md b/implementation.md new file mode 100644 index 00000000..2e615a8e --- /dev/null +++ b/implementation.md @@ -0,0 +1,23 @@ +# Project 3: Implementation + +## Introduction + +The exciting part of the project has finally come. It is now time to implement the features you planned in the previous phase. In all likelihood, this will require a massive amount of work. That's why it is important to begin by planning the smaller changes you can make, divide these among your group, and work together to implement them. This process is repetitive, taking on larger and larger tasks as you go. The tasks listed below are not necessarily meant to be performed in sequence. They are, instead, a list of what we will be looking for when evaluating your implementation. Beyond just functionality, your project's code should be readable and well documented. + +## Task 1: Code Style Guides + +- Python files should be written in `lower_snake_case.py` format. +- Global variables and constants should be written in `UPPER_SNAKE_CASE`. +- Class names should be written in `UpperCamelCase`. +- Method and local variable names should be written in `lower_snake_case`. + +## Task 2: Documentation Guides + +- All classes, methods, and functions should be documented using the docstring format shown throughout the template codebase. +- After implementing a feature, be sure to update the relevant `plantuml` and `png` files in all respective subdirectories. +- Commit messages should be written to be descriptive of the changes made and the feature implemented. When writing code for a specific requirement from the `SRS.md`, you should use the requirement's ID in your commit message. + +## Submission Details + +- On Canvas, submit the following: + - the URL to your group's repository diff --git a/static/css/style.css b/static/css/style.css index c5aeb0ea..d63527ba 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,3 +1,60 @@ +.navigation_bar +{ + background-color:aliceblue; +} + +#nav_links +{ + overflow: hidden; + font-size:x-large; + padding: 0; + margin: 0; + list-style-type: none; +} + +#nav_links li +{ + float: left; + color:#00caf8; + display: block; + margin-top: 10px; + margin-left: 10px; + margin-right: 10px; + transition-duration: 0.5s; + +} + +#nav_links a +{ + text-decoration: none; +} + + +#nav_links li:hover +{ + cursor: pointer; +} + +#nav_links li ul +{ + visibility: hidden; + display: none; + opacity: 0; +} + +#nav_links li ul li +{ + clear:both; +} + + +#nav_links li:hover > ul, #nav_links li ul:hover +{ + visibility: visible; + opacity: 1; + display:block; +} + #index_buttons { padding-top: 15px; margin: 0 auto; diff --git a/static/images/logo.png b/static/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5c55688bbd18d05c4d77529d366427b4e7d5550a GIT binary patch literal 41263 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 literal 0 HcmV?d00001 diff --git a/templates/layout.html b/templates/layout.html index f38efaec..70b9b017 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -10,6 +10,30 @@ +
From bb142f72ffa98c55a0d32939f9f51cb556b9e17a Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Thu, 13 Apr 2023 20:46:56 -0400 Subject: [PATCH 62/81] Update style.css --- static/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/css/style.css b/static/css/style.css index d63527ba..8cc0ac9b 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -15,7 +15,7 @@ #nav_links li { float: left; - color:#00caf8; + color:#0e0f0f; display: block; margin-top: 10px; margin-left: 10px; From da54b2d35b59c9143a9dd13b6d17f3a7a4bedbbe Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 13 Apr 2023 21:21:10 -0400 Subject: [PATCH 63/81] temp --- diagrams.md | 138 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 4 +- 2 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 diagrams.md diff --git a/diagrams.md b/diagrams.md new file mode 100644 index 00000000..9a88c55e --- /dev/null +++ b/diagrams.md @@ -0,0 +1,138 @@ +# Project 2: Design + +## Introduction + +In this phase, you will be mapping out your project and creating easily understandable diagrams that will help you and your team know your codebase inside and out. This also makes it much easier to communicate the flow of your application to less technical audiences or anyone who is new to your project. We will be using `pyreverse` and `plantuml` to help us create, update, and visualize our diagrams. + +This activity will require you to generate Class, Package, Use Case, and Sequence diagrams for your project. If you are unfamiliar with these diagrams, you can find an in-depth explanation of each diagram type [here](https://www.uml-diagrams.org/) or reference [this article](https://nulab.com/learn/software-development/uml-diagrams-guide/). + +## Task 1: Installations + +- Use `pip` to install the following packages: + - `pylint==2.17.1` + - `plantuml==0.3.0` +- Add both of these packages to your `requirements.txt` file, including the version numbers. Follow the format of the `flask` package in the file. +- Install `Graphviz` on your machine. You can find download instructions for your operating system [here](https://graphviz.org/download/). + +## Task 2: Initial Structure Diagrams + +- Each group member will create diagrams for at least one of the following subdirectories/files of your project: + - `authentication`: requires a package diagram + - `core`: requires both a package diagram and a class diagram + - `database`: requires both a package diagram and a class diagram + - `testing`: requires a package diagram + +All of the above diagrams must be generated, so split this work evenly and push and pull code often. To generate a class diagram for a subdirectory or file, you must first generate the `plantuml` files using `pyreverse`. Then, you must use `plantuml` to generate the diagram from the `plantuml` file. Here's an example of how to do this for the package diagram in the `testing` subdirectory. + +```bash +pyreverse --output puml --colorized -A --output-directory testing testing # generates testing/package.puml +python3.10 -m plantuml testing/package.puml # generates testing/package.png +``` + +Since `testing` has no classes, we do not need a class diagram, but if we did, we would change the `testing/package.puml` to `testing/classes.puml` in the last command. + +- Delete the `.puml` files that do not have a corresponding `.png` file. For example, since `testing` has no classes, we would delete `testing/classes.puml`. +- For each subdirectory, create copies of the `.puml` and `.png` files with naming schemes that include `_initial` in the name. + - For example, `testing/package.puml` would have a copy called `testing/package_initial.puml` and `testing/package.png` would have a copy called `testing/package_initial.png`. + +## Task 3: Update Structure Diagrams + +- Begin planning the implentations necessary to fulfill requirements listed in your `SRS.md` file. +- Go to the corresponding subdirectory, and update the `.puml` file to reflect the changes you have planned. + - For example, by implementing a method called `delete_cart` in the `UserSession` class from `core`, my `core/classes.puml` file would look like the one shown below because I added a line to the `UserSession` class that says `delete_cart(id: str) -> None`. + - [PlantUML class diagram documentation](https://plantuml.com/class-diagram) +- Be sure to regenerate the `.png` file for each subdirectory after you update the corresponding `.puml` file. + +```plantuml +@startuml classes +set namespaceSeparator none +class "Sessions" as store.core.session.Sessions #aliceblue { + sessions : dict + add_new_session(username: str, db: Database) -> None + get_all_sessions() -> dict + get_session(username: str) -> UserSession + remove_session(username: str) -> None +} +class "UserSession" as store.core.session.UserSession #aliceblue { + cart : dict + date : datetime, NoneType + db + total_cost : int + username : str + add_new_item(id: str, name: str, price: int, quantity: int, discount: float, tax_rate: float) -> None + empty_cart() -> dict + is_item_in_cart(id: str) -> bool + remove_item(id: str) -> None + delete_cart(id: str) -> None + submit_cart() -> None + update_item_quantity(id: str, change_to_quantity: int) -> None + update_total_cost() -> None +} +@enduml +``` + +## Task 4: Use Case Diagrams + +- Create a `diagrams` subdirectory from the project root directory, and navigate to it. +- Create a `cases` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each user type (actor) mentioned in your `SRS.md` file, create an appropriately named `.puml` file showcasing the use cases for that actor. + - For example, if I had an actor called `Customer`, I might create a file called `customer.puml` that looks like the template below. + - [PlantUML use case diagram documentation](https://plantuml.com/use-case-diagram) +- Generate a `.png` file from the `.puml` file. + - Remember, this will look something like: `python3.10 -m plantuml customer.puml` + +```plantuml +@startuml customer +left to right direction +actor Customer +rectangle "System" as system { + (Login) + (Register) + (View Cart) + (View Items) + (View Orders) + (View Profile) + (Logout) +} +Customer --> (Login) +Customer --> (Register) +Customer --> (View Cart) +Customer --> (View Items) +Customer --> (View Orders) +Customer --> (View Profile) +Customer --> (Logout) +@enduml +``` + +## Task 5: Sequence Diagrams + +- Create a `sequences` subdirectory from the `diagrams` subdirectory and navigate to it. +- For each of the use cases shown in your use case diagrams, create an appropriately named `.puml` file showcasing the sequence of events for that use case and generate its corresponding `.png` file. + - For example, if I had a use case called `Login`, I might create a file called `login.puml` that looks like the template below. + - [PlantUML sequence diagram documentation](https://plantuml.com/sequence-diagram) + +```plantuml +@startuml login +actor Customer +boundary "System" as system +control "Sessions" as sessions +control "Authentication" as auth +Customer -> system: Login +activate system +system -> auth: login_pipeline(username, password) +activate auth +auth --> system: True +deactivate auth +system -> sessions: add_new_session(username, db) +activate sessions +sessions --> system: None +deactivate sessions +system -> system: redirect to home page +deactivate system +@enduml +``` + +## Submission Details + +- On Canvas, submit the following: + - the URL to your group's repository \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c39f059d..63c9afdb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ -flask==2.2.2 \ No newline at end of file +flask==2.2.2 +pylint==2.17.1 +plantuml==0.3.0 \ No newline at end of file From 1bdd48651ac5d9b976ccd47b0568f851b0854921 Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Thu, 13 Apr 2023 21:55:38 -0400 Subject: [PATCH 64/81] IT --- SRS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SRS.md b/SRS.md index 4f838bc4..5e4bf550 100644 --- a/SRS.md +++ b/SRS.md @@ -1,5 +1,5 @@ # Software Requirements Specification Document -Version 2 +Version 3 This serves as a template for each projects' Software Requirements Specification (SRS) document. When filling this out, you will be required to create user stories, use cases, requirements, and a glossary of terms relevant to your project. Each group member must contribute to every section, so it is crucial that your group's GitHub repository shows a commit history that reflects the work of each group member. It is highly recommended that you create separate branches for each member, but since this is one single document, you will need to manually merge the branches together. It is also advisable to have multiple working versions of this document (named separately) so that one person can compile the final SRS document from the multiple working versions. Ultimately, how you go about managing this is up to you, but consistent formatting, clear commit messages, and a thorough commit history with contributions from each group member are required. Fill the document out following the guidelines listed in each section. Maintain [proper Markdown syntax](https://www.markdownguide.org/basic-syntax/) and be sure that your group has a `main` branch with this document and the entire [template repository codebase](https://github.com/david-gary/onlineStoreTemplate) either forked or downloaded and copied into your group's repository. If you have arranged to use a different codebase as a template, you do not need to have the original template included, but a `main` branch is still required. From 14532ee9f2932ace11b2dc7cf8d6ca4817711eaf Mon Sep 17 00:00:00 2001 From: sreyaskodukulla Date: Tue, 18 Apr 2023 16:28:52 -0400 Subject: [PATCH 65/81] FINAL HOVER IMPLEMENTATION --- database/startingData.sql | 2 +- testing.md | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 testing.md diff --git a/database/startingData.sql b/database/startingData.sql index 14eb1fc0..20c24a12 100644 --- a/database/startingData.sql +++ b/database/startingData.sql @@ -14,7 +14,7 @@ INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `ca VALUES ('Diamond Ring', 'A luxurious ring with a sparkling diamond as the centerpiece.', 5000.00, 50, 'static/images/diamond_ring.jpeg', 'Jewelry'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) -VALUES ('Cuban Link Chain', 'A stylish chain with tightly interlocking links, made of high-quality materials.', 10000.00, 100, 'static/images/cuban_chain.jpeg', 'Jewelry'); +VALUES ('Cuban Link Chain', 'A stylish chain with tightly interlocking links, made of high-quality materials.', 12000.00, 100, 'static/images/cuban_chain.jpeg', 'Jewelry'); INSERT into `inventory` (`item_name`, `info`, `price`, `stock`, `image_url`, `category`) VALUES ('Diamond Earring', 'Elegant earrings featuring dazzling diamonds that catch the light beautifully.', 3000.00, 100, 'static/images/diamond_earring.jpeg', 'Jewelry'); diff --git a/testing.md b/testing.md new file mode 100644 index 00000000..a6553a49 --- /dev/null +++ b/testing.md @@ -0,0 +1,14 @@ +# Project 4: Testing + +## Introduction/Description + +Now it is time to test the code you have added. Since there will be a variety of codebase structures across the entire class, the specific requirements for this stage are minimal. But you must, as a group, write tests for each of the implemented functions/features that you added in the previous phase. These tests should be integrated into the existing test suite from the template codebase. You should document these in either the `testing/README.md` file or with comments in the test files themselves. After this, another group member should review your tests and make sure they are correct and complete. Create a subdirectory called `reviews` inside the `testing` directory and document the review process there. Each group member should create their own file in this directory with their name as the filename. In this file, document which tests you reviewed, when you reviewed them, and any comments or concerns you have about them. + +## Continue Developing + +Everything in your codebase should be tested by the end of this project, but it is likely that the implementations you had hoped to finish by now still need some work. Test the features you can, and keep coding! This iterative, complicated process is a part of software development. Reach out to the TAs if you're struggling with implementations. + +## Submission Details + +- On Canvas, submit the following: + - the URL to your group's repository From 78682b58ebfb36d14df0c3d829a6797f172b04ae Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Tue, 18 Apr 2023 19:25:57 -0400 Subject: [PATCH 66/81] clearing --- app.py | 3 +++ templates/index.html | 3 ++- templates/indexItem.html | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 templates/indexItem.html diff --git a/app.py b/app.py index e4e4877d..052c645d 100644 --- a/app.py +++ b/app.py @@ -28,6 +28,9 @@ def index_page(): """ return render_template('index.html', username=username, products=products, sessions=sessions) +@app.route('/') +def index_page2(): + return render_template('indexItem.html') @app.route('/login') def login_page(): diff --git a/templates/index.html b/templates/index.html index 469ff94b..c1288b43 100644 --- a/templates/index.html +++ b/templates/index.html @@ -5,6 +5,7 @@
@@ -19,7 +20,7 @@

Products

{% for product in products %}
- ... + ...
{{ product.item_name }}
diff --git a/templates/indexItem.html b/templates/indexItem.html new file mode 100644 index 00000000..469ff94b --- /dev/null +++ b/templates/indexItem.html @@ -0,0 +1,38 @@ +{% extends "layout.html" %} + +{% block content %} +
+
+ Login + Register +
+
+ +
+
+

Products

+
+
+
+
+
+ {% for product in products %} +
+
+ ... +
+
{{ product.item_name }}
+
+

{{ product.info }}

+
+

${{ product.price }}

+
+
+
+ {% endfor %} +
+
+
+
+
+ {% endblock %} \ No newline at end of file From 8dfe2d547c2d10bb410c9ba38cbca44eeac8385c Mon Sep 17 00:00:00 2001 From: BlaiseThomasMac Date: Tue, 18 Apr 2023 19:45:35 -0400 Subject: [PATCH 67/81] syreas changes --- database/schema.sql | 3 +-- database/startingData.sql | 2 +- templates/index.html | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/database/schema.sql b/database/schema.sql index 0f874ee8..0bfe8be7 100644 --- a/database/schema.sql +++ b/database/schema.sql @@ -26,5 +26,4 @@ CREATE TABLE sales ( cost DECIMAL(10,2) NOT NULL, FOREIGN KEY (username) REFERENCES users(username), FOREIGN KEY (item_id) REFERENCES inventory(id) -); - +); \ No newline at end of file diff --git a/database/startingData.sql b/database/startingData.sql index 20c24a12..13361b9e 100644 --- a/database/startingData.sql +++ b/database/startingData.sql @@ -26,4 +26,4 @@ INSERT into `sales` (`transaction_id`, `username`, `item_id`, `quantity`, `sale_ VALUES ('2', 'dritchie', '2', 10, '2022-12-21 7:30:30', 5.50); INSERT into `sales` (`transaction_id`, `username`, `item_id`, `quantity`, `sale_date`, `cost`) -VALUES ('3', 'llamport', '3', 10, '2022-12-21 7:30:30', 5.50); +VALUES ('3', 'llamport', '3', 10, '2022-12-21 7:30:30', 5.50); \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index c1288b43..469ff94b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -5,7 +5,6 @@
@@ -20,7 +19,7 @@

Products

{% for product in products %}
- ... + ...
{{ product.item_name }}
From 0514f192a30fb3c8a271e7a0d40dce287890ddc0 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Mon, 24 Apr 2023 03:33:47 -0400 Subject: [PATCH 68/81] Modification of navigation bar and implementation of confirmation message for purchases --- authentication/passwords.txt | 3 ++- static/css/style.css | 12 +++++++++++- templates/home.html | 12 +++++++++++- templates/layout.html | 27 ++++++++------------------- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/authentication/passwords.txt b/authentication/passwords.txt index 3d93be76..ec89fd5f 100644 --- a/authentication/passwords.txt +++ b/authentication/passwords.txt @@ -1,4 +1,5 @@ aturing:0d911297a1e34f4fcce78537f9aaa66a:b93727798b520dc10d145b53909c061f082ff14cd5f8cb4ab24c3b71bfa57d7e12e1296029be74c06a0d91ba32756f9fc978047fbe7232be67f94dfc1de9ced9 dritchie:e11d3b1a66b1ad362223c30b78138519:67aff785bd17ac24448d491926ff7aadd8fa75e51a2f7a9bfc31889bad0adcd2989061a27ccd9eff9e5e31f2bc14b5c193727e116dc8dc48259acb3919171cd4 llamport:89d0e5fe8d06ec113839c8f319d7033e:9171d14954eeda4e70777c23d98e349818125cdaeb884ff97ebf8cc0a9c7778f54ce394256588148132a03ebea891e44077c659e6c0132fa87a8cf77e436ae11 -bliskov:e71dda285effa69e1c29ac810fe7a986:1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2 \ No newline at end of file +bliskov:e71dda285effa69e1c29ac810fe7a986:1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2 +Akan:cdbea3594cb758d16fdfaa71054a1b51:a84cddd7ec85d3c81c48f57dfc68059d1b7f7a8421d506ed4681edb75236b91477a9e7fd64b8e5263a5ff4a8a6d36cc926f7366448abf4ff698e6b2a98251128 \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css index 8cc0ac9b..6f0fae70 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,6 +1,6 @@ .navigation_bar { - background-color:aliceblue; + background-color:rgb(253, 254, 255); } #nav_links @@ -55,6 +55,16 @@ display:block; } +#logout_button{ + background-color: #ef0c0c; + border-color: #ccc; + color: rgb(236, 236, 236); + width: 100px; + font-weight: bold; + margin-top: 10px; + margin-bottom: 10px; +} + #index_buttons { padding-top: 15px; margin: 0 auto; diff --git a/templates/home.html b/templates/home.html index cc35f50a..25712d40 100644 --- a/templates/home.html +++ b/templates/home.html @@ -28,7 +28,7 @@
{{ product.item_name }}
- +
@@ -36,5 +36,15 @@
{{ product.item_name }}
+ {% endblock %} \ No newline at end of file diff --git a/templates/layout.html b/templates/layout.html index 70b9b017..51f960fc 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -12,25 +12,14 @@
From 999482c35e74aafa31262eaaee51d189c19a3d2a Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Tue, 25 Apr 2023 13:11:38 -0400 Subject: [PATCH 69/81] Changes --- authentication/passwords.txt | 5 ++++- core/classes.png | Bin 28678 -> 28678 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/authentication/passwords.txt b/authentication/passwords.txt index 01b749f9..76d5d819 100644 --- a/authentication/passwords.txt +++ b/authentication/passwords.txt @@ -2,4 +2,7 @@ aturing:0d911297a1e34f4fcce78537f9aaa66a:b93727798b520dc10d145b53909c061f082ff14 dritchie:e11d3b1a66b1ad362223c30b78138519:67aff785bd17ac24448d491926ff7aadd8fa75e51a2f7a9bfc31889bad0adcd2989061a27ccd9eff9e5e31f2bc14b5c193727e116dc8dc48259acb3919171cd4 llamport:89d0e5fe8d06ec113839c8f319d7033e:9171d14954eeda4e70777c23d98e349818125cdaeb884ff97ebf8cc0a9c7778f54ce394256588148132a03ebea891e44077c659e6c0132fa87a8cf77e436ae11 bliskov:e71dda285effa69e1c29ac810fe7a986:1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2 -:173c8ae295ab703115e87cb8e41c7d6a:3a042dda12ce7741413936f3cad966fce4d2540c873413949347f4a65feea73c0a20cac69b831b503faf8f4bf5cbee2f482ca629d6f69756e6f6575e7f5fed06 \ No newline at end of file +:173c8ae295ab703115e87cb8e41c7d6a:3a042dda12ce7741413936f3cad966fce4d2540c873413949347f4a65feea73c0a20cac69b831b503faf8f4bf5cbee2f482ca629d6f69756e6f6575e7f5fed06<<<<<<< Updated upstream +:173c8ae295ab703115e87cb8e41c7d6a:3a042dda12ce7741413936f3cad966fce4d2540c873413949347f4a65feea73c0a20cac69b831b503faf8f4bf5cbee2f482ca629d6f69756e6f6575e7f5fed06 +Me:61b0432099ad790969641113381238fc:7543a3024909a5196b382a6e2c3204ddeb42c6d5cfc502e39c7f84eba4c915568d3bb526d2dff6dff5178c1d0e549222393416d09bf7cfb3f49ce09a668e237c +>>>>>>> Stashed changes diff --git a/core/classes.png b/core/classes.png index e12b8388b64f4f637cc77e869873e9379a073a90..374121bf65b3b258f20afa526be8eab77cba68d1 100644 GIT binary patch delta 492 zcmV%Bj?uF3ROX05V@Iw>K_&HQk&OjyG-X1eb8uFYbJA#c2IxQ-OKW#R z)?)=;ppt?b=|-X-@|qN6E9{e^t+le+w7E)k$=VOz{;y zEIV4JBfDcCm9-5_lEa$~qpF2*abD^;K9YpQa%Q4r>T=l*-py?6Z6K4zm+;f0X359l z*-9sj*IdB8G8h1V#$R>Fng(F*I(0oC>!{_4-_oVawbZBDz#z3W#;D2WIl=j2=bKLQ zZ1aHoK6-T8KJuOfitniRRI{m{XnJPBWMV!K^^$ZO|Ml!vh52f`fdknT->dcc%k$Uk zi-s8A=9T`T&4UhUcfC{uF|G&@3spl zuSXEB^+8&rI|_l`+-*-y@WpW18&1s^Z&n{9LrFGpg1c>YMfd0xhf!f#srLm`yHBfk i*(R9aaUTwm&OXK{ZSbKgvp@AwNd50nS6;JG0<~?GU`fNpXQZG<0DDvSO z@oe*ehc0<^+CK801j_Gd_EfR0o@shv!DM1K5A}*nlm2yar{jFN-N1odAK&@<;`POw z^<_1al z;${Tl#vGKhrllC@?fv%D1Yax{o#npy^6lz_VkpQ(PH?{!*Ytova~zenQD&b*x%;$w iCpOW9fctoejQE(MbkT>h5Kr=PNcp=6xMQ Date: Tue, 25 Apr 2023 13:11:41 -0400 Subject: [PATCH 70/81] Changes --- authentication/passwords.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/authentication/passwords.txt b/authentication/passwords.txt index 76d5d819..b4c969b1 100644 --- a/authentication/passwords.txt +++ b/authentication/passwords.txt @@ -2,7 +2,8 @@ aturing:0d911297a1e34f4fcce78537f9aaa66a:b93727798b520dc10d145b53909c061f082ff14 dritchie:e11d3b1a66b1ad362223c30b78138519:67aff785bd17ac24448d491926ff7aadd8fa75e51a2f7a9bfc31889bad0adcd2989061a27ccd9eff9e5e31f2bc14b5c193727e116dc8dc48259acb3919171cd4 llamport:89d0e5fe8d06ec113839c8f319d7033e:9171d14954eeda4e70777c23d98e349818125cdaeb884ff97ebf8cc0a9c7778f54ce394256588148132a03ebea891e44077c659e6c0132fa87a8cf77e436ae11 bliskov:e71dda285effa69e1c29ac810fe7a986:1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2 -:173c8ae295ab703115e87cb8e41c7d6a:3a042dda12ce7741413936f3cad966fce4d2540c873413949347f4a65feea73c0a20cac69b831b503faf8f4bf5cbee2f482ca629d6f69756e6f6575e7f5fed06<<<<<<< Updated upstream +<<<<<<< Updated upstream :173c8ae295ab703115e87cb8e41c7d6a:3a042dda12ce7741413936f3cad966fce4d2540c873413949347f4a65feea73c0a20cac69b831b503faf8f4bf5cbee2f482ca629d6f69756e6f6575e7f5fed06 +======= Me:61b0432099ad790969641113381238fc:7543a3024909a5196b382a6e2c3204ddeb42c6d5cfc502e39c7f84eba4c915568d3bb526d2dff6dff5178c1d0e549222393416d09bf7cfb3f49ce09a668e237c >>>>>>> Stashed changes From c2bdaf47d86fba014bee096a44904bb1c50adf5e Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Tue, 25 Apr 2023 19:17:31 -0400 Subject: [PATCH 71/81] Updates --- static/css/style.css | 4 +++- templates/home.html | 8 ++++++-- templates/layout.html | 8 ++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/static/css/style.css b/static/css/style.css index 0f0a2a72..862db09d 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -62,7 +62,9 @@ width: 100px; font-weight: bold; margin-top: 10px; - margin-bottom: 10px; + margin-top: 1rem; + margin-bottom: 2rem; + margin-left: 37rem; } #index_buttons { diff --git a/templates/home.html b/templates/home.html index 359615f6..4347ccf7 100644 --- a/templates/home.html +++ b/templates/home.html @@ -2,6 +2,10 @@ {% block content %} + +Logout + +

Products

@@ -21,7 +25,7 @@
{{ product.item_name }}

${{ product.price }}

+ placeholder="0" min="0">
@@ -31,7 +35,7 @@
{{ product.item_name }}
-
+
diff --git a/templates/layout.html b/templates/layout.html index 51f960fc..13125419 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -12,15 +12,15 @@
From 8cb17e2d20cc8ed912417b43008a13a156586dd6 Mon Sep 17 00:00:00 2001 From: Akanimoh Joseph Umoren Date: Wed, 26 Apr 2023 03:06:32 -0400 Subject: [PATCH 72/81] Validations A few extra validations to avoid logical errors --- static/css/style.css | 3 ++- templates/home.html | 20 +++++++++++++++----- templates/layout.html | 7 +++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/static/css/style.css b/static/css/style.css index 6f0fae70..91c02c3d 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -62,7 +62,8 @@ width: 100px; font-weight: bold; margin-top: 10px; - margin-bottom: 10px; + margin-bottom: 5rem; + margin-left:35rem; } #index_buttons { diff --git a/templates/home.html b/templates/home.html index 25712d40..cd82a213 100644 --- a/templates/home.html +++ b/templates/home.html @@ -1,13 +1,13 @@ {% extends "layout.html" %} {% block content %} - +Logout

Products


-
+
{% for product in products %} @@ -19,7 +19,7 @@
{{ product.item_name }}

{{ product.info }}

${{ product.price }}

+ placeholder="0" min="0">
@@ -38,13 +38,23 @@
{{ product.item_name }}
{% endblock %} \ No newline at end of file diff --git a/templates/layout.html b/templates/layout.html index 51f960fc..08e874a1 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -12,15 +12,14 @@
From d53a02edabe213ae069f2fa5b7ff33241131f8ad Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 26 Apr 2023 15:30:01 -0400 Subject: [PATCH 73/81] Final Updates --- authentication/passwords.txt | 2 ++ static/css/style.css | 15 ++++++++++++--- templates/home.html | 25 +++++++++++++++++++------ 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/authentication/passwords.txt b/authentication/passwords.txt index 551e4ba5..672e5a3e 100644 --- a/authentication/passwords.txt +++ b/authentication/passwords.txt @@ -2,3 +2,5 @@ aturing:0d911297a1e34f4fcce78537f9aaa66a:b93727798b520dc10d145b53909c061f082ff14 dritchie:e11d3b1a66b1ad362223c30b78138519:67aff785bd17ac24448d491926ff7aadd8fa75e51a2f7a9bfc31889bad0adcd2989061a27ccd9eff9e5e31f2bc14b5c193727e116dc8dc48259acb3919171cd4 llamport:89d0e5fe8d06ec113839c8f319d7033e:9171d14954eeda4e70777c23d98e349818125cdaeb884ff97ebf8cc0a9c7778f54ce394256588148132a03ebea891e44077c659e6c0132fa87a8cf77e436ae11 bliskov:e71dda285effa69e1c29ac810fe7a986:1e4b9ae956cad1385cfa6fffd8323dd16c3fe18c54e6447e49bddef2138d042e84e1505a541c6ef19a5026e684b2559efd366145870a0a8d4d4173c0877f6cd2 + +Kiwi:f65a78d14f405f820a0cd4a1c250b42c:7caa8eb94a03c88251da64e1a18dd2baa1124daa80fdbd7499d246e6b68face2973ffa29570f0b9a35c85fcb6be9c9ed19bec9cbc4a6f94e466f5abc216d9ad2 \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css index 862db09d..2648be0c 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -212,9 +212,18 @@ color: rgb(32, 30, 30); width: 220px; font-weight: bold; - margin-top: 10px; - margin-bottom: 10px; + margin-top: 5rem; /* centered on the page */ text-align: center; + margin-left: 1rem; + +} -} \ No newline at end of file +.row { + margin-top: 2rem; + margin-bottom: 2rem; +} + +.quantity { + margin-left: 4rem; +} diff --git a/templates/home.html b/templates/home.html index 4347ccf7..b7225eff 100644 --- a/templates/home.html +++ b/templates/home.html @@ -11,7 +11,7 @@

Products


- +
{% for product in products %} @@ -44,11 +44,24 @@
{{ product.item_name }}
From 6ee7777b7f368c4d2deccd76c98633aa5c08792c Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 26 Apr 2023 15:49:40 -0400 Subject: [PATCH 74/81] Update layout.html --- templates/layout.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/layout.html b/templates/layout.html index 08e874a1..9519020b 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -3,7 +3,7 @@ - Private Online Store + The Jewel Box @@ -25,7 +25,7 @@
-

Private Online Store

+

The Jewel Box


From 3d19d6146e2d91365cb745a9f8510fd341ab6857 Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 26 Apr 2023 15:55:00 -0400 Subject: [PATCH 75/81] Update checkout.html --- templates/checkout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/checkout.html b/templates/checkout.html index 2096fb98..835a8c60 100644 --- a/templates/checkout.html +++ b/templates/checkout.html @@ -7,7 +7,7 @@

Your Order


-

{{ total_cost }}

+

${{ total_cost }}

From 479414a0db073261eb60a53e1dc81cc635260deb Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 26 Apr 2023 16:20:32 -0400 Subject: [PATCH 76/81] Update home.html --- templates/home.html | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/templates/home.html b/templates/home.html index e863a325..3be27246 100644 --- a/templates/home.html +++ b/templates/home.html @@ -40,24 +40,25 @@
{{ product.item_name }}
From da634b221e2a6ca1156e6673e59f741698cb98cb Mon Sep 17 00:00:00 2001 From: MercereBaker Date: Wed, 26 Apr 2023 17:10:39 -0400 Subject: [PATCH 77/81] Update home.html --- templates/home.html | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/templates/home.html b/templates/home.html index 3be27246..4a12df2e 100644 --- a/templates/home.html +++ b/templates/home.html @@ -8,7 +8,7 @@

Products


- +
{% for product in products %} @@ -40,23 +40,20 @@
{{ product.item_name }}
+ +