Skip to content

Commit

Permalink
Merge pull request #236 from Arquisoft/Dario-Nueva
Browse files Browse the repository at this point in the history
Todo lo anterior en la nueva rama develop
  • Loading branch information
AnaOstio authored May 3, 2022
2 parents cf85581 + 5bff067 commit 6fc1085
Show file tree
Hide file tree
Showing 111 changed files with 5,799 additions and 1,919 deletions.
35 changes: 35 additions & 0 deletions .github/workflows/asw2122.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,23 @@ jobs:
- uses: actions/setup-node@v2
with:
node-version: 16
- name: Create env
run: |
cd restapi
touch .env
echo DATABASE_USER=${{ secrets.DATABASE_USER }} >> .env
echo DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }} >> .env
echo DATABASE_NAME=${{ secrets.DATABASE_NAME }} >> .env
echo JWT_TOKEN=${{ secrets.JWT_TOKEN }} >> .env
cat .env
- run: npm --prefix webapp install
- run: npm --prefix restapi install
- run: npm --prefix webapp run build
- run: npm --prefix webapp run test:e2e
docker-push-webapp:
name: Push webapp Docker Image to GitHub Packages
env:
REACT_APP_API_URI: http://${{ secrets.DEPLOY_HOST }}:5000
runs-on: ubuntu-latest
needs: [e2e-tests]
steps:
Expand All @@ -57,8 +68,14 @@ jobs:
password: ${{ secrets.DOCKER_PUSH_TOKEN }}
registry: ghcr.io
workdir: webapp
buildargs: REACT_APP_API_URI
docker-push-restapi:
name: Push restapi Docker Image to GitHub Packages
env:
DATABASE_USER: ${{ secrets.DB_USER }}
DATABASE_PASSWORD: ${{ secrets.DB_PASSWORD }}
DATABASE_NAME: ${{ secrets.DB_NAME }}
JWT_TOKEN: ${{ secrets.TOKEN }}
runs-on: ubuntu-latest
needs: [e2e-tests]
steps:
Expand All @@ -71,3 +88,21 @@ jobs:
password: ${{ secrets.DOCKER_PUSH_TOKEN }}
registry: ghcr.io
workdir: restapi
buildargs: DATABASE_USER,DATABASE_PASSWORD,DATABASE_NAME,JWT_TOKEN
deploy:
name: Deploy over SSH
runs-on: ubuntu-latest
needs: [docker-push-restapi,docker-push-webapp]
steps:
- name: Deploy over SSH
uses: fifsky/ssh-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
user: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_KEY }}
command: |
wget https://raw.githubusercontent.com/Arquisoft/dede_es2c/Dario-Nueva/docker-compose-deploy.yaml -O docker-compose.yml
docker-compose stop
docker-compose rm -f
docker-compose pull
docker-compose up -d
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# dede_es2c

[![Actions Status](https://github.com/arquisoft/dede_0/workflows/CI%20for%20ASW2122/badge.svg)](https://github.com/arquisoft/dede_0/actions)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_dede_0&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Arquisoft_dede_0)
[![codecov](https://codecov.io/gh/arquisoft/dede_0/branch/master/graph/badge.svg?token=VN4XG9NTRO)](https://codecov.io/gh/pglez82/asw2122_0)
[![Actions Status](https://github.com/Arquisoft/dede_es2c/actions/workflows/asw2122.yml/badge.svg)](https://github.com/Arquisoft/dede_es2c/actions/workflows/asw2122.yml)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_dede_es2c&metric=alert_status)](https://sonarcloud.io/summary/overall?id=Arquisoft_dede_es2c)
[![codecov](https://codecov.io/gh/arquisoft/dede_0/branch/master/graph/badge.svg?token=VN4XG9NTRO)](https://app.codecov.io/gh/Arquisoft/dede_es2c)

<p float="left">
<img src="https://blog.wildix.com/wp-content/uploads/2020/06/react-logo.jpg" height="100">
Expand Down
6 changes: 3 additions & 3 deletions README_es.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# asw2122_0

[![Actions Status](https://github.com/pglez82/asw2122_0/workflows/CI%20for%20ASW2122/badge.svg)](https://github.com/pglez82/asw2122_0/actions)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=pglez82_asw2122_0&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=pglez82_asw2122_0)
[![codecov](https://codecov.io/gh/pglez82/asw2122_0/branch/master/graph/badge.svg?token=VN4XG9NTRO)](https://codecov.io/gh/pglez82/asw2122_0)
[![Actions Status](https://github.com/Arquisoft/dede_es2c/actions/workflows/asw2122.yml/badge.svg)](https://github.com/Arquisoft/dede_es2c/actions/workflows/asw2122.yml)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_dede_es2c&metric=alert_status)](https://sonarcloud.io/summary/overall?id=Arquisoft_dede_es2c)
[![codecov](https://codecov.io/gh/arquisoft/dede_0/branch/master/graph/badge.svg?token=VN4XG9NTRO)](https://app.codecov.io/gh/Arquisoft/dede_es2c)

<p float="left">
<img src="https://blog.wildix.com/wp-content/uploads/2020/06/react-logo.jpg" height="100">
Expand Down
12 changes: 12 additions & 0 deletions docker-compose-deploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: '3.5'
services:
restapi:
image: ghcr.io/arquisoft/dede_es2c/restapi:latest
ports:
- "5000:5000"
webapp:
image: ghcr.io/arquisoft/dede_es2c/webapp:latest
ports:
- "3000:3000"
depends_on:
- restapi
12 changes: 0 additions & 12 deletions docker-compose-deploy.yml

This file was deleted.

21 changes: 8 additions & 13 deletions docs/01_introduction_and_goals.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ Estará centrada en la venta de productos informáticos de diferentes ámbitos (
Este sistema busca priorizar la privacidad de los clientes a través de los principios SOLID.
El sistema obtendrá la información de los clientes de los pods de los usuarios siempre que éstos den los permisos necesarios al sistema de venta.
Se distinguirá entre usuarios normales y adminstradores. Éstos pueden, además de acceder a la tienda, crear, modificar y eliminar los productos de la base de datos.
Los usuarios eligirán los productos que formarán parte de su carro de compra. Cada usuario tiene su propio carro individual.


=== Información general de los requisitos

A continuación se muestran los requisitos que se puedes encontrar en nuestra aplicación. Se dividen en obligatorios y opcionales

.Requisitos obligatorios

Expand All @@ -22,18 +24,9 @@ Se distinguirá entre usuarios normales y adminstradores. Éstos pueden, además

.Requisitos opcionales

* Los usuarios pueden tener más de una dirección de envío en sus pods (por ejemplo, en sus casas, universidad, …)
* Poner una estimación del tiempo en que la persona estará en un sitio y limitar algunas direcciones de ser usadas en la entrega fuera de esos horarios.
* Crear estaciones de recogida que algunos portadores emplearán. La estación de recogida se puede calcular de forma dinámica basándose en la dirección de la persona o en una posición que pille de camino al receptor.
* Se pueden usar APIs externas de diferentes portadores, para que los usuarios puedan establecer con cuál de los portadores desean realizar el pedido.
* Hacer que algunos usuarios con privilegios de administrador puedan ver estadísticas de productos solicitados y monitorizar el estado de los pedidos.
* Realizar el producto tanto en una aplicación web como una aplicación de móvil.
* Crear un emulador del sistema de envío que pueda notificar a los usuarios cuando los productos hayan llegado a su destino y poder seguir el proceso de envío.
* Tener diferentes roles como clientes o gestores que puedan realizar diferentes acciones como gestión de inventario, cambios de precios, quitar ítems del catálogo, etc.
* Incluir la posibilidad de que haya varios centros de distribución o almacenes en los que se encuentren almacenados los productos.
* Que los usuarios puedan añadir o actualizar la información de sus direcciones en sus pods a través de la aplicación.
* Permitir a los usuarios dar realimentación sobre su experiencia como puntuaciones y revisiones a los productos o los centros de distribución.
* Se deja abierta la opción de emplear más de una tecnología de despliegue.
* Rol de gestores que puedan realizar diferentes acciones como gestión de inventario, cambios de precios, quitar ítems del catálogo, etc.
* Se añade tambien una vista en el que el administrador pueda ver todos los pedidos que se han realizado.
* Un usuario puedde actuzalziar el nombre de este dentro de la aplicación


=== Objetivos de calidad
Expand All @@ -46,6 +39,7 @@ Se distinguirá entre usuarios normales y adminstradores. Éstos pueden, además
| Seguridad | El usuario debe tener la certeza de que su información personal esté segura para ganar su confianza | Alta
| Robustez | Se ha de manejar correctamente las excepciones para evitar que el usuario tenga una experiencia desagradable usando la aplicación | Alta
| Privacidad | Solamente el usuario debería tener acceso a su información privada, sin que haya terceras partes implicadas | Alta
| Transparencia | Todo lo que se haga en el proyecto permanecerá en un repositorio público para que otra gente lo pueda tener como referencia | Media
| Comodidad | La aplicación ha de ser fácil de manejar para gente no experimentada | Alta
|===

Expand All @@ -57,8 +51,9 @@ Se distinguirá entre usuarios normales y adminstradores. Éstos pueden, además
|Rol/Nombre|Expectations
| Equipo de desarrollo | Aprender a trabajar en equipo con gente que no conocen y familiarizarse con las tecnologías solicitadas en el curso
| Empresa de venta de productos (cliente) | Una aplicación funcional que satisfaga los requisitos solicitados, especialmente aquellos relacionados con la seguridad
| Cliente | Poder entrar a la aplicación para realizar las compras que desean de forma segura y cómoda
| Cliente | Poder entrar a la aplicación para realizar las compras que desean de forma segura y cómoda. Introducirán sus productos en un carro de la compra.
| Administrador | Tener el control de una aplicación robusta y eficiente que incluya la posiblidad de crear, modificar, eliminar productos, ver los usuarios y pedidos
| Inrupt/Empathy | Entidades colaboradoras del concurso SOLID en el que se puede presentar el proyecto desarrollado durante el curso
|===


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 @@ -7,7 +7,6 @@
| Restricción | Descripción
| Typescript | Nuevo lenguaje de programación para todos los integrantes del grupo.
| React | Libreria JavaScript requerido para construir interfaces de usuario para la web. Aplicación nueva que nunca usamos.
| Mongo | Se trata de una base de datos no relacional, la primera vez que trabajamos con una.
| SOLID | Principios y tecnologia que nos ayudará a organizar apps, al igual que react, tenemos que investigar sobre ello ya que es la primera vez que la usamos.
|===

Expand Down
56 changes: 53 additions & 3 deletions docs/08_concepts.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,55 @@

=== Modelo de dominio

image:08_Modelo_datos.png["Modelo de datos"]

----
object Product{
codigo: String
categoria: String
nombre: String
precio: Number
descripcion: String
stock: Number
url: String
}
object User{
name : String
surname: String
email : String
role : String
password: String
}
object Order{
codigo: String
correo: String
direccion: String
fecha: Date
precio Total: Number
products: Array
}
object Cart{
client_id: ObjectId
products: Array
}
object Review{
score: Number
comment: String
authorEmail: String
productCode: String
}
User *--> Cart
Cart *--> Order
User *--> Review
Order o--> Product
Product *--> Review
----

=== Internacionalización
La aplicación soportará el lenguaje español. En función del éxito que tenga el proyecto, puede que se plantee en un futuro incluir otros idiomas como inglés o francés.
Expand All @@ -25,7 +72,7 @@ Se incluirá el código necesario para manejar y capturar los errores procedente
Se seguirán unas convenciones mínimas de accesibilidad. En concreto, garantizamos que nuestra aplicación no tendrá combinación de colores que resulten dañinas a personas que sean daltónicas.

=== Manejo de sesión
Se manejarán las sesiones a través del uso de las APIs necesarias.
Se manejarán las sesiones a través del uso de tokens asignados a cada usuario registrado.

=== Estándares de código
El crear código limpio que siga unas estructuras y patrones definidos es base fundamental para crear código que se pueda actualizar en un futuro. Queremos garantizar crear una aplicación al nivel que se puede esperar de un equipo de formado por Ingenieros Informáticos del Software.
Expand All @@ -36,6 +83,9 @@ Uso de una base de datos MongoDB para gestionar la parte de almacenamiento y mod
=== Prototipado de la aplicación
El formato que se ha escogido para realizar los prototipos de la aplicacion es que esta sea fácil de usar y a la vez siga la forma del resto de aplicaciones del mismo tipo de esta.

=== Generación de pruebas
Consideramos fundamental el uso de pruebas unitarias para verificar el correcto funcionamiento de la aplicación.

Para comenzar tenemos la página inicial, esta estara compuesta por aquellos productos que tengan un descuento o sean top ventas de la aplicación.

image:08_HomePage.png["Página inicio"]
Expand Down
5 changes: 4 additions & 1 deletion docs/09_design_decisions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@ Las siguientes decisiones de diseño tomadas por el equipo de desarrollo, van or
| _Mongoose_ | _Facilita la conexion con la base de datos_ | _Nunca ha sido utilizado_ | https://github.com/Arquisoft/dede_es2c/wiki/00:-Decisiones-Arquitect%C3%B3nicas[DA #08]
| _Express_ | _Facilita el diseño la aplicación de forma sencilla y rápida_ | _Primera vez que se ha trabajado_ | https://github.com/Arquisoft/dede_es2c/wiki/00:-Decisiones-Arquitect%C3%B3nicas[DA #09]
| _NodeJS_| _Failita el trbajo a la hora de pedir datos a la base de datos_ | _Es necesario aprender como funciona este sistema_ | https://github.com/Arquisoft/dede_es2c/wiki/00:-Decisiones-Arquitect%C3%B3nicas[DA #10]
| _AWS_ | _Despliegue de la aplicación web en nube_| _Se necesita de una cuenta especifica y ademas ,poco conocimeiento sobre este_ | https://github.com/Arquisoft/dede_es2c/wiki/00:-Decisiones-Arquitect%C3%B3nicas[DA #11]
| _EasyPost_ | _Calculo de envio para la aplicación sencillo_ | _Puede producir errores, centro de distribución se situa en EEUU_ | https://github.com/Arquisoft/dede_es2c/wiki/00:-Decisiones-Arquitect%C3%B3nicas[DA #12]
| _JSON Web Token_ | _Guarda de forma correcta el usuario para controlar sus privilegios_ | _Puede generar fallos de seguridad_ | https://github.com/Arquisoft/dede_es2c/wiki/00:-Decisiones-Arquitect%C3%B3nicas[DA #13]
|===


Decisiones que todavia no se han llegado a decidir
Decisiones Denegadas
[options="header",cols="1,2,2,2"]
|===
| Decisiones | Ventajas | Desventajas | Link
Expand Down
7 changes: 6 additions & 1 deletion docs/11_technical_risks.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
.Riesgos Técnicos

* Falta de experiencia con las tecnologías, ya sea React, TypeScript o SOLID. Nunca hemos trabajado con estas tecnologías, por lo tanto, empezaremos desde cero y deberíamos realizar búsquedas de información constantes para conseguir manejarlas correctamente.
Para solucionarlo hemos buscado información del campo que nos ha sido asignado cada uno y hemos hecho pruebas de funcionalidad para paliar los máximos errores posibles.
* Posibles problemas al trabajar con GitHub. Pueden surgir problemas a la hora de subir nuestros cambios a GitHub e incluso modificar cambios ya realizados por otros compañeros, para reducir esto lo máximo posible, cada compañero trabajará en su rama y cuando se quiera realizar cambios al proyecto principal se hará un pull request para que otro miembro del equipo lo verifique.
* Primer proyecto web con un tamaño tan grande. Si bien hemos tenido algo de experiencia con proyectos web, nunca con estas dimensiones ni tecnologías. Para paliar este riesgo, deberíamos buscar bastante información sobre cómo llevarlo a cabo e intentar familiarizarnos con esta forma de trabajo lo antes posible.
* El tiempo. Tenemos poco tiempo para llevar a cabo los prototipos, entonces habrá que tenerlo en cuenta a la hora de desarrollar y llevar el proyecto lo más al día posible.
* Posibles vulnerabilidades en el proyecto web. Nunca nos han hablado de este tema en ninguna otra asignatura, por tanto, habrá que tenerlo en cuenta a la hora de desarrollar.
* Posibles vulnerabilidades en el proyecto web. Nunca nos han hablado de este tema en ninguna otra asignatura, por tanto, habrá que tenerlo en cuenta a la hora de desarrollar. Para mitigar este riesgo hemos tenido en cuenta algunos aspectos de seguridad, como el cifrado de contraseñas o un fichero con los datos más sensibles que utilizamos en el proyecto.

.Deudas Técnicas

Expand All @@ -16,3 +17,7 @@
* Almacenamiento de token de sesión en el localStorage, se podría guardar en un nuevo campo de la base de datos, ya que el localStorage es modificable desde el navegador
* Faltaría refactorizar parte del código del frontend para hacerlo más claro y modificable.
* Mejoras en la implementación del filtrado de productos en el apartado del listado de los mismos.
* Mal uso de los tipos de TypeScript en algunas ocasiones por falta de experiencia, por ejemplo, usar el tipo "any" en casos innecesarios
* Mostrar de una forma poco clara que se está accediendo a un servicio de terceros en el caso de los PODs de SOLID.
* El carrito del cliente se pierde, no se mantiene por las diferentes ventanas.
* Falta de mas pruebas sobre el código de front.
5 changes: 5 additions & 0 deletions docs/12_glossary.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,9 @@
| MongoDB | Sistema de base de datos NoSQL, orientado a documentos y de código abierto
| MongoDB Atlas | Sistema gestionador de base de datos que se encarga de toda la complejidad de la implementación, la gestión y la recuperación de sus implementaciones en el proveedor de servicios en la nube de su elección
| Mongoose | Biblioteca de JavaScript que le permite definir esquemas con datos fuertemente tipados
| AWS | Amazon Web Services es una colección de servicios de computación en la nube pública que en conjunto forman una plataforma de computación en la nube, ofrecidas a través de Internet por Amazon.com
| EasyPost | API de envío para poder calcular los costes dentro de nuestra aplicación
| JSON Web Token | Estándar abierto basado en JSON propuesto por IETF para la creación de tokens de acceso que permiten la propagación de identidad y privilegios o claims en inglés
| Jest | Librería abierta para pruebas en JavaScript desarrollada por Facebook
| Scala | Lenguaje de programación multi-paradigma diseñado para expresar patrones comunes de programación en forma concisa, elegante y con tipos seguros. Integra sutilmente características de lenguajes funcionales y orientados a objetos
|===
Loading

0 comments on commit 6fc1085

Please sign in to comment.