thesis: rework zod inference + add code demo
Pedro Lucas Porcellis porcellis@eletrotupi.com · 1 month ago
e859306d5d146d94a8a17ec574c428b9cb94792c Browse filesParents
192a6bdChanged files
1
Additions
+38
Deletions
0
monografia/chapters/tech.tex
1 1
\chapter{Tecnologias}
2 2
3 3
Este capítulo apresenta as principais tecnologias empregadas no desenvolvimento
4 4
do aplicativo, organizadas de acordo com a camada da arquitetura em que atuam:
5 5
\textit{front-end}, \textit{back-end} e infraestrutura/persistência de dados.
84 84
usuário estejam em conformidade com o formato esperado. A inferência
85 85
automática de tipos a partir dos esquemas evita a duplicação de definições de
86 86
tipo entre a camada de validação e o restante do código TypeScript do
87 87
back-end.
88 88
89 +
\begin{lstlisting}[language=typescript, caption={Validação e Inferência usando Zod}, label={lst:zod-inference}]
90 +
import {
91 +
BaseMoodOption,
92 +
MoodComponentOption,
93 +
IntensityLevel
94 +
} from '@prisma/client';
95 +
96 +
export const MoodComponentSchema = z.object({
97 +
component: z.nativeEnum(MoodComponentOption),
98 +
intensity: z.nativeEnum(IntensityLevel)
99 +
});
100 +
101 +
export const CreateMoodSchema = z.object({
102 +
annotation: z.string().optional(),
103 +
moment: z.coerce.date(),
104 +
selectedMood: z.nativeEnum(BaseMoodOption),
105 +
anxietyLevel: z.number().int().min(0).max(10),
106 +
stressLevel: z.number().int().min(0).max(10),
107 +
energyLevel: z.number().int().min(0).max(10),
108 +
moodComponents: z.array(MoodComponentSchema).min(1)
109 +
});
110 +
111 +
export type CreateMoodInput = z.infer<typeof CreateMoodSchema>;
112 +
\end{lstlisting}
113 +
114 +
\sourcecode{Elaborado pelo autor (2026)}
115 +
116 +
Aqui, é possível observar alguns elementos, como a extração direta dos
117 +
\textit{enums} mapeados pelo Prisma, citado anteriormente nas linhas 1--5. Em
118 +
seguida, são criados os \textit{schemas} de validação: um valida os componentes
119 +
de humor de forma aninhada dentro do objeto recebido, e o outro valida os dados
120 +
do próprio registro -- os níveis aceitos de ansiedade, estresse e energia; a
121 +
conversão do campo \texttt{moment} para um objeto de data a partir da entrada
122 +
recebida; a exigência de ao menos um componente de humor selecionado; entre
123 +
outros. Por fim, esses dados são exportados como um \textit{type} do
124 +
TypeScript, usado pelo compilador para a verificação estática de tipos no
125 +
restante do back-end.
126 +
89 127
\subsection{Valkey e BullMQ}
90 128
91 129
Valkey é um banco de dados em memória, do tipo chave-valor, criado como
92 130
\textit{fork} de código aberto do Redis, mantido sob a governança da Linux
93 131
Foundation \citep{valkey:2026}. BullMQ é uma biblioteca para gerenciamento de
284 322
ao documentar e automatizar o processo de provisionamento, o projeto
285 323
favorece um modelo mais alinhado aos princípios de privacidade e de
286 324
autonomia sobre os dados dos usuários, permitindo que instituições ou
287 325
indivíduos preocupados com a confidencialidade de dados sensíveis de
288 326
saúde mental hospedem e controlem sua própria instância da aplicação.