Para modularizar as rotas da aplicação usando plugins do Fastify, é necessário criar um diretório plugins e dentro dele criar os arquivos .js para cada plugin. Cada arquivo deve exportar uma função que recebe como parâmetro a instância do servidor Fastify. Dentro dessa função, é possível registrar rotas e realizar outras configurações específicas do plugin. Depois, basta importar esses plugins no arquivo principal de inicialização do servidor e registrá-los usando o método register do Fastify.
<aside> 🚨 A ordem como os plugins são chamados importa, pois é a forma como o Fastify irá “rodar” os códigos, portanto um plugin que “mexe” em outro, precisa ter essa atenção.
</aside>
Criando a primeira rota: Transactions do tipo POST
Dentro do Request Body:
Validando o escopo do meu Request Body utilizando o zod e informando a ele, a forma que ele deve ser lido e validado.

E depois eu ainda defino o ‘const body’ como um parse utilizando a minha validação zod e o request.body em si.
Se tiver algum erro, o próprio PARSE vai gerar um throw, um erro.
Para adicionar tipagem ao Knex, é necessário instalar o pacote @types/knex. Com isso, é possível utilizar as definições de tipos fornecidas pelo pacote dentro do seu código.
Além disso, é possível criar um arquivo .d.ts dentro de uma pasta @types dentro da pasta src do seu projeto para sobrescrever as definições de tipos padrão do Knex. Nesse arquivo, é possível adicionar definições personalizadas de tipos para tabelas, colunas, relacionamentos, etc.
Para utilizar essas definições personalizadas, basta importar o arquivo .d.ts no início do arquivo que irá utilizá-las, antes de importar o Knex.
Por exemplo, suponha que você queira adicionar tipagem para uma tabela users com as colunas id, name e email. Você pode criar um arquivo knex.d.ts dentro de src/@types com o seguinte conteúdo:
declare module 'knex' {
interface Table {
users: {
id: number,
name: string,
email: string
}
}
}
Então, no arquivo que irá utilizar essas definições, você pode importar o arquivo .d.ts e o Knex:
import './@types/knex';
import knex from 'knex';
const db = knex({
client: 'pg',
connection: {
host: 'localhost',
user: 'postgres',
password: 'postgres',
database: 'mydb'
}
});
db.select().from('users').then(rows => {
console.log(rows);
});
Com isso, o TypeScript irá reconhecer que a tabela users tem as colunas id, name e email com os tipos corretos e irá fornecer autocompletar e verificação de tipos para essas colunas.

Exemplo de tipagem utilizando o knex
Ação simples de se executar, tendo uma tabela criada, é simplemente fazer a requisição GET com a seleção do tipo que você quiser, no caso para selecionar tudo, utiliza-se ou o .select( ) vazio, ou com o *, ficando dessa forma: .select(’*’).

Exemplo de listagem geral
:id
Listagem de transação por :id
O código exibido na imagem acima demonstra uma consulta no banco de dados para obter uma transação específica, através de um parâmetro id passado na rota.
const { id } = request.params; extrai o valor do parâmetro id da requisição e atribui à variável id.transaction que recebe o resultado da consulta ao banco de dados, utilizando o método select do Knex, que seleciona a tabela transactions e utiliza um objeto para filtrar o resultado pela coluna id, que deve ser igual ao valor de id.transaction é nula, ou seja, se não foi encontrada nenhuma transação com o id fornecido. Se for o caso, uma resposta com status 404 é retornada, indicando que a transação não foi encontrada.response.json().
No caso fica (/transactions/summary)