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)
}