Nessa caso é melhor usar Zod, é mais fácil de entender e você pode verificar se o que está sendo passado está correto.
import { z } from 'zod';
// Definindo o schema com Zod
const planetSchema = z.object({
name: z.string(),
weather: z.string(),
terrain: z.string(),
population: z.number(),
stellarSystemId: z.string()
}).strict(); // O .strict() impede propriedades adicionais
// Uso no código
const result = planetSchema.safeParse(req.body);
if (!result.success) {
throw new InvalidRequestBody(
"Corpo da requisição inválido. planet deve conter somente 'name', 'weather', 'terrain', 'population' e 'stellarSystemId'."
);
}
const { name, weather, terrain, population, stellarSystemId } = result.data;
Se você quiser validações mais específicas, pode adicionar regras como:
const planetSchema = z.object({
name: z.string().min(1).max(100),
weather: z.string().min(1),
terrain: z.string().min(1),
population: z.number().min(0),
stellarSystemId: z.string().uuid()
}).strict();