Skip to content
This repository has been archived by the owner on Aug 23, 2021. It is now read-only.

Este repositorio, es una posible solución al desafío de javascript propuesto por la aceleradora Alkemy.

License

Notifications You must be signed in to change notification settings

PeterDamianG/challengejs-alkemy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ChallengeJS Alkemy


Tabla de Contenido - Index

  1. ¿Qué es esto?
  2. Instalar y Correr la Aplicación
  3. Scripts Disponibles de este contenedor
  4. Explicación en Profundidad
  5. Resumen Explicativo en Video, Continuación del Desafío
  6. Imagenes del Proyecto
  7. Bugs
  8. Licencia

¿Qué es esto?

En el marco de el desafío "Challenge JS" sobre Javascript propuesto por Alkemy. Este es un contenedor/workspace para la APP, la API y pruebas e2e.

Alkemy - - - Alkemy Challenges

El desafío elegido es el de "Challenge JS", que puede observarse en la web de challenges o también en el siguiente archivo PDF:

ChallengeJS - PDF


Instalar y Correr la Aplicación

  1. En tu consola favorita coloca:

git clone https://github.com/PeterDamianG/challengejs-alkemy.git

  1. En el lugar donde lo hayas descargado, nos movemos al directorio:

cd challengejs-alkemy

  1. El siguiente paso consiste en instalar todas las dependencias del desarrollo:

npm run install-all

Anotación: Usando el sistema de workspace, todas las dependencias serán instalas juntas. Y además se pasará una bandera --legacy-peer-deps, para evitar problemas conocidos con NPM versión 7, es necesario tener la misma o superior. También el comando iniciara automaticamente, nuestro ORM Prisma.

  1. Ahora necesitamos configurar el entorno, tanto para el backend como el frontend. Tienes dos opciones:

4.1 - Manualmente ir a la carpeta de "frontend" y la de "backend". En ambas observaras un archivo .env.example. Tienes que borrar la extensión .example y que el archivo quede como .env con ese bastaría.

4.2 - Automaticamente con el siguiente comando, podría no funcionar en todos los sistemas operativos. (No funcionara en una Mac - Apple):

npm run fix-env

Nota: Es recomendable entender para que sirven los archivos de entorno .env

  1. El siguiente paso consiste en construir la aplicación de React, que servira de frontend. Con el siguiente comando:

npm run build-app

  1. El último paso es levantar nuestra API, en modo de desarrollo:

npm run start-dev

La aplicación comenzara a funcionar en LocalHost.


Scripts Disponibles de este contenedor

npm run prisma

Se encarga de inicializar el ORM Prisma Es para uso interno, no debería ser necesario su llamado individual.

npm run install-all

Se encarga de instalar todas las dependencias de la APP (FronEnd), API (BackEnd) y Cypress de este contenedor. Es el comando que engloba todas las llamadas de instalación con el flag --legacy-peer-deps e inicialización del ORM Prisma, es el que se debería usar normalmente.

npm run fix-env-api

Se encarga de reemplazar el nombre del archivo de entorno en la API. Es para uso interno, no debería ser necesario su llamado individual.

npm run fix-env-app

Se encarga de reemplazar el nombre del archivo de entorno en la APP. Es para uso interno, no debería ser necesario su llamado individual.

npm run fix-env

Se encarga de llamar los comandos que reemplazan los archivos de entorno. Es el comando que se debería usar normalmente.

npm run build-app

Se encarga de construir la aplicación en React, sí vas a iniciar la aplicación desde el paquete workspace de este proyecto. Deberías usar este comando para construirla, pero no difiere de usar el comando original que se encuentra en el desarrollo del FrontEnd.

npm run start o npm start

Se levantara la API, que servira los estáticos generados con React. Usará el modo de producción de Node, Prisma y la base de datos SQLite también será la de producción. Estando en este modo, todo estara optimizado, pero el mal manejo de la base de datos puede generar grandes daños.

npm run start-dev

Se levantara la API, que servira los estáticos generados con React. Usará el modo de desarrollo de Node, Prisma y la base de datos SQLite también será la de desarrollo. Básicamente usalo para el desarrollo.

npm run start-test

Se levantara la API, que servira los estáticos generados con React. Usará el modo de pruebas de Node, Prisma y la base de datos SQLite también será la de pruebas. El uso recomendado es con Cypress. También se utiliza para las pruebas en el BackEnd (Las usará el por sí mismo, no necesitaras levatar este comando).

npm run cypress

Levantara el test-runner de Cypress en modo con cabecera. Es necesario que algunos de los "start", estén actualmente corriendo. En caso de no ser la base de datos de pruebas, puede haber errores.


Aclaración: Los comandos mencionados previamente, sólo se constituyen a este parte del proyecto. El BackEnd y FrontEnd, respectivamente tienen sus propios comandos para funciones internas y externas. Como linters, pruebas, generar documentación y levantarse.


Explicación en Profundidad

Este proyecto está constituido por dos partes principales y su contenedor.

El FrontEnd, construido con React. Que puede funcionar independientemente haciendo llamadas a una API. Puedes observar todo su desarrollo independiente en el folder "frontend".

El BackEnd, construido en Express. Que puede funcionar independiente proveyendo una API para que clientes usen, con un estilo similar a una API REST. Puedes observar todo su desarrollo independiente en el folder "backend".

Y por último este paquete contenedor, que se encargara de funcionar como un WorkSpace. Aprovechando su condición de empaquetador/contenedor/workspace, también se utiliza para realizar las pruebas end to end.


Resumen Explicativo en Video, Continuación del Desafío

Link To Video

Image Video


Imagenes del Proyecto

Home Logout Login Home Logged Menu Drawer List Record Create Record Edit/Remove Record


Bugs - Errores y Problemas

Los Workspaces, son una tecnología relativamente nueva a la fecha. Se ha optado por usar está, para este proyecto y no los "submodules". En consecuencia, pueden ocurrir problemas de dependencias cruzadas y rutas relacionadas.

En algunos casos, quedan resueltos con la instalación pasandole el flag --legacy-peer-deps en otros el --force, aunque acarrean problemas internos de compleja resolución. Más que nada porque corresponden a la versión 7 de NPM y escapa a nuestras capacidades.


Aclaración pertinente

No se pretende, realizar un proyecto listo para producción en optima condición, donde haya un coverage de testing de alto porcentaje. Un uso extensivo y profundo de carácteristicas de React como useMemo, useCallback y React.Memo, más que lo mínimo necesario. Y tampoco el uso de la API Profiler.

El objectivo es generar un MVP, un Producto Mínimo Viable que sirva como demostración.


Licencia

Licencia Github

About

Este repositorio, es una posible solución al desafío de javascript propuesto por la aceleradora Alkemy.

Resources

License

Stars

Watchers

Forks

Languages