Skip to main content

Validation

We use VineJS for high-performance schema validation. Validators are defined in app/Validators/.

Defining a Schema

// app/Validators/camera.ts
import vine from "@vinejs/vine";

export const createCameraValidator = vine.compile(
vine.object({
name: vine.string().trim().minLength(3),
ip: vine.string().ip(),
rtspUsername: vine.string().optional(),
rtspPassword: vine.string().optional(),
}),
);

Using in Controller

Validation is strict. If it fails, the request stops immediately with 422 Unprocessable Entity.

import { createCameraValidator } from '#validators/camera'

public async store({ request }: HttpContext) {
// Automatically validates body.
// 'payload' contains ONLY the validated fields (no extra junk).
const payload = await request.validateUsing(createCameraValidator)

await CameraService.create(payload)
}