Skip to content

Teddy7595/osiris_test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 

Repository files navigation

Acerca de la esturcutra el proyecto

---------------- Tecnologías usadas en el proyecto ----------------

NestJS (su última versión, julio 2021)

MongoDB (su última version, julio 2021)

TypeScript (su última versión, julio 2021)

En la raíz del workspace se encuentra el archivo OSIRIS_BACKEND.json que es el manifiesto de las rutas exportadas desde el programa "insomnia"

---------------- Estructura del backend ----------------

  • El backend se compone de "módulos" completamente individuales uno del otro
  • Cada módulo posee sus propios controladores, interfaces, servicios, schemas de bases de datos, DTOs y demás
  • Cada componente del módulo tiene un espacio de trabajo constituido por carpetas
  • Cada carpeta contiene un "indexador" que contiene registrado todo los archivos creados en dicho "espacio de trabajo"/carpeta
  • El módulo de base de datos, manejo de fechas, manejo de archivos y demás elementos casi globales estan presentes la carpeta de clases/servicios
  • Las respuestas "intersistemas" y de usuarios son manejadas por un grupo de interfaces localizados en la carpeta "Response"
  • Toda la arquitectura procura ser lo mas modular posible de esta forma el programador solo estará enfocado única y exclusivamente en el módulo donde esta "parado"
  • Si se requiere de un componente de otro módulo, para poder usarlo se requiere llevar todo el módulo en sí, ya que de esta forma se mantiene la intgridad y pulcritud de la arquitectura
  • Los métodoss para manejo de base de datos tienen la función de abstraer lo mas que se pueda la forma en que se maneja esta, con el propósito de solo cambiar lo necesario ante algún cambio de paradigma de bd, o sencillamente algún cambio en la forma de interactuar con la misma
  • La carpeta guards se encarga de establecer las funciones de protección de rutas y estas solo manejan valores booleanos
  • La carpeta middleware contiene todos los middleware que prestan servicio en 2do plano al backend, tal como la paginación y cualquier otro servicio requerido mediante el request

---------------- Rutas de la API ----------------

Antes de continuar, se recomienta usar los formatos de petición mostrados ya que estos se basan en las interfaces y DTOs que componen la API


  • Todas las rutas tendrán una interfaz de respuesta compuestas por :
    responseInterface
    {
    ok //determina si la operación fue o no exitosa
    status //devuelve el codigo de respuesta de la API
    data //devuelve la data o vacio de ser exitoso o no la petición
    message //retorna el mensaje de respuesta de la API
    paginator //retorna el estatus de la paginación del servicio
    err //en caso de ocurrir algún error grave, dicha variable contendrá el mensaje con detalles del problema
    }
  • La mayoria de las rutas necesitan un autenticación ó token para poder gozar de las funciones de cada servicio
  • Para poder obtener el token solo necesita registrarse e iniciar sesión
  • Para poder ser admin solo debe incluir un dominio @admin.com en su usuario Ej: usuario@admin.com
  • Para poder tener un role de usuario registrado sin privilegios de administracion sólo deberá registrarse con el dominio de su preferencia Ej: usuario@gmail.com
  • El token de autenticación contiene los datos de usuario (excepto la contrasña)
  • Para usar el token si se usa "Insomnia" para prueba de APIS, en el apartado de de "Authentication" se escoge la verificacion Bearer, donde mostrará luego dos inputs; uno para introducir el token obtenido luego de iniciar sessión y el otro pedirá un "prefijo" que lo dejaremos en blanco
  • En caso de usar postman u otro, por favor revisar el manual de sus respectivos programas para poder usar dicho modo de autenticación
  • Aunque para evitar posibles problemas en la importación del manifiesto de rutas, recomiendo usar INSOMNIA https://insomnia.rest/download
  • Composición de rutas, todas las rutas devolverán un dato bajo el responseInterface
    • En el apartado de producto tenemos:

    • GET:
    • servidor/products/hello [solo verifica si la ruta esta disponible]
    • servidor/products/?paginate=x [retorna todos los productos registrados mediante un painador]
    • servidor/products/idProduct [retorna el producto especificado a través de si _id]
    • servidor/products/purchase/history/idUSer [retorna el historial de compra através del id del usuario]

    • POST:
    • servidor/products/ [guarda un producto en base de datos, se requiere de un nombre, stock, precio] Ej:
      { "name" :"TOMATES", "stock":12, "price": 1234.56 }
    • servidor/products/purchase [requiere un array de productos tomando su id, cantidad, y el id del usuario quien esta haciendo la compra] Ej:
      { "list": [ { "prod_id": "60f9b675061e5b1b43a6e0ad", "qnty": 10 } ], "user_id": "60f8a65f7cbaa65a8710d585" }
    • servidor/products/verify [requiere de un array de objetos con el id del producto y la cantidad para verificar la disponibilidad de los mismos] Ej:
      { "list": [ { "prod_id": "60f9b675061e5b1b43a6e0ad", "qnty": 10 } ] }
    • servidor/products/upload/idProduct [sube una foto y toma el id del producto a través del query de la ruta para su posterior enlace con el producto en base de datos]

    • PUT:
    • servidor/products/idProduct [requiere de un objeto con los datos del producto y el id del producto pasado por el query de la ruta] Ej:
      { "name" :"ZANAHORIAS", "stock":1200, "price": 898989.56 }

    • DELETE:
    • servidor/products/idProduct [requiere el id del producto pasado por el query de la ruta para borrar logicamente un producto de la bd]
    • En el apartado de usaurios tenemos:

    • GET:
    • servidor/users/hello [solo verifica si la ruta esta disponible]
    • servidor/users/?paginator=x [retorna todos los users registrados en la bd mediante un paginador donde x es el numero de la página a necesitar, es una ruta administrativa]
    • servidor/users/idUser [retorna el usuario segun el idUser de la ruta y solo puede ser usado cuando esta logeado]

    • POST:
    • servidor/users [requiere de un array de objetos donde se contempla losd atos del usuario para ser registrado por medio de un administrador] Ej:
      { "name": "teddy", "last_name": "pottella", "email": "admin@admin.com", "dir_domicilio":"lugar de domicilio", "pass": "teddy7595" }

    • PUT:
    • servidor/users/idUsers [requiere de un objeto con los datos del usuario y el id del mismo pasado por el query de la ruta, se requiere estar logeado para acceder la función] Ej:
      { "name": "usuario modificado", "last_name": "usuario modificado apellido", "email": "admin@admin.com", "dir_domicilio":"lugar de domicilio 2" }

    • DELETE:
    • servidor/users/idUser [requiere el id del usuario pasado por el query de la ruta para borrarlo de manera lógica de la bd]
    • En el apartado de auth tenemos:

    • POST:
    • servidor/auth/signin [requiere de un objeto donde se contempla los datos del usuario para obtener un tóken de autenticación, es decir; iniciar sesión] Ej:
      { "email": "admin@admin.com", "pass": "teddy7595" }
    • servidor/auth/signin [requiere de un objeto donde se contempla los datos del usuario para poder registrarse en la base de datos de la API, es decir; crear usuario] Ej:
      { "name": "teddy", "last_name": "pottella", "email": "admin@admin.com", "dir_domicilio":"san felix", "pass": "teddy7595" }

---------------- INSTRUCCIONES ----------------

Backend:


  • 1) Para iniciar el backend, nos posicionamos en las carpeta correspondiente a través de la consola y escribimos yarn install ó npm install en el caso de usar uno u otro
  • 2) Al tener completado la instalación de paquetes, se procede a iniciar el proyecto usando el comando yarn start:dev ó npm run start:dev
  • 3) *Se recomienda usar un solo gestor de paquetes bien sea yarn o nmp*
  • 4) Seguir los modelos de rutas planteados en el apartado de RUTAS

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages