Payara, Kotlin y Mysql

Bueno comenzando la parte de los servicios vamos a tener básicamente dos endpoints uno para consultar preguntas y otro para insertar preguntas.

GET /services/questions/getAll
POST /services/questions/add

Por tanto creamos el archivo kotlin QuestionService en la carpeta question (primero crear la carpeta question), si no encontramos preguntas regresaremos 404, esto es a modo de ejemplo si quieres puedes regresar 200 y un array vacio es tu gusto y/o disenio, usaremos Gson como librería para parsear JSON a Kotlin y viceversa:

 

Como se puede observar tenemos dos funciones que requerimos getAllQuestions y addQuestion, a mi me gusta la estructura ruta -> controlador -> dao, por lo que a continuación vamos a definir el dao, para eso primero necesitamos una base de datos igual en MySQL y con las mismas tablas de la vez pasada

Question

Campo
Tipo

idQuestion
Integer

texto
text

Answer

Campo
Tipo

idAnswer
Integer

texto
text

idQuestion
Integer

Con eso tenemos una relación 1 a N de Question a Answer. Vamos a usar el super ultra complicado JDBC para la parte de persistencia y un mapeador sencillo que se llama Simple Flat Mapper; creamos un archivo kotlin llamado QuestionDao en la carpeta question con el siguiente contenido:

 

Como tenemos dos entidades, necesitamos otro dao para las respuestas, creamos una carpeta answer y agregamos el archivo kotlin AnswerDao con el siguiente contenido:

 

Como se puede leer para consultar las preguntas usamos el mapper que nos apoya en la creación de la lista de preguntas con respuesta, mientras que para insertar la pregunta primero insertamos la pregunta y después en la misma transacción insertamos la lista de respuestas. Con esto tenemos listo la función que encuentra las preguntas en la base de datos y una función que las agrega, nos falta agregar los controladores que conecten la base con los servicios y eso es lo que vamos a hacer por tanto creamos un archivo kotlin que se llame QuestionController en la carpeta question:

 

Tambien necesitamos el controller de las respuestas aunque por el momento solo sirve para inicializar el logger, creamos un kotlin file en la carpeta answer:

 

Necesitamos configurar el Datasource, para ello usaremos HIkariCP que es rapido y ligero, creamos una carpeta llamada config y dentro agregamos el archivo kotlin DBConfig con la información de nuestra base de datos:

 

Finalmente actualizamos las dependencias del gradle.build file:

 

En el QuestionController esta un main que nos ayudara a probar que las llamadas a la base de datos funcionen de manera adecuada sin tener que desplegar a cada rato el war, corriendo el main y con algunos datos en la base esta es la salida:

 

Listo, hemos terminado nuestros servicios para consultar y para guardar preguntas, solo nos falta ejecutar “gradle war” en la terminal y copiar nuestro War en la misma ubicación que PayaraMicro jar y ejecutar en la terminal “java -jar payara-micro-5.183.jar --deploy PayaraMicro-0.0.1.war”

Usando postman

GET URL:

{
"questions": [
{
"idQuestion": 42,
"text": "pregunta uno",
"answers": [
{
"idAnswer": 64,
"text": "Answer1"
},
{
"idAnswer": 65,
"text": "Anxwer2"
}
]
},
{
"idQuestion": 43,
"text": "pregunta dos",
"answers": [
{
"idAnswer": 66,
"text": "Answer1"
},
{
"idAnswer": 67,
"text": "Anxwer2"
},
{
"idAnswer": 68,
"text": "Anxwer3"
}
]
},
{
"idQuestion": 44,
"text": "pregunta tres",
"answers": []
}
]
}

POST URL:
Body:

{
"text": "Nueva pregunta",
"answers": [
{
"text": "Respuesta 1"
}
]
}

Response:

{
"idQuestion": 45,
"text": "Nueva pregunta",
"answers": [
{
"idAnswer": 69,
"text": "Respuesta 1"
}
]
}

Y listo hemos terminado nuestros servicios HTTP rest básicos, el siguiente post sera hacer la parte web de esta miniaplicacion

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Sugerencia

Como sugerencia, tus URL no necesitan indicar la acción que van a ejecutar, el propio verbo HTTP lo indica

GET /services/questions
Aqui el propio verbo GET indica que se trata de una consulta

POST /services/questions
Aqui el propio verbo POST indica que se trata de agregar o guardar

igual para los verbos PUT (actualización) y DELETE

Saludos!