Skip to content

Contrucción de API's para: registro de usuarios, autenticación(correo y contraseña), creación de posts, lista de posts, eliminar los post y agregar o quitar like a un post cuando el usuario esta autenticado

Notifications You must be signed in to change notification settings

Andu15/backend-hapi

Repository files navigation

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Backend HAPI

Introducción

Contrucción de API's para el registro de usuarios (dto: email, password y name), autenticación con correo y contraseña, creación de posts (dto: title, description, image, like) cuando el usuario esta autenticado, lista de posts(publico), eliminar los post de un usuario cuando el usuario esta autenticado (queda pendiente que le pertenezca el post) y agregar o quitar like a un post cuando el usuario esta autenticado

Importante

  • Puerto: 3000
  • Se ha creado una imagen a través de Docker
  • mongoDB como base de datos

Requisitos

  • Instalación de nestJS
  • Instalación de Passport
  • Instalación de JWT
  • Instalación de bcrypt

Pasos para crear este proyecto

  1. Preparar el entorno con el cli de NestJS npm i -g @nestjs/cli e iniciarlo con nest new <project-name> e iniciar el servidor con npm run start:dev

  2. Para la base de datos (mongoDB) se crea una imagen cuya configuración esta en el 📁 Dockerfile y luego se crea el archivo 📁 docker-compose.yml donde recopilaremos los servicios que levantaremos (para docker: nest-app en el puerto 3000 y para mongo en el puerto 27017). Luego configuramos y levantamos la imagen docker-compose up -d mongo;

  3. Para comprobar las collecciones de la base de datos, será con la ayuda de Robo 3T que ya debería estar instalado en el pc.

  4. Una vez que tengamos todo lo anterior, tenemos que empezar a estructurar nuestro proyecto, en este caso, dentro de src creare los directorios 🗂️ auth para todo el tema de login(autenticación), 🗂️ posts para almacenar los posts y sus métodos y un directorio 🗂️ users para almacenar los inputs de los nuevos usuarios.

  5. Luego nos enfocaremos en crear las subcarpetas y archivos que necesitamos para posts y users, en este caso sería en el sgte:

    • <name>.module.ts que actuara como el índice de cada API, aqui se importara los controllers, providers (o servicios), schemas, y todo lo relacionado o que se requiera en la construcción de la API.
    • <name>.dto.ts para saber el tipo de variables que se estaban compartiendo desde el frontend al backend
    • <name>.controller.ts que se encargan de recibir los requests(peticiones o solicitud del frontend al backend) de la aplicación, que almacenará los métodos y sus operaciones(get, post, patch, delete) y se encargara de validar los tipos, guardianes, decoradores, etc. y si todo es correcto se conectará a uno o varios servicios.
    • <name>.service.ts que esta relacionado con la base datos y sirve para inyectar su información y son algo que se suele usar desde varios modulos y con cada inyección tiene un constructor
    • <name>.schema.ts o llamada entidad, aqui especificamos los tipos de datos que recibiremos por parte del servicio, y es muy similar al dto del frontend
    • <name>.interface.ts o llamadas firmas, basicamente para definir los atributos y métodos de una «cosa», sin importar qué sea esa cosa, mejor dicho para definir tipos de clases sin distinguir entre ellas.
  6. Para el tema de autenticacion, usare Passport y JWT pero para evitar tener información sensible encriptaremos el password del user con bcrypt;

  7. Es importante crear un módulo indepeniente para auth con nest g mo modules/auth --flat y también necesito un guardian para proteger las peticiones y lo creo con nest g gu guard/apiKey --flat

  8. Dentro del archivo api-key.guards.ts configuro los Headers que va a recibir dentro del contexto del request, en este caso es necesario enviarle en el header los sgtes argumentos:
    email: permission@imhapi.app
    pwd: 1@hapi_challenge`
    con excepción de la API de listado de posts que es público

  9. Con la ayuda de @SetMetadata se crea el decorador @Public para crear una variable junto con su entorno y sus condicionales se encuentran en el archivo de api-key.guard.ts

  10. Se crean archivos con formato <name>.strategy.ts que convierte un grupo de comportamientos en objetos y los hace intercambiables dentro del objeto de contexto original

  11. Finalmente, hago uso de los guardinaes y estrategias para proteger ciertos métodos y su peticiones

Descripción de API's

  • API de registro de usuarios con los campos: correo, contraseña y nombre

    • Operación: Post
    • Para crear un registro, se manejará un endpoint http://localhost:3000/users
    • Recibirá 3 inputs: "name", "email" y "password"
  • API de autenticación con correo y contraseña

    • Operación: Post
    • Para crear un registro, se manejará un endpoint http://localhost:3000/auth/login
    • Aceptará 2 inputs(de los cuales debe haber un registro previo): "email" y "password"
    • De no existir un registro debe indicar "Not allow"
  • API de creación de posts con los campos de título, descripción e imagen estando el usuario ya autenticado

    • Operación: Post
    • Para crear un registro, se manejará un endpoint http://localhost:3000/posts
    • Aceptará 4 inputs: "title", "description", "image", "like" (boolean)
    • Dentro de Auth, debe indicar el token generado con JWT
    • En el header indicar: email: permission@imhapi.app
      pwd: 1@hapi_challenge`
  • API de listado de posts

    • Operación: Get
    • Para crear un registro, se manejará un endpoint http://localhost:3000/posts
    • Es publico, no necesita permisos
  • API para la eliminación de un post, en caso el mismo pertenezca al usuario autenticado

    • Operación: Delete
    • Para crear un registro, se manejará un endpoint http://localhost:3000/posts/:id
    • Dentro de Auth, debe indicar el token generado con JWT
    • En el header indicar: email: permission@imhapi.app
      pwd: 1@hapi_challenge`
    • OJO : Queda pendiente la condición de que el post le pertenezca para realizar la operación
  • API que permita, al usuario autenticado, votar o quitar el voto dado a un post

    • Operación: Patch
    • Para crear un registro, se manejará un endpoint http://localhost:3000/posts/:id
    • En el body, en formato JSON, indicar el valor de "like", solo acepta "true" o "false"
    • Dentro de Auth, debe indicar el token generado con JWT
    • En el header indicar: email: permission@imhapi.app
      pwd: 1@hapi_challenge`

Autor

[Andrea Blanco] (https://github.com/Andu15)

TimeLine

  • Inicio: Viernes 10/12/2021
  • Fin: Lunes 13/12/2021

About

Contrucción de API's para: registro de usuarios, autenticación(correo y contraseña), creación de posts, lista de posts, eliminar los post y agregar o quitar like a un post cuando el usuario esta autenticado

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published