- Requerimentos Code Challenge
- Creación del proyecto
- Dependencias usadas crear el proyecto
- Estructura de directorio de App
- Archivos
app
- Archivos
test
- Archivo
data.json
- Diseño de todos los componentes de la app
- Archivo
server.js
- Ejemplo (server)
- Como clonar Repo y correrlo de manera local
- Habilitar un endpoint para consultar todos los estudiantes con todos sus campos.
- Habilitar un endpoint para consultar los emails de todos los estudiantes que tengan certificación
haveCertification
. - Habilitar un endpoint para consultar todos los estudiantes que tengan
credits
mayor a 500.
npm init -y
Jest 28.0.3
: Dependencia Jest para Pruebas de unidad, eso permitirá validar el correcto funcionamiento de los diferentes módulos en la aplicación, se inicia con elnpm install --save-dev jest
y se añade alpackage.json
los scripts necesarios.Express 4.18.1
: Express lo utilizamos para crear la aplicación y poder correrla en el entorno NODE.JS con un servidor enlocalhost
para integrar nuestros módulos y que sean funcionales.ESLint 8.14.0
: La herramienta Linter la utilizamos para ayudarnos a cuidar la legibilidad en nuestro código y estilizarla de la mejor manera.test.yml
: Automatización de Pruebas de Unidad paraGitHub Actions
, el cual genera una acción para indicarnos si todo está correcto en nuestro código.
graph TD;
CodeChallengeApp-->app-->utils;
app-->controllers;
app-->services;
CodeChallengeApp-->test-->controllers-test;
test-->services-test;
Separamos los directorios para tener una estructura, separar las responsabilidades, los cuales estructuramos de la siguiente forma:
- Carpeta
utils
: Aquí tenemos un archivoReader.js
con una clase auxiliarfs
en el cual se crea la claseReader
que inspecciona eldata.json
y lo exporta para su uso.
classDiagram
class Reader
Reader : +readJsonFile(path)
- Carpeta
services
: Tenemos un archivostudentService.js
en el cual se crea una clase llamadaStudentService
para realizar toda la lógica que se necesita y exportala, alli creamos métodos estáticos para los requerimientos, los cuales son:static getAllStudents(students)
- Con este método retornamos la lista de los estudiantes del archivodata.json
.static getEmailOfStudentWithCertification(students)
- Con este método retornamos la lista de los emails del archivodata.json
para aquellos estudiantes que tengan certificación.static validationOfCredits(students, credits)
- Con este método retornamos la lista de los estudiantes del archivodata.json
para aquellos que tengan creditos igual o mayores a 500, de lo contrario retorna un error.
classDiagram
class StudentService
StudentService : +static getAllStudents(students)
StudentService : +static getEmailOfStudentWithCertification(students)
StudentService : +static validationOfCredits(students, credits)
- Carpeta
controllers
: En esta carpeta tenemos un archivostudentController.js
para uso de exclusivo deStudentService
, se crea en el archivo una clase llamadaStudentController
en el cual se crea metodos estáticos para conectar el API y el Servidor, importamos las clasesReader
yStudentService
, además de exportar el módulo. Los métodos creados son los siguientes:static getAllStudents()
- Con este método retornamos la lista de los estudiantes del archivodata.json
.static getEmailOfStudentWithCertification()
- Con este método conectamos el archivodata.json
constudentService
para los estudiantes que tengan certificación.static validationOfCredits(credits)
- Con este método conectamos el archivodata.json
constudentService
para los estudiantes con creditos.
classDiagram
class StudentController
StudentController : +static getAllStudents()
StudentController : +static getEmailOfStudentWithCertification()
StudentController : +static validationOfCredits(credits)
- Carpeta
services
: Tenemos un archivostudentService.test.js
con 3 pruebas que validan el requerimiento.- Prueba 1 - Se reciben datos de todos los estudiantes con
getAllStudents()
. - Prueba 2 - Se reciben datos de los estudiantes con certificacion con
getEmailOfStudentWithCertification()
. - Prueba 3 - Se reciben datos de los estudiantes con creditos
validationOfCredits(credits)
.
- Prueba 1 - Se reciben datos de todos los estudiantes con
- Carpeta
controllers
: En esta carpeta tenemos un archivostudentController.test.js
con pruebas que validan los datos recibidos desde el archivoJSON
y serán los que recibirá elServer
.- Prueba 1 - Se reciben datos de todos los estudiantes con
getAllStudents()
. - Prueba 2 - Se reciben datos de los estudiantes con certificacion con
getEmailOfStudentWithCertification()
. - Prueba 3 - Se reciben solo los datos de los estudiantes con creditos iguales o mayores a 500 con creditos
validationOfCredits(credits)
.
- Prueba 1 - Se reciben datos de todos los estudiantes con
- La db en el archivo
data.json
se tomo de la lista de estudiantes de Visual Partner-Ship
graph TD;
data.JSON-.->Reader;
Reader-->StudentController;
StudentService<-->StudentController;
StudentController-->Server-->API
- En el archivo se crea el servidor con Express, en el cual se crean los endpoints para los diferentes requerimientos, con `app.get`.
Endpoint | Request | Response |
---|---|---|
localhost:3000/v1/students |
localhost:3000/v1/students |
Deberás obtener la lista de estudiantes de Visual Partners |
localhost:3000/v1/students/certified |
localhost:3000/v1/students/certified |
Se obtienen los emails de los estudiantes que tienen certificacion |
localhost:3000/v1/students/credits/:credits |
localhost:3000/v1/students/credits/500 |
Deberás obtener la lista de usernames con mas de 500 creditos |
- Primero debes ubicarte en la página principal del repositorio CodeChallenge.
- Al estar en la página principal del Repositorio debes ubicarte en Clone y copiar el link de acceso al repo:
- Posteriormente debes abrir la linea de comandos Git Bash e ingresar el comando y el link al repo
git clone https://github.com/OmarVenturaP/CodeChallengeApp
- Una vez clonado el repo de manera local, debes instalar las dependencias necesarias dentro de este proyecto, para ello ejecuta:
npm install
- Posteriormente ejecuta el servidor para validar su correcto funcionamiento:
node app/server.js
- Para que puedas validar los datos enviados por el servidor puedes seguir los pasos aqui recomendados.