From 102c10e4e773dbf8af5a9b84735d7a9cb71c1559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:53:32 +0100 Subject: [PATCH 01/45] Inicio 06_runtime_view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Comienzo del apartado 6 de la documentación --- docs/src/06_runtime_view.adoc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index e10f375b..dd713aaf 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -2,9 +2,16 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-runtime-view]] == Runtime View +=== Login +For the login, the app shows the login view, which asks the user for his username and his password. -[role="arc42help"] +Then, the app does a login request to the REST API server, which redirect the user to the identity provider, which handles the authentication. + +If the login is succesfully, ... +In case the login isn't succesfully, a warning message is shown. + +== ESTRUCTURA **** .Contents The runtime view describes concrete behavior and interactions of the system’s building blocks in form of scenarios from the following areas: From deab241d1838428ac122c597aca96303bf2da8de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Molt=C3=B3?= <144908056+UO287747@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:56:59 +0100 Subject: [PATCH 02/45] =?UTF-8?q?Primera=20versi=C3=B3n=20doc=2004?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/04_solution_strategy.adoc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 7bf03f7a..c159e13f 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -1,16 +1,24 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-solution-strategy]] -== Solution Strategy +# Solution Strategy [role="arc42help"] -**** -.Contents -A short summary and explanation of the fundamental decisions and solution strategies, that shape system architecture. It includes -* technology decisions -* decisions about the top-level decomposition of the system, e.g. usage of an architectural pattern or design pattern +## Contents +A short summary and explanation of the fundamental decisions and solution strategies, that shape system architecture. + +### Technology decisions +* *JavaScript / React*: Librería de JS diseñada para facilitar el desarrollo de aplicaciones web. +* *JavaScript / NodeJS*: Entorno runtime asíncrono basado en JS. +* *MongoDB*: Sistema de bases de datos NoSQL orientado a Documentos. +* *Docker*: Usado para el despliegue de aplicaciones. + +### Top-Level Decisions +#### Architectural pattern +A nivel arquitectónico, en este proyecto se usa el patrón MVC (Modelo, Vista, Controlador) + * decisions on how to achieve key quality goals * relevant organizational decisions, e.g. selecting a development process or delegating certain tasks to third parties. From 83a3a0bd4e3effb4e66ceeb3e25f711848a48ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Molt=C3=B3?= <144908056+UO287747@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:57:59 +0100 Subject: [PATCH 03/45] Update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 87 ++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 22 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index c159e13f..07f48b44 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -3,38 +3,81 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-solution-strategy]] # Solution Strategy - [role="arc42help"] ## Contents -A short summary and explanation of the fundamental decisions and solution strategies, that shape system architecture. +This page contains a short summary and explanation of the fundamental decisions and solution strategies, that shape system architecture. + +--- + +### Technology Decisions +Below, all the technologies to be used in the development of the application are listed: + +JavaScript / React: A JavaScript library designed to facilitate the development of web applications. +JavaScript / NodeJS: An asynchronous runtime environment based on JavaScript. +MongoDB: A document-oriented NoSQL database system. +Docker: Used for deploying applications locally. +Azure: Used for deploying applications on a server. +Top-Level Decisions +In this section, a summarized list of all decisions regarding the architecture of the application is included. + +|=== + +| Architectural Pattern | In this project, the pattern based on the Client-Server model is used. +| Frontend (Client) | React: Building the user interface +| Backend (Server) | NodeJS: Building the server on the backend +| | Mongoose: Interaction with the database +| Database | MongoDB: NoSQL database storing data in BSON format +| Deployment | Azure cloud services + +|=== + +--- + +### Quality Goals +Next, several quality goals are established, along with the decisions made to achieve them. + +|=== +| Quality Goal | Decisions + +| Usability +| Creation of a responsive interface adaptable to all types of screens. + +| Accessibility +| Compliance with accessibility standards to ensure a usable application. + +| Maintainability +| A structured project that facilitates the maintainability of the application. + +| Testing +| Assurance of a fully functional and error-free application. + +|=== -### Technology decisions -* *JavaScript / React*: Librería de JS diseñada para facilitar el desarrollo de aplicaciones web. -* *JavaScript / NodeJS*: Entorno runtime asíncrono basado en JS. -* *MongoDB*: Sistema de bases de datos NoSQL orientado a Documentos. -* *Docker*: Usado para el despliegue de aplicaciones. +--- -### Top-Level Decisions -#### Architectural pattern -A nivel arquitectónico, en este proyecto se usa el patrón MVC (Modelo, Vista, Controlador) +### Relevant Organizational +Regarding the organization of the team, we have decided to use agile methodologies for better and faster group work. In this project, we will follow the best practices of the SCRUM framework. -* decisions on how to achieve key quality goals -* relevant organizational decisions, e.g. selecting a development process or delegating certain tasks to third parties. +Practices to be followed: -.Motivation -These decisions form the cornerstones for your architecture. They are the foundation for many other detailed decisions or implementation rules. +* Division of the project into tasks. +* Equitable assignment of tasks. +* Frequent meetings on the progress of the application. +* Construction of "Alpha" versions before the final release. -.Form -Keep the explanations of such key decisions short. +Additionally, "Issues" and the GitHub-provided Kanban (ToDo - In Progress - Done) are used for communication. -Motivate what was decided and why it was decided that way, -based upon problem statement, quality goals and key constraints. -Refer to details in the following sections. +--- +### Motivation +This section addresses the fundamental decisions for the project's architecture. -.Further Information +|=== -See https://docs.arc42.org/section-4/[Solution Strategy] in the arc42 documentation. +| Data Management | +| Deployment | +| Security | +| Monitoring | -**** +|=== From 517128a5a909c9aa09146fcb94612ab5ef0570f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Molt=C3=B3?= <144908056+UO287747@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:24:19 +0100 Subject: [PATCH 04/45] Update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 43 ++++++++++++++++-------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 07f48b44..3f49f7ae 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -13,22 +13,25 @@ This page contains a short summary and explanation of the fundamental decisions ### Technology Decisions Below, all the technologies to be used in the development of the application are listed: -JavaScript / React: A JavaScript library designed to facilitate the development of web applications. -JavaScript / NodeJS: An asynchronous runtime environment based on JavaScript. -MongoDB: A document-oriented NoSQL database system. -Docker: Used for deploying applications locally. -Azure: Used for deploying applications on a server. -Top-Level Decisions +* *JavaScript / React:* A JavaScript library designed to facilitate the development of web applications. +* *JavaScript / NodeJS:* An asynchronous runtime environment based on JavaScript. +* *MongoDB:* A document-oriented NoSQL database system. +* *Docker:* Used for deploying applications locally. +* *Azure:* Used for deploying applications on a server. + +--- + +### Top-Level Decisions In this section, a summarized list of all decisions regarding the architecture of the application is included. |=== -| Architectural Pattern | In this project, the pattern based on the Client-Server model is used. -| Frontend (Client) | React: Building the user interface -| Backend (Server) | NodeJS: Building the server on the backend +| *Architectural Pattern* | In this project, the pattern based on the Microservices model is used. +| *Frontend (Client)* | React: Building the user interface +| *Backend (Server)* | NodeJS: Building the server on the backend | | Mongoose: Interaction with the database -| Database | MongoDB: NoSQL database storing data in BSON format -| Deployment | Azure cloud services +| *Database* | MongoDB: NoSQL database storing data in BSON format +| *Deployment* | Azure cloud services |=== @@ -38,7 +41,7 @@ In this section, a summarized list of all decisions regarding the architecture o Next, several quality goals are established, along with the decisions made to achieve them. |=== -| Quality Goal | Decisions +| *Quality Goal* | *Decisions* | Usability | Creation of a responsive interface adaptable to all types of screens. @@ -61,10 +64,10 @@ Regarding the organization of the team, we have decided to use agile methodologi Practices to be followed: -* Division of the project into tasks. -* Equitable assignment of tasks. -* Frequent meetings on the progress of the application. -* Construction of "Alpha" versions before the final release. +* Division of the project into *tasks*. +* Equitable *assignment* of tasks. +* Frequent *meetings* on the progress of the application. +* Construction of *"Alpha"* versions before the final release. Additionally, "Issues" and the GitHub-provided Kanban (ToDo - In Progress - Done) are used for communication. @@ -75,9 +78,9 @@ This section addresses the fundamental decisions for the project's architecture. |=== -| Data Management | -| Deployment | -| Security | -| Monitoring | +| *Data Management* | +| *Deployment* | +| *Security* | +| *Monitoring* | |=== From 5f68065f7c04ba1613c89a99573282f9c0ae748d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Molt=C3=B3?= <144908056+UO287747@users.noreply.github.com> Date: Wed, 7 Feb 2024 20:19:28 +0100 Subject: [PATCH 05/45] Scope and Context doc first version --- docs/src/03_system_scope_and_context.adoc | 104 +++++++++++++--------- 1 file changed, 60 insertions(+), 44 deletions(-) diff --git a/docs/src/03_system_scope_and_context.adoc b/docs/src/03_system_scope_and_context.adoc index c528e907..1902c376 100644 --- a/docs/src/03_system_scope_and_context.adoc +++ b/docs/src/03_system_scope_and_context.adoc @@ -1,75 +1,91 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-system-scope-and-context]] -== System Scope and Context +# System Scope and Context [role="arc42help"] -**** -.Contents -System scope and context - as the name suggests - delimits your system (i.e. your scope) from all its communication partners -(neighboring systems and users, i.e. the context of your system). It thereby specifies the external interfaces. -If necessary, differentiate the business context (domain specific inputs and outputs) from the technical context (channels, protocols, hardware). +--- -.Motivation -The domain interfaces and technical interfaces to communication partners are among your system's most critical aspects. Make sure that you completely understand them. +## Contents +### Scope and context -.Form -Various options: +This project aims to develop a quiz game. +The main constraints are developing the game as a web app and using Wikidata to obtain the questions and answers. -* Context diagrams -* Lists of communication partners and their interfaces. +--- +## Business Context -.Further Information +[role="arc42help"] -See https://docs.arc42.org/section-3/[Context and Scope] in the arc42 documentation. +### Contents -**** +* *Users:* They interact directly with the application through the user interface provided by the frontend using React, HTML, CSS, and JavaScript. +* *Wikidata API:* The application communicates with the Wikidata service to obtain questions and answers related to different topics. Requests are made using the HTTP protocol, and response data is received in JSON format. +--- -=== Business Context +### Motivation -[role="arc42help"] -**** -.Contents -Specification of *all* communication partners (users, IT-systems, ...) with explanations of domain specific inputs and outputs or interfaces. -Optionally you can add domain specific formats or communication protocols. +Regarding the information exchanged with the application, it will require having a registered account to play, and it will also exchange information with a MongoDB database and Wikidata itself to obtain the questions. -.Motivation -All stakeholders should understand which data are exchanged with the environment of the system. +--- -.Form -All kinds of diagrams that show the system as a black box and specify the domain interfaces to communication partners. +### Form -Alternatively (or additionally) you can use a table. -The title of the table is the name of your system, the three columns contain the name of the communication partner, the inputs, and the outputs. +|=== -**** +| *Quiz Game* | *Comunication Partners* | *Inputs* | *Outputs* +| Users | User Interface | User answers | Game questions +| Wikidata API | API Service | Question requests | JSON Responses -**** +|=== -**** +--- -=== Technical Context +### Context diagram +[plantuml, "context", png] +---- +component "App" as app -[role="arc42help"] -**** -.Contents -Technical interfaces (channels and transmission media) linking your system to its environment. In addition a mapping of domain specific input/output to the channels, i.e. an explanation which I/O uses which channel. +:User: -> [app]: Answer question +[app] -> User: Return result + +database DB +[app] -> DB: Ask for question +DB -> [app]: Return question -.Motivation -Many stakeholders make architectural decision based on the technical interfaces between the system and its context. Especially infrastructure or hardware designers decide these technical interfaces. +component "WikiData" as wd +[app] --> wd: Ask for keyword +wd --> [app]: Return keyword +---- + +--- + +## Technical Context + +[role="arc42help"] -.Form -E.g. UML deployment diagram describing channels to neighboring systems, -together with a mapping table showing the relationships between channels and input/output. +### Contents -**** +* *HTTP Channel:* The application uses the HTTP protocol to communicate with the Wikidata API service. +* *MongoDB Data Channel:* Interactions with the MongoDB database allow for storing and retrieving questions and answers. -**** +--- -**** +### Deployment diagram +[plantuml, "deployment", png] +---- +node "Aplication Server" as app +node "DB Server" as db { +artifact "MongoDB Server" +} +node Wikidata as w +node Interface as i -**** +app - db +app -- w +app -- i +---- From 931dd154cc9d56e7db3d1e424980c800fe73eaa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Molt=C3=B3?= <144908056+UO287747@users.noreply.github.com> Date: Wed, 7 Feb 2024 20:38:54 +0100 Subject: [PATCH 06/45] Scope and Context doc First version --- docs/src/03_system_scope_and_context.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/src/03_system_scope_and_context.adoc b/docs/src/03_system_scope_and_context.adoc index 1902c376..ec9a5198 100644 --- a/docs/src/03_system_scope_and_context.adoc +++ b/docs/src/03_system_scope_and_context.adoc @@ -5,7 +5,6 @@ ifndef::imagesdir[:imagesdir: ../images] [role="arc42help"] - --- ## Contents From 1722708ff3dbec70030856235d0c7a2aed7bc615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Molt=C3=B3?= <144908056+UO287747@users.noreply.github.com> Date: Wed, 7 Feb 2024 20:39:26 +0100 Subject: [PATCH 07/45] Solution Strategy doc First version --- docs/src/04_solution_strategy.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 3f49f7ae..97a4dd76 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -4,7 +4,6 @@ ifndef::imagesdir[:imagesdir: ../images] # Solution Strategy [role="arc42help"] - ## Contents This page contains a short summary and explanation of the fundamental decisions and solution strategies, that shape system architecture. From a90a65954161e6452c7dfb776c4e22badedd6aff Mon Sep 17 00:00:00 2001 From: uo276976 <78439067+uo276976@users.noreply.github.com> Date: Thu, 8 Feb 2024 13:18:33 +0100 Subject: [PATCH 08/45] =?UTF-8?q?Primera=20versi=C3=B3n=20del=2012=5Fgloss?= =?UTF-8?q?ary.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/12_glossary.adoc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index 192b2353..3925c3de 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -34,9 +34,12 @@ See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. |=== |Term |Definition -| -| +| +| -| -| +| +| + +| +| |=== From 6fdb4a2da7e9a1d1485b55884b1adc780ceb52eb Mon Sep 17 00:00:00 2001 From: uo276976 <78439067+uo276976@users.noreply.github.com> Date: Thu, 8 Feb 2024 13:19:51 +0100 Subject: [PATCH 09/45] =?UTF-8?q?Update=20=20primera=20versi=C3=B3n=2012?= =?UTF-8?q?=5Fglossary.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corregido error en el formato del anterior commit, no se añade nada --- docs/src/12_glossary.adoc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index 3925c3de..1d43d081 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -34,12 +34,12 @@ See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. |=== |Term |Definition -| -| +|React +|JavScript library, we make use of this User Interface library on the front-end -| -| +|Docker +|We use it to deploy applications within virtual containers -| -| +|Node.js +|JavaScript runtime environment, we make use of this on the back-end |=== From 6c21649c74a16a8bc910458a0d76c4a313f05b05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20M=C3=A9ndez=20Murias?= <144954916+UO287687@users.noreply.github.com> Date: Sun, 11 Feb 2024 14:56:08 +0100 Subject: [PATCH 10/45] Update 01_introduction_and_goals.adoc --- docs/src/01_introduction_and_goals.adoc | 65 ++++++++----------------- 1 file changed, 21 insertions(+), 44 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index ddb2ae3d..a38a678b 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -5,39 +5,23 @@ ifndef::imagesdir[:imagesdir: ../images] [role="arc42help"] **** -Describes the relevant requirements and the driving forces that software architects and development team must consider. -These include +WIQ is a web application developed by HappySw that allows users to play an online quiz game. -* underlying business goals, -* essential features, -* essential functional requirements, -* quality goals for the architecture and -* relevant stakeholders and their expectations +The questions are automatically generated from Wikidata data and can be grouped by topic. Users can get a prize for each correctly answered question within a limited time and can also check their historical results in the game. **** === Requirements Overview [role="arc42help"] **** -.Contents -Short description of the functional requirements, driving forces, extract (or abstract) -of requirements. Link to (hopefully existing) requirements documents -(with version number and information where to find it). - -.Motivation -From the point of view of the end users a system is created or modified to -improve support of a business activity and/or improve the quality. - -.Form -Short textual description, probably in tabular use-case format. -If requirements documents exist this overview should refer to these documents. +The main functional requirements to be met are: -Keep these excerpts as short as possible. Balance readability of this document with potential redundancy w.r.t to requirements documents. - - -.Further Information - -See https://docs.arc42.org/section-1/[Introduction and Goals] in the arc42 documentation. +* Users must be able to register +* Users must be able to consult their participation history +* Each question must have one correct answer and several incorrect answers. +* Questions must have a time limit to answer them +* Access to the user's data must be allowed through an API. +* Access to the information of the generated questions must be allowed through an API. **** @@ -45,24 +29,15 @@ See https://docs.arc42.org/section-1/[Introduction and Goals] in the arc42 docum [role="arc42help"] **** -.Contents -The top three (max five) quality goals for the architecture whose fulfillment is of highest importance to the major stakeholders. -We really mean quality goals for the architecture. Don't confuse them with project goals. -They are not necessarily identical. - -Consider this overview of potential topics (based upon the ISO 25010 standard): - -image::01_2_iso-25010-topics-EN.drawio.png["Categories of Quality Requirements"] - -.Motivation -You should know the quality goals of your most important stakeholders, since they will influence fundamental architectural decisions. -Make sure to be very concrete about these qualities, avoid buzzwords. -If you as an architect do not know how the quality of your work will be judged... - -.Form -A table with quality goals and concrete scenarios, ordered by priorities +The quality goals in order of priority are as follows: +|=== +|Quality goal|Description +|Usability|The application must be easy to understand and use +|Performance efficiency|Question generation must be efficient +|Security|The confidentiality and integrity of user data must be ensured +|Maintainability|The application must be testable and easily modifiable +|=== **** - === Stakeholders [role="arc42help"] @@ -88,6 +63,8 @@ Table with role names, person names, and their expectations with respect to the [options="header",cols="1,2,2"] |=== |Role/Name|Contact|Expectations -| __ | __ | __ -| __ | __ | __ +| Teachers | They interact with the development team and review the project to detect and correct errors| The application must meet all functional requirements and must follow the quality goals +| RTVE (client) | Company commissioning the development of the application | The company hopes that the application will be easy to use for all users and that it will be a good version of its "Saber y Ganar" programme +| Development Team| They are the creators of the project | They must develop an application that meets all the requirements and is attractive in order to attract as many users as possible +|Users|End-users who will interact with the application|They expect it to be user-friendly, attractive and similar to the programme it imitates ("Saber y Ganar") |=== From 3ecdc7b8a2f83f0faf304d4fc50044d06d2cf390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 11 Feb 2024 17:14:14 +0100 Subject: [PATCH 11/45] Inicio 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index df5c29c8..41796fec 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -5,6 +5,43 @@ ifndef::imagesdir[:imagesdir: ../images] == Building Block View +==== Motivation + +Detailed structure of the system. Focused on the components of the _User Interface_ and _Data Access_. + +==== Contained Building Blocks + +[options="header",cols="1,5"] +|=== + +| Name | Description + +| *_Webapp_* +| Sections of the application where the user is going to interact with the system. + +| *_Home_* +| Initial screen of the application. A welcome message is going to be displayed as well as the login and sign up options. + +| *_Help_* +| Offers help to the user, so when he has any problem, he is able to sort out any possible problems. + +| *_About_* +| Conteins important information about the project, like the development method, the developers and how to contact them. + +| *_User session_* +| Everything related to user session, by the session provider, such as Inrupt. + +| *_Sign-up_* +| Allows the client to create a new account for the application. This process can only be done once per user. + +| *_Log-in_* +| Here the user will log-in into their personal account. In case they have created one previously. + +| *_Log-out_* +| It logs out the user from the application. + +|=== + [role="arc42help"] **** .Content From 5892bfe556f3fe5d3b01452b9950fae1dda54491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20M=C3=A9ndez=20Murias?= <144954916+UO287687@users.noreply.github.com> Date: Sun, 11 Feb 2024 17:44:24 +0100 Subject: [PATCH 12/45] Update 02_architecture_constraints.adoc --- docs/src/02_architecture_constraints.adoc | 46 +++++++++++------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index 226e501f..45c879ff 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -1,27 +1,27 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-architecture-constraints]] == Architecture Constraints +=== Technical constraints +[options="header",cols="1,2"] +|=== +|Constraint|Description +|Wikidata|The generation of the questions should be done automatically with the data from Wikidata +|Web access|The application must be accessible via the web +|Git and GitHub|Version control and project tracking will be done using Git. GitHub is used to remotely store the repositories +|=== +=== Organizational constraints +[options="header",cols="1,2"] +|=== +|Constraint|Description +|Team|The development team is composed of 6 people +|Repository control|The repository has a "main" and a "develop" branch and numerous "feature" branches where new functionalities are developed +|Meetings|At least one weekly team meeting is held to maintain proper organisation +|=== +=== Conventions +[options="header",cols="1,2"] +|=== +|Convention|Description +|Arc42|The arc42 template is used in the documentation +|AsciiDoc|The documentation is done using AsciiDoc as markup language +|=== -[role="arc42help"] -**** -.Contents -Any requirement that constraints software architects in their freedom of design and implementation decisions or decision about the development process. These constraints sometimes go beyond individual systems and are valid for whole organizations and companies. - -.Motivation -Architects should know exactly where they are free in their design decisions and where they must adhere to constraints. -Constraints must always be dealt with; they may be negotiable, though. - -.Form -Simple tables of constraints with explanations. -If needed you can subdivide them into -technical constraints, organizational and political constraints and -conventions (e.g. programming or versioning guidelines, documentation or naming conventions) - - -.Further Information - -See https://docs.arc42.org/section-2/[Architecture Constraints] in the arc42 documentation. - -**** From 1585a2924b3efbe7432ce103073068cf0c778449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20M=C3=A9ndez=20Murias?= <144954916+UO287687@users.noreply.github.com> Date: Sun, 11 Feb 2024 17:56:42 +0100 Subject: [PATCH 13/45] Update 01_introduction_and_goals.adoc Errors solved --- docs/src/01_introduction_and_goals.adoc | 38 ++----------------------- 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index a38a678b..af7820f1 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -1,19 +1,10 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-introduction-and-goals]] == Introduction and Goals - -[role="arc42help"] -**** WIQ is a web application developed by HappySw that allows users to play an online quiz game. The questions are automatically generated from Wikidata data and can be grouped by topic. Users can get a prize for each correctly answered question within a limited time and can also check their historical results in the game. -**** === Requirements Overview - -[role="arc42help"] -**** The main functional requirements to be met are: * Users must be able to register @@ -23,13 +14,9 @@ The main functional requirements to be met are: * Access to the user's data must be allowed through an API. * Access to the information of the generated questions must be allowed through an API. -**** - === Quality Goals - -[role="arc42help"] -**** The quality goals in order of priority are as follows: +[options="header",cols="1,2"] |=== |Quality goal|Description |Usability|The application must be easy to understand and use @@ -37,29 +24,8 @@ The quality goals in order of priority are as follows: |Security|The confidentiality and integrity of user data must be ensured |Maintainability|The application must be testable and easily modifiable |=== -**** -=== Stakeholders - -[role="arc42help"] -**** -.Contents -Explicit overview of stakeholders of the system, i.e. all person, roles or organizations that - -* should know the architecture -* have to be convinced of the architecture -* have to work with the architecture or with code -* need the documentation of the architecture for their work -* have to come up with decisions about the system or its development - -.Motivation -You should know all parties involved in development of the system or affected by the system. -Otherwise, you may get nasty surprises later in the development process. -These stakeholders determine the extent and the level of detail of your work and its results. - -.Form -Table with role names, person names, and their expectations with respect to the architecture and its documentation. -**** +=== Stakeholders [options="header",cols="1,2,2"] |=== |Role/Name|Contact|Expectations From 489f76c2a6e5daf6ba8ffe83f025381898156e8d Mon Sep 17 00:00:00 2001 From: Juan Hermosa Casaprima Date: Sun, 11 Feb 2024 19:42:52 +0100 Subject: [PATCH 14/45] =?UTF-8?q?=C3=81rbol=20de=20Calidad=20hecho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/images/10-Quality_Tree.png | Bin 0 -> 45636 bytes docs/src/10_quality_requirements.adoc | 1 + 2 files changed, 1 insertion(+) create mode 100644 docs/images/10-Quality_Tree.png diff --git a/docs/images/10-Quality_Tree.png b/docs/images/10-Quality_Tree.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0ee967906b914de4f6d43e81f5f9bf50fc907a GIT binary patch literal 45636 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 literal 0 HcmV?d00001 diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 68475e80..a5f5ca02 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -43,6 +43,7 @@ The quality tree is a high-level overview of the quality goals and requirements: In any case the tree should include links to the scenarios of the following section. +image::10-Quiality_Tree.png["Quality Tree"] **** From 8acb8d0b83a248642946cf54ec80daf7b26d17e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 11 Feb 2024 19:47:54 +0100 Subject: [PATCH 15/45] Tabla acabada en 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 41796fec..948786a1 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -22,11 +22,20 @@ Detailed structure of the system. Focused on the components of the _User Interfa | *_Home_* | Initial screen of the application. A welcome message is going to be displayed as well as the login and sign up options. +| *_Game_* +| Game screen where the user can play the game. + +| *_Ranking_* +| It contains the best scores recorded in the game, including the user's highest score and the scores of other users belonging to their group. + +| *_History_* +| Contains all user participations with the number of games, correct/incorrect answers, and times. + | *_Help_* | Offers help to the user, so when he has any problem, he is able to sort out any possible problems. | *_About_* -| Conteins important information about the project, like the development method, the developers and how to contact them. +| Contains important information about the project, like the development method, the developers and how to contact them. | *_User session_* | Everything related to user session, by the session provider, such as Inrupt. From f77f7327b4dd872b80c55e8b14e643d99c69e70a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 11 Feb 2024 19:49:31 +0100 Subject: [PATCH 16/45] Eliminada errata --- docs/src/05_building_block_view.adoc | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 948786a1..a9c63c06 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -37,9 +37,6 @@ Detailed structure of the system. Focused on the components of the _User Interfa | *_About_* | Contains important information about the project, like the development method, the developers and how to contact them. -| *_User session_* -| Everything related to user session, by the session provider, such as Inrupt. - | *_Sign-up_* | Allows the client to create a new account for the application. This process can only be done once per user. From 7faea7a82700f042f82b860f8001719caf505900 Mon Sep 17 00:00:00 2001 From: Juan Hermosa Casaprima Date: Sun, 11 Feb 2024 20:12:57 +0100 Subject: [PATCH 17/45] =?UTF-8?q?Primer=20borrador=20del=20punto=2010=20de?= =?UTF-8?q?=20la=20documentaci=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/10_quality_requirements.adoc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index a5f5ca02..48b77477 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -72,3 +72,21 @@ more precisely down to a level of scenarios that can be discussed and evaluated. .Form Tabular or free form text. **** + +* Usage Scenarios + +[options="header",cols="1,2,2"] +|=== +|Quality Goal|Scenario|Response +| Performance efficiency | The user wants to start answering questions. | The application generates a set of questions. This generation should be as fast as possible. +| Usability | A new user starts using the application. | User should be able to do it without difficulty. +| Security | The application must encript sensible data. | Data will be only accessible by its owner. +|=== + +* Change Scenarios + +[options="header",cols="1,2,2"] +|=== +|Quality Goal|Scenario|Response +| Maintainability | Introduce new functionality. | Reuse key components in order to easily add that new functionality. +|=== \ No newline at end of file From d22e147461bc316caa574024ffbb9bcf0b9cb282 Mon Sep 17 00:00:00 2001 From: uo276976 <78439067+uo276976@users.noreply.github.com> Date: Sun, 11 Feb 2024 23:15:58 +0100 Subject: [PATCH 18/45] Update 12_glossary.adoc --- docs/src/12_glossary.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index 1d43d081..51db3c44 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -42,4 +42,7 @@ See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. |Node.js |JavaScript runtime environment, we make use of this on the back-end + +|GitHub +|Portal used to host the application code and documentation |=== From 8e058c727b21f06421745c781db600ed18573234 Mon Sep 17 00:00:00 2001 From: uo276976 <78439067+uo276976@users.noreply.github.com> Date: Sun, 11 Feb 2024 23:49:53 +0100 Subject: [PATCH 19/45] Update 11_technical_risks.adoc First version of the technical risks document --- docs/src/11_technical_risks.adoc | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index dc5575fc..e6e131b7 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -1,8 +1,25 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-technical-risks]] == Risks and Technical Debts - +=== Risks +[options="header",cols="1,2"] +|=== +|Risk|Description +|Teamwork failures +|The distribution of tasks must be done effectively, so that if one member of the team does not perform an assigned task, it can be solved by another member. +|Version management problems +|Errors in version control can delay the project. Ignorance of the branches and their purpose can lead to code conflicts. +|Lack of time +|Not planning work well can result in difficulties meeting deadlines +|Use of unknown technologies +|The use of languages and technologies unknown to group members can make it difficult to perform assigned tasks +|=== + +=== Technical debts +[options="header",cols="1,2"] +|=== +|Risk|Description + +|=== [role="arc42help"] **** From ccdbaf8e3245257065f42789daaf306178324120 Mon Sep 17 00:00:00 2001 From: Juan Date: Mon, 12 Feb 2024 09:45:13 +0100 Subject: [PATCH 20/45] =?UTF-8?q?Primer=20borrador=20punto=209=20documenta?= =?UTF-8?q?ci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/09_architecture_decisions.adoc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/src/09_architecture_decisions.adoc b/docs/src/09_architecture_decisions.adoc index 51e9aad9..061b39a5 100644 --- a/docs/src/09_architecture_decisions.adoc +++ b/docs/src/09_architecture_decisions.adoc @@ -33,3 +33,12 @@ See https://docs.arc42.org/section-9/[Architecture Decisions] in the arc42 docum There you will find links and examples about ADR. **** + +[options="header",cols="1,2"] +|=== +|Decision|Motivation +| Docker | It is decided to use Docker due to its popularity in the professional field and its ease of execution thanks to the configuration files provided by the subject's faculty. +| MongoDB | It is decided to use MongoDB based on the recommendation of the faculty, as it is one of the most popular NoSQL databases and because it fits perfectly with the application's needs. +| NodeJS | It is decided to use NodeJS since it is the recommended option by the subject's faculty and one of the most widely used technologies in this area of web applications, thus having extensive documentation and examples available on the Internet. +| React | It is decided to use React since it is the recommended option by the subject's faculty. +|=== \ No newline at end of file From c54ec80a4f78b442ef13d8889773e6130a27f439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Mon, 12 Feb 2024 10:05:24 +0100 Subject: [PATCH 21/45] Level 1 motivation 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index a9c63c06..17a00d00 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -2,9 +2,18 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-building-block-view]] - == Building Block View +=== Level 1 + +==== Motivation + +*_WIQ_* application is the general structure of a system in which users will have the possibility to play a game like _Saber y Ganar_. + + + +=== Level 3 + ==== Motivation Detailed structure of the system. Focused on the components of the _User Interface_ and _Data Access_. From 01368b16d74df41b0c750546bfe0ec4f09453a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Mon, 12 Feb 2024 10:19:00 +0100 Subject: [PATCH 22/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 17a00d00..a7761808 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -8,7 +8,33 @@ ifndef::imagesdir[:imagesdir: ../images] ==== Motivation -*_WIQ_* application is the general structure of a system in which users will have the possibility to play a game like _Saber y Ganar_. +*_WIQ_* application is the general structure of a system in which users will have the possibility to play a game like _Saber y Ganar_ and compare their results with their friends. + +==== Contained building blocks + +[options="header",cols="1,3"] +|=== + +| Name | Description + +| *_User_* +| Client of the application which will interact with it. + +| *_WIQ_* +| System developed to be used by the users. + +| +| + +|=== + +=== Level 2 + +==== Motivation + + + +==== Contained building blocks From 5d9a8a692bfbf2ae7699df4d89e4322fd9f28249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Mon, 12 Feb 2024 10:26:52 +0100 Subject: [PATCH 23/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index a7761808..7f5bb95c 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -12,7 +12,7 @@ ifndef::imagesdir[:imagesdir: ../images] ==== Contained building blocks -[options="header",cols="1,3"] +[options="header",cols="1,2"] |=== | Name | Description @@ -23,9 +23,6 @@ ifndef::imagesdir[:imagesdir: ../images] | *_WIQ_* | System developed to be used by the users. -| -| - |=== === Level 2 @@ -64,10 +61,7 @@ Detailed structure of the system. Focused on the components of the _User Interfa | It contains the best scores recorded in the game, including the user's highest score and the scores of other users belonging to their group. | *_History_* -| Contains all user participations with the number of games, correct/incorrect answers, and times. - -| *_Help_* -| Offers help to the user, so when he has any problem, he is able to sort out any possible problems. +| Contains all user participations with the number of games played, correct/incorrect answers, and times. | *_About_* | Contains important information about the project, like the development method, the developers and how to contact them. From f13fecd9e88cb4681a2238ba7a59f0a93ceb3b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Mon, 12 Feb 2024 10:44:56 +0100 Subject: [PATCH 24/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 7f5bb95c..d9ea2f20 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -29,11 +29,22 @@ ifndef::imagesdir[:imagesdir: ../images] ==== Motivation - +Shows how the application will work internally. ==== Contained building blocks +[options="header",cols="1,2"] +|=== + +| Name | Description + +| *_User Interface_* +| The user will interact with the UI. +| *_Data Access_* +| + +|=== === Level 3 From 16b8f5cde48947e1156d7b86ad5b8973968cf8a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sat, 17 Feb 2024 16:27:40 +0100 Subject: [PATCH 25/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index d9ea2f20..26beac62 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -4,7 +4,7 @@ ifndef::imagesdir[:imagesdir: ../images] == Building Block View -=== Level 1 +=== Level 1 ==== Motivation @@ -23,6 +23,9 @@ ifndef::imagesdir[:imagesdir: ../images] | *_WIQ_* | System developed to be used by the users. +| *_WIKIDATA_* +| Aplication to generate the questions and answers. + |=== === Level 2 @@ -41,9 +44,12 @@ Shows how the application will work internally. | *_User Interface_* | The user will interact with the UI. -| *_Data Access_* +| *_Microservices_* | +| *_Data Access_* +| MongoDB is the selected... + |=== === Level 3 From b5b47495f9c014a7be7478788ef5127ff1b71162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sat, 17 Feb 2024 17:48:23 +0100 Subject: [PATCH 26/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 26beac62..66c50448 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -6,6 +6,17 @@ ifndef::imagesdir[:imagesdir: ../images] === Level 1 +---- + +user u as "User" +Component w as "WIQ" +Component d as "WikiData" + +u -> w: Plays +w -> d: Receives information from + +---- + ==== Motivation *_WIQ_* application is the general structure of a system in which users will have the possibility to play a game like _Saber y Ganar_ and compare their results with their friends. From 3a43724872e9faf85bd24db65c9d802525954e41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sat, 17 Feb 2024 17:54:28 +0100 Subject: [PATCH 27/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 66c50448..af17f4df 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -4,16 +4,18 @@ ifndef::imagesdir[:imagesdir: ../images] == Building Block View -=== Level 1 +=== Level 1: Whitebox of the Overall System ----- +[plantuml, "level1", png] -user u as "User" -Component w as "WIQ" -Component d as "WikiData" +---- -u -> w: Plays -w -> d: Receives information from +Actor User +Component WIQ +Component Wikidata +User -right-> WIQ: interacts with +WIQ -right-> Wikidata: gets data +Wikidata -right..> WIQ ---- From 988e1184041c421ef78a9e2eb2df433c85998168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sat, 17 Feb 2024 17:58:34 +0100 Subject: [PATCH 28/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index af17f4df..ade413a3 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -14,7 +14,7 @@ Actor User Component WIQ Component Wikidata User -right-> WIQ: interacts with -WIQ -right-> Wikidata: gets data +WIQ -right-> Wikidata: receives data Wikidata -right..> WIQ ---- From b3281a9f5901c240ef252f06a2fecf95599c5dd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sat, 17 Feb 2024 17:59:32 +0100 Subject: [PATCH 29/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 204 --------------------------- 1 file changed, 204 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index ade413a3..df1f1cc4 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -108,207 +108,3 @@ Detailed structure of the system. Focused on the components of the _User Interfa |=== [role="arc42help"] -**** -.Content -The building block view shows the static decomposition of the system into building blocks (modules, components, subsystems, classes, interfaces, packages, libraries, frameworks, layers, partitions, tiers, functions, macros, operations, data structures, ...) as well as their dependencies (relationships, associations, ...) - -This view is mandatory for every architecture documentation. -In analogy to a house this is the _floor plan_. - -.Motivation -Maintain an overview of your source code by making its structure understandable through -abstraction. - -This allows you to communicate with your stakeholder on an abstract level without disclosing implementation details. - -.Form -The building block view is a hierarchical collection of black boxes and white boxes -(see figure below) and their descriptions. - -image::05_building_blocks-EN.png["Hierarchy of building blocks"] - -*Level 1* is the white box description of the overall system together with black -box descriptions of all contained building blocks. - -*Level 2* zooms into some building blocks of level 1. -Thus it contains the white box description of selected building blocks of level 1, together with black box descriptions of their internal building blocks. - -*Level 3* zooms into selected building blocks of level 2, and so on. - - -.Further Information - -See https://docs.arc42.org/section-5/[Building Block View] in the arc42 documentation. - -**** - -=== Whitebox Overall System - -[role="arc42help"] -**** -Here you describe the decomposition of the overall system using the following white box template. It contains - - * an overview diagram - * a motivation for the decomposition - * black box descriptions of the contained building blocks. For these we offer you alternatives: - - ** use _one_ table for a short and pragmatic overview of all contained building blocks and their interfaces - ** use a list of black box descriptions of the building blocks according to the black box template (see below). - Depending on your choice of tool this list could be sub-chapters (in text files), sub-pages (in a Wiki) or nested elements (in a modeling tool). - - - * (optional:) important interfaces, that are not explained in the black box templates of a building block, but are very important for understanding the white box. -Since there are so many ways to specify interfaces why do not provide a specific template for them. - In the worst case you have to specify and describe syntax, semantics, protocols, error handling, - restrictions, versions, qualities, necessary compatibilities and many things more. -In the best case you will get away with examples or simple signatures. - -**** - -_****_ - -Motivation:: - -__ - - -Contained Building Blocks:: -__ - -Important Interfaces:: -__ - -[role="arc42help"] -**** -Insert your explanations of black boxes from level 1: - -If you use tabular form you will only describe your black boxes with name and -responsibility according to the following schema: - -[cols="1,2" options="header"] -|=== -| **Name** | **Responsibility** -| __ | __ -| __ | __ -|=== - - - -If you use a list of black box descriptions then you fill in a separate black box template for every important building block . -Its headline is the name of the black box. -**** - - -==== - -[role="arc42help"] -**** -Here you describe -according the the following black box template: - -* Purpose/Responsibility -* Interface(s), when they are not extracted as separate paragraphs. This interfaces may include qualities and performance characteristics. -* (Optional) Quality-/Performance characteristics of the black box, e.g.availability, run time behavior, .... -* (Optional) directory/file location -* (Optional) Fulfilled requirements (if you need traceability to requirements). -* (Optional) Open issues/problems/risks - -**** - -__ - -__ - -_<(Optional) Quality/Performance Characteristics>_ - -_<(Optional) Directory/File Location>_ - -_<(Optional) Fulfilled Requirements>_ - -_<(optional) Open Issues/Problems/Risks>_ - - - - -==== - -__ - -==== - -__ - - -==== - -... - -==== - - - -=== Level 2 - -[role="arc42help"] -**** -Here you can specify the inner structure of (some) building blocks from level 1 as white boxes. - -You have to decide which building blocks of your system are important enough to justify such a detailed description. -Please prefer relevance over completeness. Specify important, surprising, risky, complex or volatile building blocks. -Leave out normal, simple, boring or standardized parts of your system -**** - -==== White Box __ - -[role="arc42help"] -**** -...describes the internal structure of _building block 1_. -**** - -__ - -==== White Box __ - - -__ - -... - -==== White Box __ - - -__ - - - -=== Level 3 - -[role="arc42help"] -**** -Here you can specify the inner structure of (some) building blocks from level 2 as white boxes. - -When you need more detailed levels of your architecture please copy this -part of arc42 for additional levels. -**** - - -==== White Box <_building block x.1_> - -[role="arc42help"] -**** -Specifies the internal structure of _building block x.1_. -**** - - -__ - - -==== White Box <_building block x.2_> - -__ - - - -==== White Box <_building block y.1_> - -__ From 9825ab3a714cc6ace5856727c0b07d5e8de02e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sat, 17 Feb 2024 21:05:59 +0100 Subject: [PATCH 30/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index df1f1cc4..1e7b9f92 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -42,7 +42,22 @@ Wikidata -right..> WIQ |=== === Level 2 - +[plantuml, "level2", png] +---- +Actor User +Component WIQ { + Component ui as "User Interface" + Component ms as "MicroService" + Database db as "MongoDB" +} + +Component wd as "WikiData" + +User -> ui: Interacts +ui -> ms: Sends requests +ms -> db: Reads +wd -> ms: Gives data +---- ==== Motivation Shows how the application will work internally. @@ -58,10 +73,10 @@ Shows how the application will work internally. | The user will interact with the UI. | *_Microservices_* -| +| It is the backend of the UI, formed by different modules. -| *_Data Access_* -| MongoDB is the selected... +| *_DataBase_* +| MongoDB is the chosen NoSQL database management system. It stores all the information necessary for the proper functioning of the application. |=== From 44f554622b89a6cb1c66678ee7fd25341cb49ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 12:02:20 +0100 Subject: [PATCH 31/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 54 ++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 1e7b9f92..c393898c 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -53,9 +53,9 @@ Component WIQ { Component wd as "WikiData" -User -> ui: Interacts +User -> ui: Interacts ui -> ms: Sends requests -ms -> db: Reads +ms <-> db: Reads wd -> ms: Gives data ---- ==== Motivation @@ -81,7 +81,39 @@ Shows how the application will work internally. |=== === Level 3 +---- +Component WIQ { + + Component ms as "MicroServices" { + Component users as "Users Service" + Component question as "Question Service" + Component game as "Game Service" + Component ranking as "ranking" + Component history as "History" + Database db as "MongoDB" + } + + Component ui as "User Interface" + + + ui --> users + ui --> game + ui --> history + ui --> ranking + + + users <-down-> db + game <-down-> db + ranking <-down-> db + history <-down-> db +} + +Component wd as "Wikidata" + +game --> question: generates question +question <-> wd: ask and answer the question +---- ==== Motivation Detailed structure of the system. Focused on the components of the _User Interface_ and _Data Access_. @@ -91,13 +123,7 @@ Detailed structure of the system. Focused on the components of the _User Interfa [options="header",cols="1,5"] |=== -| Name | Description - -| *_Webapp_* -| Sections of the application where the user is going to interact with the system. - -| *_Home_* -| Initial screen of the application. A welcome message is going to be displayed as well as the login and sign up options. +| Name | Description | *_Game_* | Game screen where the user can play the game. @@ -111,14 +137,12 @@ Detailed structure of the system. Focused on the components of the _User Interfa | *_About_* | Contains important information about the project, like the development method, the developers and how to contact them. -| *_Sign-up_* -| Allows the client to create a new account for the application. This process can only be done once per user. +| *_Users Service_* +| Allows the client to create a new account for the application, log in and log out. -| *_Log-in_* -| Here the user will log-in into their personal account. In case they have created one previously. +| *_Question service_* +| Allows to ask him questions and receive the answers of them. -| *_Log-out_* -| It logs out the user from the application. |=== From 84f5bb808b3c790d49fac13a6d456534cb1eb06b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 12:02:55 +0100 Subject: [PATCH 32/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index c393898c..d11c2927 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -81,6 +81,7 @@ Shows how the application will work internally. |=== === Level 3 +[plantuml, "level3", png] ---- Component WIQ { From 146b25778ffe6edc02659072c0460c9ea3e60448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 12:08:18 +0100 Subject: [PATCH 33/45] Update 05_building_block_view.adoc --- docs/src/05_building_block_view.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index d11c2927..9259f46d 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -60,7 +60,7 @@ wd -> ms: Gives data ---- ==== Motivation -Shows how the application will work internally. +Shows how the application will work internally. The user, through the user interface, will use microservices to access the different modules with the help of the database. ==== Contained building blocks From 30637f5d7334cb3d31048cf9f79514520c94b74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 17:06:10 +0100 Subject: [PATCH 34/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index dd713aaf..af3ee28b 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -6,12 +6,25 @@ ifndef::imagesdir[:imagesdir: ../images] For the login, the app shows the login view, which asks the user for his username and his password. -Then, the app does a login request to the REST API server, which redirect the user to the identity provider, which handles the authentication. +Then, the app does a login request to the users microservice, which redirect the user to the identity provider, which handles the authentication. -If the login is succesfully, ... +If the login is succesfully, the app shows the different options of the game. In case the login isn't succesfully, a warning message is shown. -== ESTRUCTURA +=== Game + +=== Ranking + +=== History + +In this view, the user can watch this options: + +- Number of games played +- Best times +- Correct/incorrect questions + + += ESTRUCTURA **** .Contents The runtime view describes concrete behavior and interactions of the system’s building blocks in form of scenarios from the following areas: From c121049e8cf634cee8460c3ca6ff772b98c3773e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 17:09:37 +0100 Subject: [PATCH 35/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index af3ee28b..4705f1a6 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -14,9 +14,13 @@ In case the login isn't succesfully, a warning message is shown. === Game === Ranking +In this view, the user can watch different rankings: -=== History +- Ordered by accuracy percentage +- Ordered by number of questions answered correctly +- Ordered by quantity of game rounds +=== History In this view, the user can watch this options: - Number of games played From 2a56e7a0e544c7bb90afe3cac4b40d70d0714a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 17:16:46 +0100 Subject: [PATCH 36/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index 4705f1a6..d5e575da 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -13,6 +13,9 @@ In case the login isn't succesfully, a warning message is shown. === Game +When the user starts a game, the app generates a question and request the correct answer to the WikiData API. When the user choose a posible answer, the app checks if it is the correct answer. Then, this process is repeated until the end of the game. + + === Ranking In this view, the user can watch different rankings: From b72edd5db43c70895ff39fa9bbc2ccc33b2a4141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 17:33:50 +0100 Subject: [PATCH 37/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index d5e575da..a96070b2 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -24,7 +24,7 @@ In this view, the user can watch different rankings: - Ordered by quantity of game rounds === History -In this view, the user can watch this options: +In this view, the user can watch this options about his past games: - Number of games played - Best times From f35ef8dcf515f00b9d14d7241cd940d3b41bc870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:00:35 +0100 Subject: [PATCH 38/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index a96070b2..332e2d0f 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -11,6 +11,31 @@ Then, the app does a login request to the users microservice, which redirect the If the login is succesfully, the app shows the different options of the game. In case the login isn't succesfully, a warning message is shown. +[plantuml,"sequencediagram-login",png] +---- +actor User as u +participant "Web App" as w +participant "User Microservice" as um +activate w +w -> w: Show Login View +u -> w: Chooses Identity +w -> um: Requests login +deactivate w +activate um +um -> um: Redirects to the provider login form +um --> u: Asks for credentials +deactivate um +activate u +u -> um: Logs in +deactivate u +activate um +um --> um: Provides session information +um --> w: Provides session ID +deactivate um +activate w +w -> w: Show Main View +deactivate um +---- === Game When the user starts a game, the app generates a question and request the correct answer to the WikiData API. When the user choose a posible answer, the app checks if it is the correct answer. Then, this process is repeated until the end of the game. From 706f329ef668a50938007981dcf8a94065e9de7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:25:43 +0100 Subject: [PATCH 39/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 95 +++++++++++++---------------------- 1 file changed, 35 insertions(+), 60 deletions(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index 332e2d0f..460ec3cc 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -33,14 +33,41 @@ um --> um: Provides session information um --> w: Provides session ID deactivate um activate w -w -> w: Show Main View +w -> w: Show Game View deactivate um ---- === Game When the user starts a game, the app generates a question and request the correct answer to the WikiData API. When the user choose a posible answer, the app checks if it is the correct answer. Then, this process is repeated until the end of the game. - +[plantuml,"sequencediagram-game",png] +---- +actor User as user +participant WebApp as app +participant GameMS as gameMS +participant WikiDataAPI as api + +activate app + +user -> app: Start game +app -> gameMS: Generate question +gameMS -> api: Request correct answer\nfor the generated question +api --> gameMS: Correct answer +gameMS -> app: +app -> user: Show question and options + +loop Until end of the game + user -> app: Choose possible answer + app -> gameMS: Verify answer\nselected by the user + gameMS --> app: Correct or incorrect answer + app -> user: Show result\nand current score +end + +user -> app: Finish game +app --> user: Show final score + +deactivate app +---- === Ranking In this view, the user can watch different rankings: @@ -48,6 +75,10 @@ In this view, the user can watch different rankings: - Ordered by number of questions answered correctly - Ordered by quantity of game rounds +[plantuml,"sequencediagram-ranking",png] +---- + +---- === History In this view, the user can watch this options about his past games: @@ -55,63 +86,7 @@ In this view, the user can watch this options about his past games: - Best times - Correct/incorrect questions - -= ESTRUCTURA -**** -.Contents -The runtime view describes concrete behavior and interactions of the system’s building blocks in form of scenarios from the following areas: - -* important use cases or features: how do building blocks execute them? -* interactions at critical external interfaces: how do building blocks cooperate with users and neighboring systems? -* operation and administration: launch, start-up, stop -* error and exception scenarios - -Remark: The main criterion for the choice of possible scenarios (sequences, workflows) is their *architectural relevance*. It is *not* important to describe a large number of scenarios. You should rather document a representative selection. - -.Motivation -You should understand how (instances of) building blocks of your system perform their job and communicate at runtime. -You will mainly capture scenarios in your documentation to communicate your architecture to stakeholders that are less willing or able to read and understand the static models (building block view, deployment view). - -.Form -There are many notations for describing scenarios, e.g. - -* numbered list of steps (in natural language) -* activity diagrams or flow charts -* sequence diagrams -* BPMN or EPCs (event process chains) -* state machines -* ... - - -.Further Information - -See https://docs.arc42.org/section-6/[Runtime View] in the arc42 documentation. - -**** - -=== - - -* __ -* __ - -It is possible to use a sequence diagram: - -[plantuml,"Sequence diagram",png] ----- -actor Alice -actor Bob -database Pod as "Bob's Pod" -Alice -> Bob: Authentication Request -Bob --> Alice: Authentication Response -Alice --> Pod: Store route -Alice -> Bob: Another authentication Request -Alice <-- Bob: another authentication Response +[plantuml,"sequencediagram-history",png] ---- -=== - -=== ... - -=== +---- From 6ae7bcd40ccee68177349c042d53b5ebe7e4d983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:43:26 +0100 Subject: [PATCH 40/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index 460ec3cc..5d9856ad 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -77,7 +77,19 @@ In this view, the user can watch different rankings: [plantuml,"sequencediagram-ranking",png] ---- +actor User as user +participant HistoryMS as MS +participant MongoDB as db + +activate MS + +user -> MS: Request ranking +MS -> db: Asks for the ranking +db -> MS: Gives the ranking with the best +MS -> user: Shows the ranking + +deactivate MS ---- === History In this view, the user can watch this options about his past games: From 48cc104cef3d57c74af5826c57919c1dab3b2be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Garc=C3=ADa=20Mart=C3=ADnez?= <124291125+uo289097@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:46:30 +0100 Subject: [PATCH 41/45] Update 06_runtime_view.adoc --- docs/src/06_runtime_view.adoc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index 5d9856ad..d6a953e1 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -78,7 +78,7 @@ In this view, the user can watch different rankings: [plantuml,"sequencediagram-ranking",png] ---- actor User as user -participant HistoryMS as MS +participant RankingMS as MS participant MongoDB as db activate MS @@ -100,5 +100,16 @@ In this view, the user can watch this options about his past games: [plantuml,"sequencediagram-history",png] ---- +actor User as user +participant HistoryMS as MS +participant MongoDB as db +activate MS + +user -> MS: Request history +MS -> db: Asks for the history +db -> MS: Gives the user's history +MS -> user: Shows the history + +deactivate MS ---- From 53c2b16b04270d740c1d4dfb2613cd1d8b8a5f49 Mon Sep 17 00:00:00 2001 From: uo276976 <78439067+uo276976@users.noreply.github.com> Date: Sun, 18 Feb 2024 20:28:05 +0100 Subject: [PATCH 42/45] Update 11_technical_risks.adoc --- docs/src/11_technical_risks.adoc | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index e6e131b7..db89625c 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -18,25 +18,7 @@ [options="header",cols="1,2"] |=== |Risk|Description - +|Insufficient documentation +|A lack of clear documentation about code and architecture can make it difficult to understand and maintain code, leading to additional work. |=== - -[role="arc42help"] -**** -.Contents -A list of identified technical risks or technical debts, ordered by priority - -.Motivation -“Risk management is project management for grown-ups” (Tim Lister, Atlantic Systems Guild.) - -This should be your motto for systematic detection and evaluation of risks and technical debts in the architecture, which will be needed by management stakeholders (e.g. project managers, product owners) as part of the overall risk analysis and measurement planning. - -.Form -List of risks and/or technical debts, probably including suggested measures to minimize, mitigate or avoid risks or reduce technical debts. - - -.Further Information - -See https://docs.arc42.org/section-11/[Risks and Technical Debt] in the arc42 documentation. - **** From f332b8d3e8fe8781ae6f05531148a094c04677a8 Mon Sep 17 00:00:00 2001 From: uo276976 <78439067+uo276976@users.noreply.github.com> Date: Sun, 18 Feb 2024 20:28:19 +0100 Subject: [PATCH 43/45] Update 12_glossary.adoc --- docs/src/12_glossary.adoc | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index 51db3c44..5fbfbc3a 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -2,34 +2,6 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-glossary]] == Glossary - -[role="arc42help"] -**** -.Contents -The most important domain and technical terms that your stakeholders use when discussing the system. - -You can also see the glossary as source for translations if you work in multi-language teams. - -.Motivation -You should clearly define your terms, so that all stakeholders - -* have an identical understanding of these terms -* do not use synonyms and homonyms - - -.Form - -A table with columns and . - -Potentially more columns in case you need translations. - - -.Further Information - -See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. - -**** - [cols="e,2e" options="header"] |=== |Term |Definition @@ -45,4 +17,7 @@ See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. |GitHub |Portal used to host the application code and documentation + +|MongoDB +|NoSQL database management system used in the application |=== From f72958e2f87766fa56f9d7411d6b0de602ce49e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Fern=C3=A1ndez=20Azcoaga?= <124345225+AlbertoFAz@users.noreply.github.com> Date: Mon, 19 Feb 2024 06:10:14 +0100 Subject: [PATCH 44/45] Update 07_deployment_view.adoc --- docs/src/07_deployment_view.adoc | 82 ++++++-------------------------- 1 file changed, 14 insertions(+), 68 deletions(-) diff --git a/docs/src/07_deployment_view.adoc b/docs/src/07_deployment_view.adoc index 22b45c27..0bb43d13 100644 --- a/docs/src/07_deployment_view.adoc +++ b/docs/src/07_deployment_view.adoc @@ -7,88 +7,34 @@ ifndef::imagesdir[:imagesdir: ../images] [role="arc42help"] **** -.Content -The deployment view describes: - - 1. technical infrastructure used to execute your system, with infrastructure elements like geographical locations, environments, computers, processors, channels and net topologies as well as other infrastructure elements and - -2. mapping of (software) building blocks to that infrastructure elements. - -Often systems are executed in different environments, e.g. development environment, test environment, production environment. In such cases you should document all relevant environments. - -Especially document a deployment view if your software is executed as distributed system with more than one computer, processor, server or container or when you design and construct your own hardware processors and chips. - -From a software perspective it is sufficient to capture only those elements of an infrastructure that are needed to show a deployment of your building blocks. Hardware architects can go beyond that and describe an infrastructure to any level of detail they need to capture. - -.Motivation -Software does not run without hardware. -This underlying infrastructure can and will influence a system and/or some -cross-cutting concepts. Therefore, there is a need to know the infrastructure. - -.Form - -Maybe a highest level deployment diagram is already contained in section 3.2. as -technical context with your own infrastructure as ONE black box. In this section one can -zoom into this black box using additional deployment diagrams: - -* UML offers deployment diagrams to express that view. Use it, probably with nested diagrams, -when your infrastructure is more complex. -* When your (hardware) stakeholders prefer other kinds of diagrams rather than a deployment diagram, let them use any kind that is able to show nodes and channels of the infrastructure. - - -.Further Information - -See https://docs.arc42.org/section-7/[Deployment View] in the arc42 documentation. - **** === Infrastructure Level 1 [role="arc42help"] **** -Describe (usually in a combination of diagrams, tables, and text): - -* distribution of a system to multiple locations, environments, computers, processors, .., as well as physical connections between them -* important justifications or motivations for this deployment structure -* quality and/or performance features of this infrastructure -* mapping of software artifacts to elements of this infrastructure - -For multiple environments or alternative deployments please copy and adapt this section of arc42 for all relevant environments. -**** - -_****_ +image::Diag_Comp.jpg[align="center",title="Deployment Diagram",link="Diag_Comp.jpg] Motivation:: -__ +The system is based in microservices architecture with three independent services, each responsible for a specific aspect of the functionality. One service is the Graphic interface, this service handles the presentation layer of a web application. Another service is tasked with managing user-related functionalities. MongoDB, a NoSQL database, is used to store and manage user data efficiently. The third service utilizes Wikidata, a free open base, to automatically generate questions. Quality and/or Performance Features:: -__ +The main reason we have chosen a microservices architecture is to achieve a fast and efficient application.. The availability and efficiency of the application will be affected by Wikidata's availability, but just in the question generation moment. Mapping of Building Blocks to Infrastructure:: -__ - - -=== Infrastructure Level 2 - -[role="arc42help"] -**** -Here you can include the internal structure of (some) infrastructure elements from level 1. - -Please copy the structure from level 1 for each selected element. -**** - -==== __ - -__ - -==== __ - -__ +[cols="1,2" options="header"] +|=== +| **Element** | **Description** +| _Browser_ | _The browser on the user's device where they can access to the application._ +| _WebApp_ | _The graphical interface through which users can interact._ +| _API Gateway_ | _The API that comunicates the rest of the microservices with the graphical interface._ +| _Question_Generator_ | _The microservice responsible for generating questions through Wikidata._ +| _Wikidata_ | _The Wikidata API that allows us to access its information._ +| _Users_ | _The microservice responsible for managing users._ +| _MongoDB_ | _A NoSQL based database where we can save the user's data._ +|=== -... -==== __ -__ From bc7957b4139492d4426dfd886f3ca8e67f229b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Fern=C3=A1ndez=20Azcoaga?= <124345225+AlbertoFAz@users.noreply.github.com> Date: Mon, 19 Feb 2024 06:25:29 +0100 Subject: [PATCH 45/45] Update 08_concepts.adoc --- docs/src/08_concepts.adoc | 58 ++++----------------------------------- 1 file changed, 6 insertions(+), 52 deletions(-) diff --git a/docs/src/08_concepts.adoc b/docs/src/08_concepts.adoc index 591ccf1f..9df6060e 100644 --- a/docs/src/08_concepts.adoc +++ b/docs/src/08_concepts.adoc @@ -6,65 +6,19 @@ ifndef::imagesdir[:imagesdir: ../images] [role="arc42help"] **** -.Content -This section describes overall, principal regulations and solution ideas that are relevant in multiple parts (= cross-cutting) of your system. -Such concepts are often related to multiple building blocks. -They can include many different topics, such as - -* models, especially domain models -* architecture or design patterns -* rules for using specific technology -* principal, often technical decisions of an overarching (= cross-cutting) nature -* implementation rules - - -.Motivation -Concepts form the basis for _conceptual integrity_ (consistency, homogeneity) of the architecture. -Thus, they are an important contribution to achieve inner qualities of your system. - -Some of these concepts cannot be assigned to individual building blocks, e.g. security or safety. - - -.Form -The form can be varied: - -* concept papers with any kind of structure -* cross-cutting model excerpts or scenarios using notations of the architecture views -* sample implementations, especially for technical concepts -* reference to typical usage of standard frameworks (e.g. using Hibernate for object/relational mapping) - -.Structure -A potential (but not mandatory) structure for this section could be: - -* Domain concepts -* User Experience concepts (UX) -* Safety and security concepts -* Architecture and design patterns -* "Under-the-hood" -* development concepts -* operational concepts - -Note: it might be difficult to assign individual concepts to one specific topic -on this list. - -image::08-Crosscutting-Concepts-Structure-EN.png["Possible topics for crosscutting concepts"] - - -.Further Information - -See https://docs.arc42.org/section-8/[Concepts] in the arc42 documentation. **** +=== _Domain Model_ -=== __ - -__ +_TBD_ +=== _Security_ +_The communication between the application's APIs will be through the secure mode of HTTP._ -=== __ +=== _Privacy_ -__ +_The user's data will be stored in a MongoDb database. That implies that the information is stored securely._ ...