semester-project-automated-resume-builder-API
Esta es un API dirigido al desarrollo de una pagina web para generar automaticamente resumes para los usuarios. El codigo fuente de esta api junto al front end lo pueden encontrar en https://github.com/uprm-inso4115-2023-2024-s2/semester-project-automated-resume-builder
Users ¶
Recursos relacionados con los usuarios en el sistema.
Users Collection ¶
List All UsersGET/users
Devuelve a todos los usuarios en la base de datos.
Example URI
200Headers
Content-Type: application/jsonBody
[
  {
    "user_id": 1,
    "name": "Jane Doe",
    "email": "jane.doe@example.com",
    "phone_number": "123-456-7890",
    "middle_initial": "",
    "frst_lst_name": "Doe",
    "scnd_lst_name": "",
    "summary": "An experienced software developer...",
    "profile": "URL to profile picture"
  },
  {
    "user_id": 2,
    "name": "John Doe",
    "email": "john.doe@example.com",
    "phone_number": "098-765-4321",
    "middle_initial": "A",
    "frst_lst_name": "Doe",
    "scnd_lst_name": "Smith",
    "summary": "A beginner in the programming world...",
    "profile": "URL to profile picture"
  }
]User Details By TokenGET/users/me
Esta ruta permite a los usuarios obtener sus propios detalles enviando un token de autenticación en los headers de la solicitud. Es útil para verificar la información del perfil del usuario basada en la sesión actual.
Example URI
Headers
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN_HERE200Headers
Content-Type: application/jsonBody
{
  "user_id": 1,
  "name": "Jane Doe",
  "email": "jane.doe@example.com",
  "phone_number": "123-456-7890",
  "middle_initial": "",
  "frst_lst_name": "Doe",
  "scnd_lst_name": "",
  "summary": "An experienced software developer...",
  "profile": "URL to profile picture",
  "email_verified": true
}401Headers
Content-Type: application/jsonBody
{
  "message": "Acceso denegado. No se proporcionó token."
}404Headers
Content-Type: application/jsonBody
{
  "message": "Usuario no encontrado."
}400Headers
Content-Type: application/jsonBody
{
  "message": "Token inválido."
}Verify EmailGET/verificar-email{?token}
Este endpoint permite a los usuarios verificar su correo electrónico. Espera recibir un token de verificación en la query string del URL. Si la verificación es exitosa, redirecciona al usuario a la página de inicio y actualiza en la base de datos como que el usuario ya esta verificado permitiendole hacer log in en su nueva cuenta.
Example URI
- token
- string(required) Example: abc123def456- Token de verificación del correo electrónico. 
Headers
Content-Type: application/json302Headers
Location: http://localhost:3000/400Headers
Content-Type: application/jsonBody
{
  "message": "Token de verificación requerido."
}404Headers
Content-Type: application/jsonBody
{
  "message": "Token de verificación inválido o usuario no encontrado."
}Sign Up UserPOST/users
Este endpoint permite a nuevos usuarios registrarse en el sistema. Los usuarios deben proporcionar su correo electrónico, contraseña, nombre, apellido y número de teléfono. Después del registro exitoso, se envía un correo electrónico de verificación al usuario. Este email contiene una url que al visitarla se ejecuta la ruta de Verify Email que se puede encontrar en esta documentacion.
Example URI
Headers
Content-Type: application/jsonBody
{
  "email": "jane.doe@example.com",
  "password": "examplePassword123",
  "name": "Jane",
  "frst_lst_name": "Doe",
  "phone_number": "123-456-7890"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Correo electrónico del usuario."
    },
    "password": {
      "type": "string",
      "description": "Contraseña del usuario."
    },
    "name": {
      "type": "string",
      "description": "Nombre del usuario."
    },
    "frst_lst_name": {
      "type": "string",
      "description": "Primer apellido del usuario."
    },
    "phone_number": {
      "type": "string",
      "description": "Número de teléfono del usuario."
    }
  },
  "required": [
    "email",
    "password",
    "name",
    "frst_lst_name",
    "phone_number"
  ]
}200Headers
Content-Type: application/jsonBody
{
  "user": {
    "email": "jane.doe@example.com",
    "name": "Jane",
    "frst_lst_name": "Doe",
    "phone_number": "123-456-7890",
    "email_verified": false
  },
  "token": "abc123"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "user": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "description": "Correo electrónico del usuario."
        },
        "name": {
          "type": "string",
          "description": "Nombre del usuario."
        },
        "frst_lst_name": {
          "type": "string",
          "description": "Primer apellido del usuario."
        },
        "phone_number": {
          "type": "string",
          "description": "Número de teléfono del usuario."
        },
        "email_verified": {
          "type": "boolean",
          "description": "Estado de la verificación del correo electrónico."
        }
      }
    },
    "token": {
      "type": "string",
      "description": "Token de autenticación del usuario."
    }
  }
}400Headers
Content-Type: application/jsonBody
{
  "message": "Información faltante o inválida."
}Log In UserPOST/users/login
Este endpoint permite a los usuarios existentes iniciar sesión en el sistema. Los usuarios deben proporcionar su correo electrónico y contraseña. Después de un inicio de sesión exitoso, se devuelve un token de autenticación.
Example URI
Headers
Content-Type: application/jsonBody
{
  "email": "jane.doe@example.com",
  "password": "examplePassword123"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Correo electrónico del usuario."
    },
    "password": {
      "type": "string",
      "description": "Contraseña del usuario."
    }
  },
  "required": [
    "email",
    "password"
  ]
}200Headers
Content-Type: application/jsonBody
{
  "user": {
    "user_id": 1,
    "email": "jane.doe@example.com",
    "name": "Jane",
    "frst_lst_name": "Doe",
    "phone_number": "123-456-7890",
    "email_verified": true
  },
  "token": "abc123def456"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "user": {
      "type": "object",
      "properties": {
        "user_id": {
          "type": "number",
          "description": "El ID del usuario."
        },
        "email": {
          "type": "string",
          "description": "El correo electrónico del usuario."
        },
        "name": {
          "type": "string",
          "description": "El nombre del usuario."
        },
        "frst_lst_name": {
          "type": "string",
          "description": "El apellido del usuario."
        },
        "phone_number": {
          "type": "string",
          "description": "El número de teléfono del usuario."
        },
        "email_verified": {
          "type": "boolean",
          "description": "Indica si el correo electrónico ha sido verificado."
        }
      }
    },
    "token": {
      "type": "string",
      "description": "El token de autenticación del usuario."
    }
  }
}401Headers
Content-Type: application/jsonBody
{
  "message": "Invalid Credentials"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "Mensaje indicando que las credenciales son inválidas."
    }
  }
}401Headers
Content-Type: application/jsonBody
{
  "message": "Unverified email"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "Mensaje indicando que el correo electrónico no ha sido verificado."
    }
  }
}User Details By TokenGET/users/me
Este endpoint permite obtener los detalles del usuario que esta ingresado en una sesion en la pagina al haber hecho login utilizando un token de autenticación. Es útil para recuperar información del perfil del usuario cada vez que esta se pierde al hacer refresh de la pagina.
Example URI
Headers
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN_HERE200Headers
Content-Type: application/jsonBody
{
  "user_id": 1,
  "name": "Jane Doe",
  "middle_initial": "A",
  "frst_lst_name": "Doe",
  "scnd_lst_name": "Smith",
  "phone_number": "1234567890",
  "profile": "URL_to_profile_picture",
  "email": "jane.doe@example.com"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "user_id": {
      "type": "number",
      "description": "El ID del usuario."
    },
    "name": {
      "type": "string",
      "description": "El nombre completo del usuario."
    },
    "middle_initial": {
      "type": "string",
      "description": "La inicial del segundo nombre del usuario."
    },
    "frst_lst_name": {
      "type": "string",
      "description": "El primer apellido del usuario."
    },
    "scnd_lst_name": {
      "type": "string",
      "description": "El segundo apellido del usuario."
    },
    "phone_number": {
      "type": "string",
      "description": "El número de teléfono del usuario."
    },
    "profile": {
      "type": "string",
      "description": "La URL de la imagen de perfil del usuario."
    },
    "email": {
      "type": "string",
      "description": "El correo electrónico del usuario."
    }
  }
}401Headers
Content-Type: application/jsonBody
{
  "message": "Acceso denegado. No se proporcionó token."
}404Headers
Content-Type: application/jsonBody
{
  "message": "Usuario no encontrado."
}400Headers
Content-Type: application/jsonBody
{
  "message": "Token inválido."
}Download User ResumeGET/users/{user_id}/dummyResumen/download
Este endpoint genera un documento PDF temporal que contiene el nombre del usuario seleccionado y lo envía al cliente para su descarga. Este endpoint está pensado para ser utilizado como base para una funcionalidad más completa de descarga de currículums.
Example URI
- user_id
- number(required) Example: 1- El ID del usuario cuyo nombre se incluirá en el PDF. 
200Headers
Content-Type: application/pdf
Content-Disposition: attachment; filename="download.pdf"
Content-Type: application/pdfBody
[El contenido binario del PDF]404Headers
Content-Type: application/jsonBody
{
  "message": "User not found"
}Update UserPUT/users/{user_id}
Este endpoint permite actualizar los detalles de un usuario existente. Se deben proporcionar los campos que se desean actualizar en el cuerpo de la solicitud.
Example URI
- user_id
- number(required) Example: 1- El ID del usuario que se va a actualizar. 
Headers
Content-Type: application/jsonBody
{
  "email": "jane.update@example.com",
  "name": "Jane Updated",
  "middle_initial": "B",
  "frst_lst_name": "Updated",
  "scnd_lst_name": "Doe",
  "phone_number": "987-654-3210",
  "summary": "Updated summary about Jane.",
  "profile": "URL_to_updated_profile_picture"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Nuevo correo electrónico del usuario."
    },
    "name": {
      "type": "string",
      "description": "Nuevo nombre del usuario."
    },
    "middle_initial": {
      "type": "string",
      "description": "Nueva inicial del segundo nombre del usuario."
    },
    "frst_lst_name": {
      "type": "string",
      "description": "Nuevo primer apellido del usuario."
    },
    "scnd_lst_name": {
      "type": "string",
      "description": "Nuevo segundo apellido del usuario."
    },
    "phone_number": {
      "type": "string",
      "description": "Nuevo número de teléfono del usuario."
    },
    "summary": {
      "type": "string",
      "description": "Nuevo resumen del perfil del usuario."
    },
    "profile": {
      "type": "string",
      "description": "Nueva URL de la imagen de perfil del usuario."
    }
  }
}200Headers
Content-Type: application/jsonBody
[El usuario actualizado]404Headers
Content-Type: application/jsonBody
{
  "message": "User not found"
}Delete UserDELETE/users/{user_id}
Este endpoint permite eliminar un usuario existente del sistema. El usuario a eliminar se especifica a través del user_id en la URL.
Example URI
- user_id
- number(required) Example: 1- El ID del usuario que se va a eliminar. 
204404Headers
Content-Type: application/jsonBody
{
  "message": "User not found"
}Personal Info ¶
Recursos relacionados con la información personal de los usuarios.
Personal Information Collection ¶
Get Personal InformationGET/personal_information/{personal_info_id}
Este endpoint permite obtener la información personal de un usuario específico mediante su personal_info_id.
Example URI
- personal_info_id
- number(required) Example: 1- El ID de la información personal del usuario. 
200Headers
Content-Type: application/jsonBody
{
  "personal_info_id": 5,
  "user_id": 72,
  "first_name": "string",
  "middle_initial": "string",
  "last_name": "string",
  "email": "string",
  "phone_number": "string",
  "address": "string",
  "socials": "string",
  "summary": "string"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "personal_info_id": {
      "type": "number",
      "description": "El ID de la información personal."
    },
    "user_id": {
      "type": "number",
      "description": "El ID del usuario asociado."
    },
    "first_name": {
      "type": "string",
      "description": "El primer nombre del usuario."
    },
    "middle_initial": {
      "type": "string",
      "description": "La inicial del segundo nombre del usuario, si aplica."
    },
    "last_name": {
      "type": "string",
      "description": "El apellido del usuario."
    },
    "email": {
      "type": "string",
      "description": "El correo electrónico del usuario."
    },
    "phone_number": {
      "type": "string",
      "description": "El número de teléfono del usuario."
    },
    "address": {
      "type": "string",
      "description": "La dirección del usuario."
    },
    "socials": {
      "type": "string",
      "description": "Representación en cadena de las redes sociales del usuario."
    },
    "summary": {
      "type": "string",
      "description": "Un breve resumen sobre el usuario."
    }
  }
}404Headers
Content-Type: application/jsonBody
{
  "message": "Personal information not found"
}Save Personal InformationPOST/personal_information
Este endpoint permite crear o guardar la información personal de un usuario.
Example URI
Headers
Content-Type: application/jsonBody
{
  "user_id": 1,
  "first_name": "Jane",
  "middle_initial": "A",
  "last_name": "Doe",
  "email": "jane.doe@example.com",
  "phone_number": "123-456-7890",
  "address": "123 Example St",
  "socials": "\"numero de seguro social\"",
  "summary": "A brief summary about Jane."
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "user_id": {
      "type": "number",
      "description": "El ID del usuario."
    },
    "first_name": {
      "type": "string",
      "description": "El primer nombre del usuario."
    },
    "middle_initial": {
      "type": "string",
      "description": "La inicial del segundo nombre del usuario."
    },
    "last_name": {
      "type": "string",
      "description": "El apellido del usuario."
    },
    "email": {
      "type": "string",
      "description": "El correo electrónico del usuario."
    },
    "phone_number": {
      "type": "string",
      "description": "El número de teléfono del usuario."
    },
    "address": {
      "type": "string",
      "description": "La dirección del usuario."
    },
    "socials": {
      "type": "string",
      "description": "Numero de seguro social del usuario."
    },
    "summary": {
      "type": "string",
      "description": "Un breve resumen sobre el usuario."
    }
  },
  "required": [
    "user_id",
    "first_name",
    "last_name",
    "email",
    "phone_number",
    "address",
    "socials",
    "summary"
  ]
}Delete Personal InformationDELETE/personal_information/{personal_info_id}
Este endpoint permite eliminar la información personal de un usuario específico mediante su personal_info_id. Retorna la información eliminada para confirmación.
Example URI
- personal_info_id
- number(required) Example: 1- El ID de la información personal del usuario. 
200Headers
Content-Type: application/jsonBody
{
  "personal_info_id": 1,
  "user_id": 72,
  "first_name": "string",
  "middle_initial": "string",
  "last_name": "string",
  "email": "string",
  "phone_number": "string",
  "address": "string",
  "socials": "string",
  "summary": "string"
}Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "personal_info_id": {
      "type": "number",
      "description": "El ID de la información personal eliminada."
    },
    "user_id": {
      "type": "number",
      "description": "El ID del usuario asociado a la información eliminada."
    },
    "first_name": {
      "type": "string",
      "description": "El primer nombre asociado a la información eliminada."
    },
    "middle_initial": {
      "type": "string",
      "description": "La inicial del segundo nombre asociado a la información eliminada."
    },
    "last_name": {
      "type": "string",
      "description": "El apellido asociado a la información eliminada."
    },
    "email": {
      "type": "string",
      "description": "El correo electrónico asociado a la información eliminada."
    },
    "phone_number": {
      "type": "string",
      "description": "El número de teléfono asociado a la información eliminada."
    },
    "address": {
      "type": "string",
      "description": "La dirección asociada a la información eliminada."
    },
    "socials": {
      "type": "string",
      "description": "Las redes sociales asociadas a la información eliminada."
    },
    "summary": {
      "type": "string",
      "description": "Un resumen asociado a la información eliminada."
    }
  }
}404Headers
Content-Type: application/jsonBody
{
  "message": "Personal information not found"
}