// Tipos e constantes compartilhados pelos exemplos. Todos os exemplos falam // com a API da aula 10 (NestJS + Prisma), no ar em http://localhost:3000, // com o banco populado pelo seed daquela aula. export const API_URL = process.env.API_URL ?? 'http://localhost:3000'; // Porta em que nada escuta: serve para produzir a falha de rede de propósito. export const API_FORA_DO_AR = 'http://localhost:3999'; // As duas contas criadas pelo seed da aula 10. Servem só para o laboratório. export const ADMINISTRADOR = { email: 'admin@biblioteca.com', senha: 'admin123' }; export const LEITORA = { email: 'ana@exemplo.com', senha: 'leitor123' }; // Os mesmos tipos de lib/livros.ts do cliente web da aula 13: descrevem o que // o cliente lê, não tudo o que a API envia. export type Autor = { id: number; nome: string; nacionalidade: string | null; }; export type Editora = { id: number; nome: string; }; export type Livro = { id: number; titulo: string; isbn: string; ano: number; autor: Autor; editora: Editora | null; }; // O envelope de listagem definido na aula 6. export type Pagina = { dados: T[]; pagina: number; tamanho: number; total: number; totalDePaginas: number; }; // O corpo de erro que o FiltroDeExcecoes da API devolve em toda resposta // fora da faixa 2xx (aula 6, Parte 7). export type CorpoDeErro = { status: number; titulo: string; detalhes: string[]; caminho: string; momento: string; }; // Um livro para cadastrar e remover nos exemplos de escrita. O ISBN-13 é // válido (o dígito verificador confere) e não existe no seed. export const NOVO_LIVRO = { titulo: 'Quincas Borba', isbn: '9788535910667', ano: 1891, }; export function ms(inicio: number): string { return `${String(Math.round(performance.now() - inicio)).padStart(5)} ms`; } // Nome e mensagem de um erro qualquer, sem recorrer a `any` (Extra A, Parte 7). export function descrever(erro: unknown): string { if (erro instanceof Error) { const causa = erro.cause instanceof Error ? ` (causa: ${'code' in erro.cause ? String(erro.cause.code) : erro.cause.message})` : ''; return `${erro.name}: ${erro.message}${causa}`; } return String(erro); }