- node.js 12
- mysql 8
npm install
-
En la carpeta
docs/
se encuentra el modelo de la base de datos, con algunos valores por defecto. Exportar su contenido en un script y ejecutarlo en su manejador de base de datos preferido en un entorno mysql.Si utilizas MySQL Workbench puedes hacerlo de esta forma.
Para exportar:
- File > Export > Forward Engineer SQL CREATE Script...
- Seleccionas una ubicación en Output SQL Script File.
- La opción Generate INSERT Statements for Tables debe estar marcada para que se inserten los valores por defecto.
- Click en Next.
- La opción Export MySQL Table Objects debe estar marcada.
- Click en Next.
- Click en Finish.
Para ejecutar el script:
- Crear una conexión localhost con un usuario y contraseña
- File > Run SQL Script (Seleccionar el archivo exportado previamente).
- Click en Run (Esperar que finalice).
- Click en Close.
Si la tabla aun no aparece deberás actualizar los Schemas, puedes localizar el botón en la sección de Schemas.
-
Crear un archivo
.env
en la raiz del proyecto, el cual contendrá las variables de entorno que utilizará el back-end. Puedes ver las variables en el archivo.env.example
, pero deberás insertar los valores correspondientes. A continuación una explicación de como llenar el archivo .env :- MODE: development en caso de ejecutar en localhost, production en caso de hacer un build al proyecto y montarlo en un servidor.
- Todas las variables que comienzan con DB_ se obtienen de la conexion al servidor de MySQL.
- DB_CLIENT: tipo de base de datos, por defecto mysql (no cambiar).
- DB_HOST: host del servidor, localhost en caso de conexión local.
- DB_PORT: puerto donde escucha el server de MySQL (colocar 3306 en caso de usar el puerto por defecto de MySQL).
- DB_USER: usuario de la conexión.
- DB_PASSWORD: contraseña del usuario de la conexión.
- DB_SCHEMA: nombre de la tabla, por defecto e-learning-course.
- TOKEN_SECRET: Cadena de caracteres aleatorios para generar los token de seguridad (no cambiar).
npm run server
-
Primero es necesario iniciar sesión como administrador para obtener un token de seguridad. Puedes iniciar sesión con el recurso /user/signin con las credenciales:
- user: [email protected]
- password: Admin1234
-
Algunos end-points requieren a un usuario de tipo profesor para su uso, por lo tanto con el token de administrador podrás crear profesores con el recurso /user/professor.
-
Con el recurso /user/signup podrás crear cuentas de estudiante. Este recurso no requiere de un token.
-
Ya que tengas mínimo un token de profesor y uno de estudiante podrás experimentar con el resto de end-points.
Para los profesores te recomiendo que comiences con los siguientes recursos:Como estudiante te recomiendo comenzar por los siguientes recursos:
{ "email": String, "password": String, "name": String }{ "token": String }
{ "email": String, "password": String }{ "token": String }
- Bearer token
{ "email": String, "password": String, "name": String }{ "token": String }
- Bearer token
{ "courses": [ { "name": String } ] }{ "message": "Ok" }
El parametro correlative
es opcional. Si su valor es true
se borraran todos los cursos correlativos asociados al courseId
, por defecto es false
y se borrará un solo curso.
- Bearer token
{ "courseId": Number, "correlative": Boolean }{ "message": "Ok" }
Obtención de la lista de todos los cursos, agrupados por cursos correlativos.
- Bearer token
[ [ { "course_id": Number, "name": String, "next_course": Number } ] ]
- Bearer token
courseId: Number
{ "message": "Ok" }
- Bearer token
courseId: Number
[ { "lesson_id": Number, "approval": Number, "title": String, "next_lesson": Number } ]
Obtener el estado del curso indicado en courseId
. El parametro average
indica el promedio general hasta el momento. En results
se pueden encontrar los resultados de todas las lecciones relacionadas al curso y que pertenecen al usuario indicado con userId
. El score
de cada lección indica la calificación obtenida, pero igual podría contener un mensaje en caso que la lección no haya sido tomada por el usuario.
- Bearer token
courseId: Number
{ "userId": Number, "courseId": Number, "average": Number, "results": [ { "userId": Number, "approved": Boolean, "score": [Number, String], "lessonId": Number } ] }
El parámetro approval
indica la calificación con la que se aprueba la lección.
- Bearer token
{ "courseId": Number, "lessons": [ { "approval": Number, "title": String } ] }{ "message": "Ok" }
El parametro correlative
es opcional. Si su valor es true
se borraran todas las lecciones correlativas asociadas al courseId
, por defecto es false
y se borrará una sola lección.
- Bearer token
{ "lessonId": Number, "correlative": Boolean }{ "message": "Ok" }
Obtención de la lista de todas las lecciones, agrupadas por lecciones correlativas.
- Bearer token
courseId: Number
{ "courseId": Number, "lessons": [ [ { "lesson_id": Number, "approval": Number, "title": String, "next_lesson": Number } ] ], }
Obtener los resultados de la lección de un usuario. El parámetro query userId
es opcional. Si no se proporciona userId
se obtendrá el resultado del usuario que hace la solicitud.
- Bearer token
lessonId: Number
userId: Number
{ "userId": Number, "approved": Boolean, "score": Number }
Creación de preguntas con opciones y respuestas. Existen algunas reglas para crear una pregunta, se explicará con detalle los parámetros:
- question: texto de la pregunta.
- type: [opcional] indica el tipo de pregunta que se creará, existen 4 tipos de preguntas: one, boolean, multiple, full. Por defecto one. El tipo de pregunta es relevante en el método de calificación y en la creación de las preguntas.
- one : una sola opción es una respuesta correcta.
- boolean : la respuesta solo tiene como valores
true
ofalse
. - multiple : existen varias opciones consideradas como respuesta correcta. La calificación se promedia con las respuestas correctas, en caso de elegir una incorrecta el resultado es 0.
- full : existen varias opciones consideradas como respuesta correcta. Todas las respuestas correctas se deberán responder, en caso de faltar alguna o exista una respuesta incorrecta el resultado es 0.
- answer: [opcional] únicamente se utiliza cuando type es boolean, en otros casos este parámetro es ignorado. Indica el resultado de la pregunta de tipo boolean. Por defecto la respuesta es
false
. - option: este parámetro es ignorado cuando el tipo de pregunta es de tipo boolean. Arreglo que contiene las opciones disponibles de la pregunta. Cada opción es un objeto, los cuales se comportan de manera distinta dependiendo el tipo de pregunta. Estos son los parámetros de los objetos y sus comportamientos:
- option: texto de la opción.
- answer: [opcional] indica la opción que será la respuesta a la pregunta. Es necesario por lo menos 1 opción con este parámetro con valor
true
. Cuando el tipo de pregunta es one solo se puede colocar este parámetro a una opción. Por defectofalse
.
- Bearer token
{ "lessonId": Number, "questions": [ { "question": String, "type": "one" | "boolean" | "multiple" | "full", "answer": Boolean, "option": [ { "option": String, "answer": Boolean } ], } ], }{ "message": "Ok" }
- Bearer token
{ "questionIds": Number[] }{ "message": "Ok" }
- Bearer token
lessonId: Number
[ { "question_id": Number, "question": String, "type": String, "options": [ { "option_id": Number, "option": String } ], } ]
End-point para responder preguntas. Se requiere mandar las respuestas de todas las preguntas de la lección.
- Bearer token
{ "lessonId": Number, "replies": [ { "questionId": Number, "optionIds": Number[] } ] }[ { "answer_id": Number, "user_id": Number, "lesson_id": Number, "question_id": Number, "answers": String, "score": Number } ]