API desenvolvida durante um evento da Rocketseat, com foco em processamento de linguagem natural e inteligência artificial. A aplicação recebe áudios enviados pelo front-end, realiza a transcrição automática e armazena os dados em um banco de dados. Utilizando embeddings e o modelo Gemini, do Google, a API interpreta perguntas feitas pelos usuários e busca, de forma contextual, informações relevantes nos áudios transcritos para gerar respostas precisas e alinhadas ao conteúdo enviado.
- Node.js
- Fastify
- PostgreSQL com extensão pgvector para vetores
- Drizzle ORM
- Zod
- Docker - Containerização do banco de dados
- Gemini API
O projeto segue uma arquitetura modular com:
-
Separação de responsabilidades entre rotas (http/routes), schemas (db/schemas) e serviços (services)
-
Validação de schemas com Zod para garantir segurança de tipos
-
ORM type-safe com Drizzle para operações no banco de dados
-
Validação de variáveis de ambiente centralizada em services/env.ts
-
Scripts de inicialização do banco em docker/setup.sql com suporte ao Docker Compose
-
Organização clara entre camadas de dados, lógica de negócio e transporte HTTP
- Node.js (versão com suporte a
--experimental-strip-types) - Docker e Docker Compose
docker-compose up -dCrie um arquivo .env na raiz do projeto:
PORT=3333
DATABASE_URL=postgresql://docker:docker@localhost:5432/agentsnpm installnpx drizzle-kit migratenpm run db:seedDesenvolvimento:
npm run devProdução:
npm run startnpm run dev- Executa o servidor em modo de desenvolvimento com hot reloadnpm run start- Executa o servidor em modo de produçãonpm run db:seed- Popula o banco de dados com dados de exemplo
A API estará disponível em http://localhost:3333
GET /rooms- Lista as salas disponíveisGET /rooms/:roomId/questions- Lista as perguntas de uma sala específicaPOST /rooms- Cria sala de perguntasPOST /rooms/:roomId/questions- Cria uma pergunta em uma sala específicaPOST /rooms/:roomId/audio- Faz o upload do áudio salvando a trancrição no Bando de dados