Skip to content

datrujillog/JobSearch_talent-search

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

__JobSearch APP

SPRINT 1 de 3


Datos del Presentación

  • Fecha: 20 de Noviembre del 2022
  • Integrantes: Diego Trujillo

Objetivos del Proyecto

  • Construir una Api utlizando Node, express y MongoDB.
  • Aplicar mejores prácticas.

Diagrama de Contexto


Características de Arquitectura

  • Rutas desacopladas
  • Parametrización de Tablas "Countries" y "Categories"

IMPORTANTE: Es necesario contar minimamente con la última versión estable de Node y NPM. Asegurarse de contar con ella para poder instalar correctamente las dependecias necesarias para correr el proyecto.

Actualmente las versiónes necesarias son:

  • Node: 12.18.3 o mayor
  • NPM: 6.14.16 o mayor

En la carpeta backend crear un archivo llamado: .env que tenga la siguiente forma:
Ejemplo:

# PUERTO
PORT=8081

# STRING DE CONEION BASE DE DATOS
CONNECTION_STRING=mongodb://localhost:27017/jobSearch

# private key JWT

PRIVATE_JWT=passwordJWT

Reemplazar PORT, CONNECTION_STRING y PRIVATE_JWT con las propias credenciales. Para más información diríjase al archivo .env.ejemplo

Especificaciones Generales

Se trata de una API que registrará por parte de las empresas empleadoras o consultoras de talent search, posiciones laborales buscadas en el mercado de IT. Existen diferentes categorías de skill, distintas modalidades de trabajo y dichas busquedas que se desarrollarán para diferentes paises

Historia de Usuario - Épicas


IMPORTANTE: Se controlará a través de un token de REGISTRO DE SESIÓN la autorización a las siguientes funcionalidades de acuerdo los privilegios del ROL de cada LOGIN.

Operaciones para el rol EMPLOYER

  • GENERAR ofertas laborales completando los siguientes datos:
    • Name: título de la oferta
    • Country: país donde se ofrece la posición.
    • Category: categoría a la que pertenece la oferta.
    • Detalles: Requerimientos solicitados mandatorias y/o deseables a saber:
      • Salary: Salario ofrecido.
      • Modality: Si se trata de modo presencial, remoto o híbrido.
      • Seniority: Antiguedad y experiencia requerida
      • Description: Explicación de la tarea a realizar.
  • Podrá CONSULTAR ofertas y filtrarlas según:
    • Country
    • Category
  • Puede BORRAR ofertas laborales creadas por si mismo.
  • Puede MODIFICAR ofertas laborales creadas por si mismo.

Gestión para el rol USER

  • Podrá consultar ofertas laborales y filtrarlas según:
    • Country
    • Category
  • Podrá APLICAR a ofertas laborales
  • Podrá DESAPLICAR a ofertas laborales

__ADVERTENCIA__: Al desaplicar a las ofertas laborales USER perderá dicha afectación, se recomienta que front end se cerciore antes de realizar el pedido a la ruta dado que no se guarda en un status de "eliminado" y no se podrá recuperar salvo que se vuelva a ejecutar todo el procedimiento de hallazgo de dicha oferta nuevamente.

Funcionalidades del rol ADMINISTRATOR

  • ADMIN puede crear, borrar, modificar y consultar USUARIOS.
  • ADMIN puede crear, borrar, modificar y consultar PARAMETROS (las tablas COUNTRY y CATEGORY)

IMPORTANTE: No se desarrolla un borrado definitivo de los usuarios, se aplica una eliminación lógica a través de un campo status que podrá reestablecerse a true mediante de un UPDATE del mismo.

Tecnologías necesarias:

  • Express
  • Mongo
  • Node

Base de datos:

El modelo de la base de datos se implementa en MONGODB con las siguientes tablas y referencias:

Diagrama Entidad Relación



API REST

Servidor en Node/Express con las siguientes rutas:

URL BASE: http://localhost:PORT/api/v1

FRONTEND

Diagrama de Funcionalidades - PROCESOS Nivel1


1.- Funcionalidades del USER (applicant)



2.- Funcionalidades del EMPLOYER



3.- Funcionalidades de ADMIN



Endpoints/Flags:


END POINTS USERS

  • POST /user:

    • Se le debe enviar por el body el siguiente objeto:
     Body:{
      email: {
        type: String,
        required: true,
      },
      password: {
        type: String,
        required: true,
      },
      name: {
        type: String,
        required: true,
      },
      role: {
        type: String,
        enum: ["ADMIN", "EMPLOYER", "USER"],
        default: "USER",
      },
      status: {
        type: Boolean,
        default: true,
      },
    }
    
  • GET /user/:

    • Retorna todos los usuarios
    • Deberá tener rol de administrador.
    Headers:{Authorization: Bearer {{TOKEN}}}
    
  • PUT /user/{:id}

    • Actualiza usuarios
    • Deberá tener rol de administrador.
    Headers:{Authorization: Bearer {{TOKEN}},}
    // Puede actualizar cualquiera de las siguientes propiedades:
    Body:{
      "email": "correo3@correo.com",
      "name": "NUEVO NOMBRE",
      "role": "ADMIN",
    }
    
  • DELETE /user/{:id}:

    • Los usuarios no se eliminan, solo quedan en estado FALSE
    • Deberá tener rol de administrador.
    Headers:{Authorization: Bearer {{TOKEN}}}
    
  • GET /login:

    • Retorna el TOKEN y el PAYLOAD
    Body:{
     email": "correo3@correo.com",
     "password": "A12345678*"
    }
    

END POINTS OFFER

  • POST /offer:

    • Deberá ser tener rol EMPLOYER
    Headers:{Authorization: Bearer {{TOKEN}}}
    Body:{
      name: {
        type: String,
        required: true,
      },
      user: {
        type: mongoId,
        required: true,
      },
      country: {
        type: mongoId,
        required: true,
      },
    
      category: {
        type: mongoId,
        required: true,
      },
      details: {
        salary: {
          type: Number,
          required: true,
        },
        modality: {
          type: String,
          enum: ["REMOTO", "HIBRIDO", "PRESENCIAL"],
          required: true,
        },
        seniority: {
          type: String,
          enum: ["JUNIOR", "SEMI-SENIOR", "MID-SENIOR", "SENIOR"],
        },
        description: {
          type: String,
          required: true,
        },
      },
    },
    
  • GET /offer/{:id}:

    • Retorna todas las ofertas del empleador.
    Headers:{Authorization: Bearer {{TOKEN}}}
    Body:
    
  • GET /offer?country=""&category=""

    • IMPORTANTE: Los parámetros son opcionales, y filtra de acuerdo al criterio de busqueda. Sea por categorí, por país, o por las dos. y si no se le envía parametros trae todas ofertas. No se necesita un rol específico.
    Headers:{Authorization: Bearer {{TOKEN}},}
    // Puede actualizar cualquiera de las siguientes propiedades:
    
  • UPDATE /offer/{:id}:

    • Deberá tener rol de empleador específicamente
    • Se podrá ctualizar cualquiera de los campos.
    Headers:{Authorization: Bearer {{TOKEN}}}
    Body: {
      "name": "",
      "country": "",
      "category": "",
      "details": {
          "salary": ,
          "modality": "",
          "seniority": "",
          "description": ""
      }
     }
    
  • DELETE /offer/{:id}:

    • Solamente son eliminadas por el rol empleador y no se eliminan permanentemente sino que quedanes STATUS: false
    Headers:{Authorization: Bearer {{TOKEN}}}
    

END POINTS APPLICATION

  • POST /application:

  • Usuarios aplican las ofertas creadas por los empleadores.

    Headers:{Authorization: Bearer {{TOKEN}}}
    Body:   
     {
      offer: {
        type: MongoId,
        required: true,
      },
    }
    
  • GET /application:

  • Si es un usuario empleador trae las aplicaciones que usuarios realizaron a sus ofertas creadas.

  • Si es un usuario aplicante traerá solo las ofertas aplicadas por él.

    Headers:{Authorization: Bearer {{TOKEN}}}
    Body:   
     {
      offer: {
        type: MongoId,
        required: true,
      },
    }
    
  • DELETE /application/{:id}:

  • El usuario dueño de la aplicación a una oferta puede desafectarse de la misma.

    Headers:{Authorization: Bearer {{TOKEN}}}
    

Requerimientos del Cliente