Skip to content

richirrim/code_challenge

Repository files navigation

CODE CHALLENGE

Mission Backend JS By MC @carlogilmar_

Práctica 3 | Semana 4

Desarollo de una API que permita consultar datos sobre los estudiantes de Visual Partner-Ship.

Requerimientos:

  • 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.
flowchart LR
  id1(JSON) -.- Reader -.- StudentService -.- 
  StudentController <-.-> id2[fa:fa-server server] -.- 
  A[API] 
  A -.- B["'/students'" GET]
  A -.- C["'/students/emails'" GET]
  A -.- D["'/students/credits'" GET]

  style id1 fill:#90caf9,stroke:#2979ff,stroke-width:3px,color:#2962ff

Caracteristicas

Este proyecto fue contruido pensando en la separación de responsabilidades, TDD y Style Guide para crear un código consistente y escalable.

  • Node JS + Express
  • TDD: Jest + supertest
  • ESLint + StandardJS
  • ES6 Imports
  • Git

Dependecias

"devDependencies": {
    "@babel/preset-env": "^7.17.10",
    "babel-jest": "^28.0.3",
    "eslint": "^8.14.0",
    "eslint-config-standard": "^17.0.0",
    "eslint-plugin-import": "^2.26.0",
    "eslint-plugin-n": "^15.2.0",
    "eslint-plugin-promise": "^6.0.0",
    "jest": "^28.0.3",
    "supertest": "^6.2.3"
  }

Como el nombre indica, estas son todas las dependencias de las cuales depende este proyecto para ejecutarse de forma correcta en local.

Babel
"@babel/preset-env": "^7.17.10",
"babel-jest": "^28.0.3",

Estas dependencias de desarrollo permiten usar características de ES6 dentro de los archivos de pruebas unitarias con Jest.

ESLint
"eslint": "^8.14.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-n": "^15.2.0",
"eslint-plugin-promise": "^6.0.0",

ESLint te indica rápidamente errores de sintaxis de forma clara y así mismo nos ofrece un flag para corregir dichas inconsistencias automática o manualmente, si no, logra solucionarlas por su cuenta.

Permite trabajar con un código más limpio y consistente, usando una guía de estilo.

Jest
"jest": "^28.0.3",
"supertest": "^6.2.3"

Jest y supertest son dependencias que no permitirán crear pruebas unitarias.

  • jest: permitirá generar pruebas para la lógica de negocio.
  • supertest: permitirá hacer pruebas a las rutas de la  API.

Diseño de los componentes

⚠️ Doc en construcción...

API

Esta es una API consumption-only, es decir, que solo podrás usarla para consultar datos a través del método GET. Esta API te permite consultar la sig. Información de todos los estudiantes de Visual Partner-Ship.

Puedes consultar:

  • Una lista de Estudiantes.
  • Una lista de Emails de estudiantes con certificación.
  • Una lista de los estudiantes con créditos mayores que 500.

Ojo👀: Todo los devuelto por esta API siempre seran en formato JSON.

API ENDPOINTS

GET localhost:3000/students

No necesitas pasarle ningún otro parámetro. Este endpoint devolverá una lista de objetos con toda la información de cada unos de los estudiantes de Visual Partner-Ship.

[
  {
    "id": "6264d5d89f1df827eb84bb23",
    "name": "Warren",
    "email": "Todd@visualpartnership.xyz",
    "credits": 508,
    "enrollments": [
      "Visual Thinking Intermedio",
      "Visual Thinking Avanzado"
    ],
    "previousCourses": 1,
    "haveCertification": true
  },
  {
    "id": "6264d5d85cf81c496446b67f",
    "name": "Lucinda",
    "email": "Sexton@visualpartnership.xyz",
    "credits": 677,
    "enrollments": [
      "Visual Thinking Avanzado"
    ],
    "previousCourses": 6,
    "haveCertification": true
  },...

GET localhost:3000/students/emails

No necesitas pasarle ningún otro parámetro. Este endpoint devolverá una lista de strings con los emails de aquellos estudiantes  de Visual Partner-Ship que tengan certificación.

[
  "Todd@visualpartnership.xyz",
  "Sexton@visualpartnership.xyz",
  "Sharlene@visualpartnership.xyz",
  ...
  "Shields@visualpartnership.xyz",
  "Jewell@visualpartnership.xyz",
  "Hays@visualpartnership.xyz"
]

GET localhost:3000/students/credits

No necesitas pasarle ningún otro parámetro. Este endpoint devolverá una lista de objetos de aquellos estudiantes de Visual Partner-Ship que tengan créditos mayores a 500.

[
    {
        "id": "6264d5d89f1df827eb84bb23",
        "name": "Warren",
        "email": "Todd@visualpartnership.xyz",
        "credits": 508,
        "enrollments": [
            "Visual Thinking Intermedio",
            "Visual Thinking Avanzado"
        ],
        "previousCourses": 1,
        "haveCertification": true
    },
    {
        "id": "6264d5d85cf81c496446b67f",
        "name": "Lucinda",
        "email": "Sexton@visualpartnership.xyz",
        "credits": 677,
        "enrollments": [
            "Visual Thinking Avanzado"
        ],
        "previousCourses": 6,
        "haveCertification": true
    },...

Estructura

  • 📂libs: contiene la estructura de archivos  con las que se construye toda la funcionalidad de la API.
    • 📂services: contiene toda la lógica de la aplicación.
    • 📂controllers: usa los métodos dentro de services para transformar la data devuelta por el Reader.js.
    • 📂utils: contiene la utilidad que permitirá obtener toda la data de un archivo json, ser parciarda y devolverla lista para ser utilizada por el controller.
      • 📄Reader.js
    • 📄server.js
  • 📂test: contiene las pruebas necesarias para asegurar que el código funciona como se espera.
    • 📂serivces: añade pruebas a cada module dentro de esta carpeta.
    • 📂utitls: añade pruebas a cada utilidad dentro de esta carpeta.
    • 📄server.test.js: añade pruebas con supertest para asegurar que lo que devuelve cada petición es lo que se espera.

About

API con Express + TDD con Jest & supertest + ES6 Modules + ESLint & Standard JS | Práctica 3 de la semana 4 | LaunchX

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published