¡Bienvenido al repositorio del API del Museo Interactivo UTP! Este proyecto tiene como objetivo desarrollar el API del museo interactivo para la Universidad Tecnológica de Panamá, utilizando tecnologías como Node.js y Express.
Este proyecto está siendo desarrollado por el equipo de desarrollo del departamento de API del proyecto, compuesto por los siguientes miembros:
- Flavio Sánchez (ALIK)
- Gustavo Leoteau
- José Liao
- Yunier Yau
- Node.js
- Express
- Jest
- Otros paquetes y librerías que pueden verse a detalle en
package.json
Para empezar a utilizar el API, realizar la instalación de todas las dependencias del proyecto, ejecute el siguiente comando en la raíz del proyecto:
npm i
Crear un archivo llamado .env
para colocar las variables de entorno
Las variables que el proyecto esta utilizando son las siguientes:
# Puerto del servidor
PORT =
# Credenciales para la base de datos principal (MySQL)
DB_HOST =
DB_PORT =
DB_NAME =
DB_USER =
DB_PASS =
# Json Web Token
JWT_SECRET =
# Credenciales para FireStorage uwu
FIREBASE_API_KEY =
FIREBASE_AUTH_DOMAIN =
FIREBASE_PROJECT_ID =
FIREBASE_STORAGE_BUCKET =
FIREBASE_MESSAGING_SENDER_ID =
FIREBASE_APP_ID =
FIREBASE_MEASURAMENT_ID =
Agregar esas variables al archivo .env
usted debe encargarse de colocarle el valor a cada una
Iniciar sesión, Mantener sesiones será importante para un usuario ya que esto permitirá tener un registro de los artículos que ha visitado
Será incluso más útil para los administradores ya que en la web administrativa habrá aún más funcionalidades que requerirán de autenticación
Data | Validaciones |
---|---|
nombre_usuario - obligatorio |
Aqui no hay ninguna |
password - obligatorio |
Aqui no hay ninguna |
Si todo sale bien, responde enviando los datos del usuario logueado junto con su token de sesión además de un código de status 200
Importante, este token debe ser almacenado ya sea en el localStorage, una cookie o un sharedpreferences, ya que es necesario para poder utilizar otros endpoint que requieren AUTH
{
"token": "...",
"usuario": {
"id": "...",
"usuario": "...",
"rol": "...",
"created_at": "...",
"updated_at": "...",
...
}
}
Si algo sale mal, responde con un código de status 400
Permite validar el token de sesión y obtener los datos del usuario ligado al token
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario |
Responde enviado al usuario al que pertenece el token de sesión enviado en el header
{
"id": "...",
"usuario": "...",
"rol": "...",
"created_at": "...",
"updated_at": "...",
...
}
Obtener todas las facultades
Param | Descripción | Validaciones |
---|---|---|
query - opcional |
Realizar búsqueda por su nombre | texto |
[
{
"id": "...",
"nombre": "..."
},
...
]
Permite publicar una nueva facultad
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario |
Data | Validaciones |
---|---|
nombre - obligatorio |
lenght(min: 2, max: 200) |
permite realizar la eliminación en base al id de la facultad
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario |
Param | Descripción | Validaciones |
---|---|---|
facultad id - obligatorio |
Es el id de la facultad | numérico |
Obtener todas las carreras
Param | Descripción | Validaciones |
---|---|---|
query - opcional |
Realizar búsqueda por su nombre | texto |
[
{
"id": "...",
"nombre": "...",
"facultad": "..."
},
...
]
Obtener todas las carreras en base al id de una facultad
Param | Descripción | Validaciones |
---|---|---|
facultad id - obligatorio |
Es el id de la facultad de las carreras | numérico |
[
{
"id": "...",
"nombre": "...",
"facultad": "..."
},
...
]
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario |
Data | Validaciones |
---|---|
nombre - obligatorio |
lenght(min: 2, max: 200) |
facultad_id - obligatorio |
numérico |
Permite realizar la eliminación de una carrera en base a su id
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario |
Param | Descripción | Validaciones |
---|---|---|
carrera id - obligatorio |
Es el id de la carrera | numérico |
Obtener todas las categorias
Param | Descripción | Validaciones |
---|---|---|
query - opcional |
Realizar búsqueda por su nombre | texto |
[
{
"id": "...",
"nombre": "..."
},
...
]
Permite publicar una nueva categoria
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario |
Data | Validaciones |
---|---|
nombre - obligatorio |
lenght(min: 2, max: 200) |
permite realizar la eliminación en base al id de la categoria
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario |
Param | Descripción | Validaciones |
---|---|---|
categoria id - obligatorio |
Es el id de la facultad | numérico |
Obtener todos los usuarios de tipo ESTUD de la base de datos
Param | Descripción | Validaciones |
---|---|---|
query - opcional |
Realizar búsqueda por su nombre_usuario | texto |
Si todo sale bien, responde con un arreglo de usuarios de tipo ESTUD junto con un código de status 200
[
{
"id": "...",
"usuario": "...",
"rol": "...",
"created_at": "...",
"updated_at": "...",
...
},
...
]
Si algo sale mal, responde con un código de status 400
Obtener un usuario de tipo ESTUD en específico de la base de datos a través de su ID
Param | Descripción | Validaciones |
---|---|---|
usuario id - obligatorio |
Es el id del usuario a buscar | numérico |
{
"id": "...",
"usuario": "...",
"rol": "...",
"created_at": "...",
"updated_at": "...",
...
}
Si no existe un usuario con el ID suministrado no retornará nada y responderá con código de status 404
Agrega un nuevo usuario en la base de datos, puede utilizarlo para realizar la pantalla de registro de usuario
Data | Validaciones |
---|---|
nombre_usuario - obligatorio |
Formato de nombre de usuario (sin espacios y sin caracteres especiales), lenght(min: 2, max: 32) |
password - obligatorio |
lenght(min: 8, max: 16) |
nombre - obligatorio |
lenght(min: 2, max: 30) |
apellido - obligatorio |
lenght(min: 2, max: 30) |
cedula - obligatorio |
Formato de cédula |
nivel - obligatorio |
numérico |
id_facultad - obligatorio |
numérico |
id_carrera - obligatorio |
numérico |
foto - opcional |
File |
Los otros datos como el rol y las fechas son definidos de forma autamatica en el backend
Si todo sale bien, responde enviando los datos del usuario creados con un código de status 201
Importante, el registro de usuario no genera un token de sesión, por lo tanto, una vez el usuario se registra debe hacerle iniciar sesión con su cuenta
{
"id": "...",
"usuario": "...",
"rol": "...",
"created_at": "...",
"updated_at": "...",
...
}
Si algo sale mal, responde con un código de status 400
Actualiza los datos de un usuario, se hace en base a su token de sesión
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para realizar el UPDATE de los datos de este |
Data | Validaciones |
---|---|
nombre - opcional |
Las mismas que en el post |
apellido - opcional |
Las mismas que en el post |
cedula - opcional |
Las mismas que en el post |
nivel - opcional |
Las mismas que en el post |
id_facultad - opcional |
Las mismas que en el post |
id_carrera - opcional |
Las mismas que en el post |
foto - opcional |
Las mismas que en el post |
Si todo sale bien, responde enviando los datos del usuario actualizado con un código de status 200
{
"id": "...",
"usuario": "...",
"rol": "...",
"created_at": "...",
"updated_at": "...",
...
}
Si algo sale mal, responde con un código de status 400
Elimina un usuario en base a su id, sólo lo puede realizar un administrador
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario admin, sólo los admin podran eliminar cuentas |
Param | Descripción | Validaciones |
---|---|---|
usuario id - obligatorio |
Es el id del usuario a eliminar | numérico |
Si todo sale bien, responde enviando los datos del usuario eliminado con un código de status 200
{
"id": "...",
"usuario": "...",
"rol": "...",
"created_at": "...",
"updated_at": "...",
...
}
Si algo sale mal, responde con un código de status 400
Retorna los usuarios que han visitado un artículo en específico, esto sólo lo puede visualizar un ADMIN, por lo tanto, se debe suministrar el token de sesión para validar que el usuario sea un ADMIN y el ID del artículo al cual se le quieren ver sus visitantes
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para poder tener acceso a ciertos recursos o realizar ciertas acciones |
Param | Descripción | Validaciones |
---|---|---|
artículo id - obligatorio |
Es el id del artículo a listar sus visitantes | numérico |
Si todo sale bien, responde enviando un arreglo de Usuarios que han visitado el artículo juento con un código de status 200
Si desean saber el número de visitas como un valor entero, háganlo desde el Frontend usando length
[
{
"id": "...",
"usuario": "...",
"nombre": "...",
"apellido": "...",
"cédúla": "...",
"rol": "...",
"nivel": "...",
"facultad": "...",
"carrera": "...",
...
},
...
]
Si algo sale mal, responde con un código de status 400
Registra en la base de datos, la visita de un usuario a un artículo del museo, esta acción sólo la puede realizar un usuario con una sesión activa, por lo tanto, se debe suministrar el token de sesión en un header y el id del artículo que visito en el path del endpoint
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para poder tener acceso a ciertos recursos o realizar ciertas acciones |
Param | Descripción | Validaciones |
---|---|---|
artículo id - obligatorio |
Es el id del artículo a realizarle una visita | numérico |
Si todo sale bien, responde enviando el nuevo registro de visita en la base de datos junto con un código de status 201
Si desean saber el número de visitas como un valor entero, háganlo desde el Frontend usando length
{
"id_visitante": "...",
"id_estudiante": "...",
"articulo_id": "...",
"fecha": "...",
}
Si algo sale mal, responde con un código de status 400
Retorna todos los artículos de la base de datos
Param | Descripción | Validaciones |
---|---|---|
query - opcional |
Realizar búsqueda de artículos por su nombre | texto |
categoria - opcional |
Realizar búsqueda de artículos por su id de categoria | numérico |
min - opcional |
año mínimo | numérico |
max - opcional |
año máximo | numérico |
Si todo sale bien, responde enviando un arreglo con todos los artículos junto con un código de status 200
Note que los objetos de tipo artículo que vienen en este arreglo no cuentan con los datos completos, esto se debe a que para listar todos estos artículos no hace falta utilizar todos sus datos y de esa forma no sobre cargamos la respuesta
[
{
"id": "...",
"nombre": "...",
"categoria_id": "...",
"created_at": "...",
"updated_at": "...",
"fotos": [
{ "id": "...", "url": "x.jpg" },
{ "id": "...", "url": "x.jpg" }
]
},
...
]
Si algo sale mal, responde con un código de status 400
Obtener un articulo en específico de la base de datos, a través de su ID
Param | Descripción | Validaciones |
---|---|---|
artículo id - obligatorio |
Es el id del artículo a buscar | numérico |
Si todo sale bien, responde enviando el artículo con todos sus datos junto con un código de status 200
Acá, al obtener un artículo en específico, si retornamos todos los datos
{
"id": "...",
"nombre": "...",
"descripcion": "...",
"categoria_id": "...",
"created_at": "...",
"updated_at": "...",
"fotos": [
{ "id": "...", "url": "x.jpg" },
{ "id": "...", "url": "y.jpg" }
],
"videos": [
{ "id": "...", "url": "x.mp4" }
],
"audios": [
{ "id": "...", "url": "x.mp3" }
]
}
Si algo sale mal, responde con un código de status 400
Registrar un nuevo artículo en la base de datos, esta acción sólo la puede realizar un administrador, por lo tanto, se debe suministrar un token de sesión para validar que se trate de un administrador
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para poder tener acceso a ciertos recursos o realizar ciertas acciones |
Data | Validaciones |
---|---|
nombre - obligatorio |
lenght(min: 2, max: 120) |
descripcion - obligatorio |
lenght(min: 2, max: 2048) |
categoria_id - obligatorio |
numérico |
ubicacion - obligatorio |
lenght(min: 2, max: 255) |
dueno - obligatorio |
lenght(min: 2, max: 120) |
year - obligatorio |
numérico |
multimedios - opcional |
Es todo el conjunto de Files multimedios, utilizar input multiple |
Si todo sale bien, responde enviando el nuevo artículo creado junto con un código de status 201
{
"id": "...",
"nombre": "...",
"descripcion": "...",
"categoria_id": "...",
"created_at": "...",
"updated_at": "...",
"fotos": [
{ "id": "...", "url": "x.jpg" },
{ "id": "...", "url": "y.jpg" }
],
"videos": [
{ "id": "...", "url": "x.mp4" }
],
"audios": [
{ "id": "...", "url": "x.mp3" }
]
}
Si algo sale mal, responde con un código de status 400
Actualizar un artículo ya existente en la base de datos, esta acción sólo la puede realizar un administrador, por lo tanto, se debe suministrar un token de sesión para validar que se trate de un administrador
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para poder tener acceso a ciertos recursos o realizar ciertas acciones |
Data | Validaciones |
---|---|
nombre - opcional |
lenght(min: 2, max: 120) |
descripcion - opcional |
lenght(min: 2, max: 2048) |
categoria_id - opcional |
numérico |
ubicacion - opcional |
lenght(min: 2, max: 255) |
dueno - opcional |
lenght(min: 2, max: 120) |
year - opcional |
numérico |
articulosBorrarId - opcional |
Array numérico, es un arreglo con los ids de los elementos multimedios del artículo |
multimedios - opcional |
Es todo el conjunto de Files multimedios, utilizar input multiple |
Si todo sale bien, responde enviando el artículo ya con sus datos actualizados junto con un código de status 201
{
"id": "...",
"nombre": "...",
"descripcion": "...",
"categoria_id": "...",
"created_at": "...",
"updated_at": "...",
"fotos": [
{ "id": "...", "url": "x.jpg" },
{ "id": "...", "url": "y.jpg" }
],
"videos": [
{ "id": "...", "url": "x.mp4" }
],
"audios": [
{ "id": "...", "url": "x.mp3" }
]
}
Si algo sale mal, responde con un código de status 400
Permite realizar la eliminación de un artículo de la base de datos, esta acción sólo la puede realizar un administrador, por lo tanto, se debe suministrar un token de sesión para validar que se trate de un administrador
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para poder tener acceso a ciertos recursos o realizar ciertas acciones |
Param | Descripción |
---|---|
artículo id - obligatorio |
Es el id del artículo a eliminar |
Si todo sale bien, responde enviando el artículo eliminado junto con un código de status 200
{
"id": "...",
"nombre": "...",
"descripcion": "...",
"categoria_id": "...",
"created_at": "...",
"updated_at": "...",
"fotos": [
{ "id": "...", "url": "x.jpg" },
{ "id": "...", "url": "y.jpg" }
],
"videos": [
{ "id": "...", "url": "x.mp4" }
],
"audios": [
{ "id": "...", "url": "x.mp3" }
]
}
Si algo sale mal, responde con un código de status 400
Obtener todos los comentarios de un artículo en base al id del artículo
Param | Descripción |
---|---|
artículo id - obligatorio |
Es el id del artículo para obtener sus comentarios |
Si todo sale bien, responde enviando un arreglo con los comentarios del artículo 200
[
{
"id": "...",
"id_estudiante": "...",
"nombre": "...",
"apellido": "...",
"foto": "...",
"comentario": "...",
"articulo_id": "..."
},
...
]
Si algo sale mal, responde con un código de status 400
Agregar un comentario a un artículo en base a su id
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para poder tener acceso a ciertos recursos o realizar ciertas acciones |
Param | Descripción |
---|---|
artículo id - obligatorio |
Es el id del artículo para agregarle un nuevo comentario |
Data | Validaciones |
---|---|
comentario - opcional |
lenght(min: 2, max: 150) |
Si todo sale bien, responde enviando el nuevo comentario del artículo 200
{
"id": "...",
"id_estudiante": "...",
"nombre": "...",
"apellido": "...",
"foto": "...",
"comentario": "...",
"articulo_id": "..."
}
Si algo sale mal, responde con un código de status 400
Permite realizar la eliminación de un comentario
Header | Descripción |
---|---|
x-token - obligatorio |
Es el token de sesión de usuario, se requiere para poder tener acceso a ciertos recursos o realizar ciertas acciones |
Param | Descripción |
---|---|
comentario id - obligatorio |
Es el id del comentario para eliminarlo |
Si todo sale bien, responde enviando el comentario eliminado con un código 200
{
"id": "...",
"id_estudiante": "...",
"nombre": "...",
"apellido": "...",
"foto": "...",
"comentario": "...",
"articulo_id": "..."
}
Si algo sale mal, responde con un código de status 400
Obtener todos los participantes de del proyecto
Param | Descripción | Validaciones |
---|---|---|
departamento - opcional |
filtrar por departamento (VISITAS, CONVERSATORIO, VIDEO, CATEGORIA, TUTORIAL, BD, API, WEB, QA, MULTIMEDIOS, APP) | texto |
[
{
"id_participante": 1,
"nombre": "Flavio",
"apellido": "Sánchez",
"foto": null,
"departamento": "API",
"rol": "LIDER"
},
...
]