Skip to content

Commit

Permalink
Merge pull request #266 from Arquisoft/develop
Browse files Browse the repository at this point in the history
docs: actualizada documentacion
  • Loading branch information
UO271572 authored Apr 12, 2023
2 parents 4154478 + 4a8425b commit b11199e
Show file tree
Hide file tree
Showing 146 changed files with 5,212 additions and 939 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/lomap_es5a.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm --prefix webapp ci
- run: npm --prefix webapp install --legacy-peer-deps
- run: npm --prefix webapp run build
#- run: npm --prefix webapp run test
- run: npm --prefix restapi ci
- run: npm --prefix webapp test --coverage --watchAll --verbose
#- run: npm --prefix webapp test --coverage --watchAll --verbose
- run: npm --prefix restapi test --coverage --watchAll
- name: Analyze with SonarCloud
uses: sonarsource/sonarcloud-github-action@master
Expand Down
1 change: 0 additions & 1 deletion docs/02_architecture_constraints.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
| Librerías externas | Para facilitar el trabajo y poder llegar a los plazos de entrega, se tiene el riesgo de utilizar librerías que realicen ciertas funcionalidades con el riesgo que conlleva. En principio el uso de estas librerias facilitarán el desarrollo del proyecto pero si algun modulo de dependencias falla podria ocasionar daños en nuestra aplicación.
| Node JS | Para el back end se utilizará Node JS.
| Firebase Cloud Storage | Con el objetivo de que la aplicación pueda mostrar imágenes de las ubicaciones, se utilizará el servicio Firebase Cloud Storage para almacenar el contenido multimedia.
| MongoDB | Por otro lado, para almacenar el resto de la información necesaria que no se almacene en los pod de usuario ni en Firebase Cloud Storage, se hará uso de una base de datos MongoDB.
| GitHub | GitHub será el controlador de versiones que emplearemos durante el proceso de desarrollo.
| Jest | Con el fin de poder probar la funcionalidad de la aplicación se utilizará la librería de pruebas Jest.
| React Leaflet | Para poder implementar la funcionalidad del mapa se hará uso de la librería React Leaflet.
Expand Down
3 changes: 0 additions & 3 deletions docs/04_solution_strategy.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@
|Docker
|Docker es una herramienta que facilita la creación, implementación y ejecución de aplicaciones mediante el uso de contenedores. Los contenedores permiten empaquetar una aplicación con todas las partes que necesita, como bibliotecas y otras dependencias, y desplegarla como un solo paquete.

|MongoDB
|Sistema gestor de bases de datos NoSQL, orientado a documentos. Almacena estructuras de datos BSON (similar a JSON) haciendo que la integración de los datos en ciertas aplicaciones sea más sencilla y rápida.

|Firebase Cloud Storage
|Servicio empleado para almacenar contenido generado por los usuarios, por ejemplo, imágenes y vídeos.

Expand Down
72 changes: 57 additions & 15 deletions docs/05_building_block_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@
----
actor Usuario
Component LoMap
Component pod as "Inrupt/Proveedor POD"
Component pod as "inrupt.net/solidcommunity.net"
Usuario -right-> LoMap: interactúa
LoMap <-right-> pod: obtiene datos Usuario
Usuario -right-> pod: tiene
LoMap <-right-> pod: obtiene/almacena datos Usuario
----

Motivation::
LoMap es la estructura principal de un sistema en el que el usuario interactúa con su mapa, personalizándolo con los lugares que le interesan.
LoMap es la estructura principal de un sistema en el que el usuario interactúa con su mapa, personalizándolo con los lugares que le interesan.
Además, el usuario puede añadir a sus amigos a la aplicación y compartir con ellos sus marcadores.
La información personal del usuario se almacena de forma descentralizada en PODs.

Contained Building Blocks::
Expand All @@ -26,27 +27,25 @@ Contained Building Blocks::
|===
| **Nombre** | **Responsabildad**
| Usuario | Interactúa con la aplicación.
| LoMap | Sistema con el que interactúa el usuario. Se comunica con el proveedor de PODs para obtener la información necesaria del usuario.
| Inrupt/Proveedor POD | Sistema encargado de almacenar la información de cada usuario en un POD de forma descentralizada.
| LoMap | Sistema con el que interactúa el usuario. Se comunica con el proveedor de PODs para obtener/almacenar información del usuario.
| inrupt.net/solidcommunity.net | Sistema encargado de almacenar la información de cada usuario en un POD de forma descentralizada.
|===

=== Level 1

[plantuml, "level-2", png]
[plantuml, "level-1", png]
----
actor Usuario
Component LoMap {
Component web as "WebApp"
Component api as "RestAPI"
}
Database db as "MongoDB"
Component pod as "Inrupt"
Component pod as "inrupt.net/solidcommunity.net"
Usuario -right-> web: interactua
web <-right-> api: envia peticiones
api <-down-> db: almacena/recupera datos
Usuario -right-> pod: tiene
LoMap <-down-> pod: obtiene datos
web <-down-> pod: obtiene/almacena datos
----

Motivation::
Expand All @@ -57,8 +56,51 @@ Contained Building Blocks::
[cols="1,2" options="header"]
|===
| **Nombre** | **Responsabildad**
| WebApp | Parte del sistema con la que interactúa el usuario (Frontend).
| ResAPI | Parte del sistema encargada de llevar a cabo las acciones indicadas por el usuario. Se comunica con la WebApp y con MongoDB (Backend).
| MongoDB | Base de datos empleada para almacenar la información no personal de los usuarios.
| WebApp | Parte del sistema con la que interactúa el usuario (Frontend). Además, es la parte encargada de comunicarse con los pods de los usuarios.
| RestApi | En principio, no se va a emplear.
|===

=== Level 2
[plantuml, "level-2", png]

----
actor user as "Usuario"
Component LoMap{
Component web as "WebApp" {
Component lo as "Log in"
Component ini as "Inicio"
Component ed as "Editar punto"
Component det as "Detalle punto"
Component am as "Amigos"
Component gua as "Puntos guardados"
Component mi as "Mis puntos"
}
Component api as "RestApi "
}
Database pod as "Solid pod"
web <-left- user: interactua
user -up-> pod: tiene
web -down-> pod: obtiene/almacena datos
----

Motivation::
Muestra como funcionan los distintos componentes de LoMap, con mas detalle que el nivel anterior. Se profundiza en los distintos componentes de la aplicación que forman parte de WebApp.

Contained Building Blocks::

[cols="1,2" options="header"]
|===
| **Nombre** | **Responsabildad**
| Log in | Parte del sistema encargada de redirigir al usuario al proveedor Solid seleccionado para llevar a cabo su autenticación.
| Inicio | Muestra un mapa en el que se sitúan los puntos almacenados del usuario, así como los compartidos por sus amigos, si así lo desea. Permite filtrar los puntos a mostrar por su categoría.
| Editar punto | Permite al usuario en sesión editar sus puntos.
| Detalle punto | Permite al usuario ver en detalle toda la información almacenada acerca de un punto dado.
| Amigos | Permite al usuario llevar a cabo la gestión de sus amigos (añadirlos/eliminarlos).
| Puntos guardados | Permite al usuario interactuar con los puntos que ha decidido guardar.
| Mis puntos | Permite al usuario interactuar con los puntos que él/ella ha creado.
|===


13 changes: 0 additions & 13 deletions docs/07_deployment_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,6 @@ Mapping of Building Blocks to Infrastructure::
:imagesdir: images
image::DIAGRAMA_DESPLIEGUE_extended_v2_LOMAP.svg[]

Motivation::

El desplieque de la aplicación está orientado para ser integrado en un entorno de integración continua (CI/CD), con el propósito de tener en producción el producto desde el primer día. Para ello, se ha decidido, en base al entorno de pruebas proporcionado, utilizar los contenedores de Docker para empaquetar los respectivos lados de la aplicación (Cliente y servidor). Los contenedores, se albergan en una máquina virtual de Azure.

Quality and/or Performance Features::

El uso de docker para crear un entorno de ejecución virtual, hace que el proceso de despliegue sea más ligero y por ende, se obtenga un mayor rendimiento. Se consigue gracias a trabajar con una imagen de NodeJS (Oficial), que garantiza un entorno estable y listo para ejecutar.

El desarrollo de la webapp utilizando React hace que el tiempo de carga de las páginas sea más rápido (Sin tener en cuenta otros factores, como peticiones a APIs externas como Leaflet).

El almacenamiento de las imágenes de la aplicación (Puntos, avatares, etc.) se realiza en Firebase, que es un servicio de almacenamiento de recursos multimedia, que ofrece un rendimiento y escalabilidad muy alto.

Por último, la integración de la API de Leaflet facilita el desarrollo del producto, ya que es un proyecto mantenido con frecuencia y de código abierto.

Mapping of Building Blocks to Infrastructure::

Expand Down
93 changes: 58 additions & 35 deletions docs/08_concepts.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,52 +7,75 @@
[plantuml, "ModeloDeDominio", png]
----
object Persona{
id:String
role:String
verified:boolean
object Point{
idPoint: String
name: String
description: String
location: BaseLocation
owner: User
reviews: Review[]
image: String
isPublic: Boolean
category: Category
createdAt: Date
updatedAt: Date
}
object Grupo{
id:String
persons:Person[]
object Map{
code: String
points: Point[]
}
object Punto{
webId:String
idPoint:String
name:String
description:String
lat:number
lng:number
category:String
address:String
opinions:Opinion[]
likes:String[]
object Review{
id: String
reviewer: User
rating: Number
comment: String
createdAt: Date
}
object Mapa{
code:String
point: Punto[]
object User{
id: String
name: String
webId: String
email: String
image: String
}
object Opinion{
id:String
webId:String
description:String
note : number
object BaseLocation{
coords: number[2]
address: string
postalCode: number
city: string
country : string
}
object Imagen{
url:String
enum Category{
RESTAURANT
BAR
CAFE
HOTEL
GROCERY
SUPERMARKET
CINEMA
SHOP
MUSEUM
PARK
GAS_STATION
PUBLIC_TRANSPORT
MONUMENT
OTHER
NONE
}
Opinion *--->Persona
Opinion *--->Punto
Punto *--->Mapa
Mapa *--->Persona
Grupo *---> Persona
Persona *--->Imagen
Mapa *--->Imagen
Map*-->Point
Point*-->Review
Point--->User
Review--->User
Point--->BaseLocation
Point--->Category
----
=== Security

Expand Down
16 changes: 10 additions & 6 deletions docs/09_design_decisions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Estas son las decisiones que en grupo hemos tomado para nuestra aplicación:
|SOLID
|Organiza de forma descentralizada
|Dificil de utilizar
|https://github.com/Arquisoft/lomap_es5a/wiki/ADR.-Estructura-Cliente-%5BFront-End%5D[ADR 03]
|https://github.com/Arquisoft/lomap_es5a/wiki/ADR.-Estructura-Cliente-v3-%5BFront-End%5D[ADR 18]

|NodeJS
|Se integra con solid, contiene muchas librerias probadas y verificadas, creación de APIs mas sencilla.
Expand All @@ -48,10 +48,10 @@ Estas son las decisiones que en grupo hemos tomado para nuestra aplicación:
|A veces da bastantes problemas
|https://github.com/Arquisoft/lomap_es5a/wiki/ADR.-Despliegue-Aplicaci%C3%B3n-%5BCI-CD%5D[ADR 06]

|MongoDB y Firebase Cloud Storage
| Integración dentro del stack MERN, su capacidad de almacenamiento, facilidad para el despliegue
| Al ser no relacional, es mas fácil duplicar documentos, y al ser NoSQL mas dificultado al principio para usarla
|https://github.com/Arquisoft/lomap_es5a/wiki/ADR.-Cambio-a-base-de-datos-MongoDB[ADR 12]
|Firebase Cloud Storage
|Gran velocidad de desarrollo, y no necesidad de servidor
|Principiantes con ella
|https://github.com/Arquisoft/lomap_es5a/wiki/ADR.--Base-de-datos-para-imagenes[ADR 19]

|Visual Studio Code
|Muy facil de usar, experiencia con el, y disponible en muchos sistemas operativos.
Expand All @@ -62,8 +62,12 @@ Estas son las decisiones que en grupo hemos tomado para nuestra aplicación:
|Buena documentación y recursos, paralización de test y facil configuración.
|No tenemos conocimiento con esta libreria
|https://github.com/Arquisoft/lomap_es5a/wiki/ADR.-Tests-Back-End[ADR 10]

https://github.com/Arquisoft/lomap_es5a/wiki/ADR.-Test-Front-End[ADR 11]

|Zustand
|Ofrece mayor rendimiento por la sencillez de su implementación
|No sigue un patrón, la estructura es libre para el desarrollador
|https://github.com/Arquisoft/lomap_es5a/wiki/ADR.-Gesti%C3%B3n-de-estados-(Front-End)[ADR 17]
|===


Expand Down
72 changes: 72 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit b11199e

Please sign in to comment.