Controladores

Estructura de controladores en la app

Creación

Los controladores se ubican en la carpeta: app/controllers. Para crear un nuevo controlador se debe usar el comando:

node ace make:controller my_controller store update ... ...

Donde el controlador tendrá una estructura similar a:

import { HttpContext } from '@adonisjs/core/http'

export default class MyController {
  async store({}: HttpContext) {}

  async update({}: HttpContext) {}
}

Validations

Para garantizar la credibilidad de datos en la aplicación se ha instalado el paquete vinejs, acorde a la documentación de adonijs en https://docs.adonisjs.com/guides/basics/validation.

  • Para crear un validator, se debe ejecutar el comando:
node ace make:validator my_validator

Posterior a esto, se creará un nuevo archivo en la carpeta app/validators con el nombre que has escogido, este archivo lucirá algo como:

import vine from '@vinejs/vine'

export const PlanificacionValidator = vine.compile(
    vine.object({
        ...
    })
)

Lo que hará este archivo, será verificar que la data que queramos validar contenga todos los items en el objeto. A continuación un ejemplo con algunas validaciones de string, numero

import vine from '@vinejs/vine'

export const PlanificacionValidator = vine.compile(
    vine.object({
        nombre: vine.string().trim(),
        edad: vine.number().min(1),
        codigo: vine.number().nullable(),
        status: vine.boolean()
    })
)

Para mayor información sobre los validations de vinejs visite https://vinejs.dev/docs/introduction

  • Ahora bien, para aplicar las validaciones sobre el request, solo debemos llamar el validator en cuestion aplicando la funcion validate() y pasando la data a validar, un ejemplo de ellos sería: app/controllers/planificacion/planificacion_controller.ts
async store({ request, ...}: HttpContext) {
    const data = request.all();
    const fields = await PlanificacionValidator.validate(data);
    const planificacion = await Planificacion.create(fields);
}

Si la validación no pasa, se devolverá un objeto en la respuesta con los errores.

Autenticación

Si, el usuario que realiza la petición está autenticado, se puede obtener la información del mismo accediendo al objeto auth en la funcion del controller:

async index({ request, response, auth }: HttpContext) {
    const user = auth.user;
    ...
    const id = user?.id
}