Create 000-leitura-api.md
This commit is contained in:
parent
6e5c628bdc
commit
fbd859469c
1 changed files with 214 additions and 0 deletions
214
000-leitura-api.md
Normal file
214
000-leitura-api.md
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
# core.js
|
||||
|
||||
```typescript
|
||||
// Define o caminho absoluto do arquivo JSON de dados temporários na mesma pasta do script
|
||||
const jsonFilePath = __dirname + '/data.temp.json';
|
||||
|
||||
// Declara uma variável array de strings que armazenará os itens da lista
|
||||
// Inicializa carregando os dados do arquivo
|
||||
const list: string[] = await loadFromFile();
|
||||
|
||||
|
||||
// Define uma função que carrega dados do arquivo JSON
|
||||
async function loadFromFile() {
|
||||
try {
|
||||
// Cria um objeto do arquivo JSON usando a API do Bun
|
||||
const file = Bun.file(jsonFilePath);
|
||||
|
||||
// Lê o conteúdo do arquivo
|
||||
const content = await file.text();
|
||||
|
||||
// Converte o texto JSON em um array de strings e retorna
|
||||
return JSON.parse(content) as string[];
|
||||
} catch (error: any) {
|
||||
// Verifica se o erro é de arquivo não encontrado
|
||||
if (error.code === 'ENOENT')
|
||||
// Se o arquivo não existe, retorna um array vazio
|
||||
return [];
|
||||
|
||||
// Se for outro tipo de erro, lança exceção
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Define uma função assíncrona que salva a lista no arquivo JSON
|
||||
async function saveToFile() {
|
||||
try {
|
||||
// Escreve o conteúdo da variável list convertido em JSON no arquivo
|
||||
// Bun.write grava o arquivo
|
||||
await Bun.write(jsonFilePath, JSON.stringify(list));
|
||||
} catch (error: any) {
|
||||
// Se der erro lança uma exceção
|
||||
throw new Error("Erro ao salvar os dados no arquivo: " + error.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Define uma função que adiciona um novo item à lista
|
||||
async function addItem(item: string) {
|
||||
// Adiciona o item ao final do array
|
||||
list.push(item);
|
||||
|
||||
// Salva a lista atualizada no arquivo
|
||||
await saveToFile();
|
||||
}
|
||||
|
||||
|
||||
// Define uma função assíncrona que retorna todos os itens da lista
|
||||
async function getItems() {
|
||||
// Retorna array completo de itens
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
// Define função que atualiza um item em um índice específico
|
||||
async function updateItem(index: number, newItem: string) {
|
||||
// Valida se o índice está dentro dos limites do array
|
||||
if (index < 0 || index >= list.length)
|
||||
// Se inválido lança uma exceção
|
||||
throw new Error("Index fora dos limites");
|
||||
|
||||
// Substitui o item no índice especificado
|
||||
list[index] = newItem;
|
||||
|
||||
// Salva a lista atualizada
|
||||
await saveToFile();
|
||||
}
|
||||
|
||||
|
||||
// Define uma função que remove um item em um índice específico
|
||||
async function removeItem(index: number) {
|
||||
// Valida se o índice está dentro dos limites válidos do array
|
||||
if (index < 0 || index >= list.length)
|
||||
// Se inválido lança uma exceção
|
||||
throw new Error("Index fora dos limites");
|
||||
|
||||
// Remove 1 elemento a partir do índice especificado
|
||||
list.splice(index, 1);
|
||||
|
||||
// Salva a lista atualizada
|
||||
await saveToFile();
|
||||
}
|
||||
|
||||
|
||||
// Exporta um objeto contendo todas as funções
|
||||
export default { addItem, getItems, updateItem, removeItem };
|
||||
```
|
||||
|
||||
# api.turma2.ts
|
||||
|
||||
```typescript
|
||||
// Importa o módulo de gerenciamento de tarefas do arquivo core.ts
|
||||
import todo from "./core.ts";
|
||||
|
||||
// Inicia um servidor HTTP usando Bun na porta 3000
|
||||
const server = Bun.serve({
|
||||
port: 3000,
|
||||
|
||||
// Rotas e handlers HTTP do servidor
|
||||
routes: {
|
||||
// Rota raiz retorna um arquivo HTML estático
|
||||
"/": new Response(Bun.file("./public/index.html")),
|
||||
|
||||
// Rota da API para gerenciar tarefas
|
||||
"/api/todo": {
|
||||
// retorna a lista de todas as tarefas
|
||||
GET: async () => {
|
||||
// Chama a função para obter todos os itens
|
||||
const items = await todo.getItems()
|
||||
|
||||
// Retorna os itens como resposta JSON
|
||||
return Response.json(items)
|
||||
},
|
||||
|
||||
// adiciona uma nova tarefa à lista
|
||||
POST: async (req) => {
|
||||
// Extrai o corpo da requisição como JSON
|
||||
const data = await req.json() as any;
|
||||
|
||||
// Obtém a propriedade item dos dados recebidos, ou null se não existir
|
||||
const item = data.item || null;
|
||||
|
||||
// Valida se o campo 'item' foi fornecido
|
||||
if (!item)
|
||||
// Se não foi fornecido, retorna erro 400
|
||||
return Response.json('Por favor, forneça um item para adicionar.', { status: 400 });
|
||||
|
||||
// Adiciona o item à lista
|
||||
await todo.addItem(item);
|
||||
|
||||
// Retorna os dados recebidos como confirmação
|
||||
return Response.json(data);
|
||||
},
|
||||
},
|
||||
|
||||
// Rota para atualizar ou deletar uma tarefa pelo índice
|
||||
"/api/todo/:index": {
|
||||
// atualiza uma tarefa existente
|
||||
PUT: async (req) => {
|
||||
// Extrai a propriedade index da URL e converte para número
|
||||
const index = parseInt(req.params.index);
|
||||
|
||||
// Valida se o índice é um número válido
|
||||
if (isNaN(index))
|
||||
// Se não for válido retorna erro 400
|
||||
return Response.json('Índice inválido. um número inteiro é esperado.', { status: 400 });
|
||||
|
||||
// Extrai o corpo da requisição como JSON
|
||||
const data = await req.json() as any;
|
||||
|
||||
// Obtém a propriedade newItem dos dados, ou null se não existir
|
||||
const newItem = data.newItem || null;
|
||||
|
||||
// Valida se o campo newItem existe
|
||||
if (!newItem)
|
||||
// Se não foi fornecido retorna erro 400
|
||||
return Response.json('Por favor, forneça um novo item para atualizar.', { status: 400 });
|
||||
|
||||
try {
|
||||
// Tenta atualizar o item no índice especificado
|
||||
await todo.updateItem(index, newItem);
|
||||
|
||||
// Retorna mensagem de sucesso
|
||||
return Response.json(`Item no índice ${index} atualizado para "${newItem}".`);
|
||||
} catch (error: any) {
|
||||
// Se ocorrer erro retorna erro 400 com mensagem
|
||||
return Response.json(error.message, { status: 400 });
|
||||
}
|
||||
},
|
||||
|
||||
// remove uma tarefa específica
|
||||
DELETE: async (req) => {
|
||||
// Extrai o parâmetro index da URL e converte para número inteiro
|
||||
const index = parseInt(req.params.index);
|
||||
|
||||
// Valida se o índice é um número válido
|
||||
if (isNaN(index))
|
||||
// Se não for válido, retorna erro 400 com mensagem em português
|
||||
return Response.json('Índice inválido.', { status: 400 });
|
||||
|
||||
try {
|
||||
// Tenta remover o item no índice especificado
|
||||
await todo.removeItem(index);
|
||||
|
||||
// Retorna mensagem de sucesso
|
||||
return Response.json(`Item no índice ${index} removido com sucesso.`);
|
||||
} catch (error: any) {
|
||||
// Se ocorrer erro retorna erro 400 com mensagem
|
||||
return Response.json(error.message, { status: 400 });
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
// Catch all padrão para rotas não definidas
|
||||
async fetch(req) {
|
||||
// Retorna erro 404 (Não Encontrado) para qualquer rota não mapeada
|
||||
return new Response(`Not Found`, { status: 404 });
|
||||
},
|
||||
});
|
||||
|
||||
// Imprime no console a mensagem de que o servidor está rodando e em qual URL
|
||||
console.log(`Server running at http://localhost:${server.port}`);
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue