43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { z } from "zod";
|
|
|
|
/**
|
|
* Schema de validação para a tabela `log`
|
|
* Baseado na DDL do banco de dados `monitoring.log`
|
|
*/
|
|
export const LogSchema = z.object({
|
|
// ID do log, gerado automaticamente pelo banco (AUTO_INCREMENT)
|
|
log_id: z.number().optional(),
|
|
|
|
// ID do cliente relacionado — campo obrigatório
|
|
client_id: z
|
|
.number({
|
|
message: "O campo client_id deve ser um número.",
|
|
})
|
|
.int()
|
|
.positive({ message: "O client_id deve ser um número positivo." }),
|
|
|
|
// Data e hora da inserção — gerada automaticamente pelo banco (CURRENT_TIMESTAMP)
|
|
date_post: z
|
|
.string()
|
|
.datetime({ message: "O campo date_post deve ser uma data/hora válida (ISO 8601)." })
|
|
.optional()
|
|
.nullable(),
|
|
|
|
// Campo JSON que armazena informações sobre o arquivo
|
|
// Pode ser um objeto com qualquer estrutura válida em JSON
|
|
file: z
|
|
.any()
|
|
.refine((val) => val !== undefined, {
|
|
message: "O campo file é obrigatório e deve conter um JSON válido.",
|
|
})
|
|
.refine(
|
|
(val) => typeof val === "object" && val !== null,
|
|
{ message: "O campo file deve ser um objeto JSON válido." }
|
|
),
|
|
});
|
|
|
|
/**
|
|
* Tipo TypeScript inferido automaticamente a partir do schema.
|
|
* Permite utilizar a tipagem do Zod em qualquer parte do código.
|
|
*/
|
|
export type LogSchemaType = z.infer<typeof LogSchema>;
|