Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reviewed Part4 of Documentation #50

Merged
merged 1 commit into from
Mar 10, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 23 additions & 11 deletions docs/src/04_solution_strategy.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -36,32 +36,44 @@ See https://docs.arc42.org/section-4/[Solution Strategy] in the arc42 documentat
- *React* : React will simplify the task build reusable and modular UI elements for our application thanks to its component-based structure. It'll also allow mobile app development with React Native.
- *Express* : Web application framework for Node.js which will simplify development on the server side. There is also available a wide range of third-party middlewares that we could include on our application.
- *TypeScript* : Since we will be using JavaScript and are more familiar with statically typed languages we will use TypeScript. This will also reduce the likelihood of some unexpected error at runtime.
- *MongoDB* : We chose MongoDB since we consider we could take advantage of it's flexible schema. Its native support for JSON and its simple query language also influennced our decision. We also consider this a valauable oportunity to learn and work with a document database.
- *And more...*
- *MongoDB* : We chose MongoDB since we consider we could take advantage of it's flexible schema. Its native support for JSON and its simple query language also influenced our decision. We also consider this a valauable oportunity to learn and work with a document database.
- *Docker*: To deploy our project, Docker was chosen due to its handy portability and its perfect integration with microservices applications.


=== Decomposition of the System

We chose to use microservices as they allow specific functionality for each service.
This approach gives more flexibility and modularity in development, allowing us to focus on specific functionalities on our own.

Microservices also make it easier to manage and expand, as we can update or extend specific services without affecting the entire system.
==== Arquitectural patterns
- *Microservices*:
As the main architecture for the whole project. The system is divided into several modules representing
a functional requirement like question generation. Each of these modules will be independent from
each other and have its own database.

- *Gateway*:
A middleware that acts as an API-frontend for clients to access various services within our system.
This component can be also seen as a "Controller" since it receives petitions from outside, call the
corresponding service that answers that petition and return its value.


=== Decisions to Achieve Quality Goals

|===
| Quality goal | Scenario | Approach

| Security | Ensuring secure methods of authentication, such as login credentials (username and password), to protect user accounts from unauthorized access. | Implementation of secure authentication mechanisms, such as OAuth or JWT, encryption for data in transit using HTTPS, and at rest using encryption algorithms.
| Performance | Web-app should work smoothly and respond quickly. |
| Security
| Ensuring secure methods of authentication, such as login credentials (username and password), to protect user accounts from unauthorized access.
| Implementation of secure authentication mechanisms, such as OAuth or JWT, encryption for data in transit using HTTPS, and at rest using encryption algorithms.

| Performance
| Web-app should work smoothly and respond quickly.
|
- Implementing caching mechanisms

- Optimizing database queries through indexing and query optimization techniques.
| Usability | The application aims for user-friendly accessibility with an intuitive design. |
// TBD
| Responsive Design | Seamless user experience across different devices and screen sizes. | Implementing responsive design principles with a combination of CSS frameworks (e.g., Bootstrap or Tailwind CSS) and React components, ensuring dynamic and interactive UI elements within our React-based interface.

| Usability
| The application aims for user-friendly accessibility with an intuitive design.
| Different web tools can be used to test accesibility and responsive design such as
https://chromewebstore.google.com/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk?hl=es&pli=1[Google LightHouse], https://webaim.org/resources/contrastchecker/[Contrast Checker] or https://wave.webaim.org/[Wave].
|===


Expand Down