📻

Seed de Rádios

Seed de Rádios Portuguesas

Visão Geral

Este documento descreve os sistemas de seed para popular a base de dados com rádios portuguesas.

Existem dois scripts disponíveis:


Script 1: Seed Rápido (30 Rádios Principais)

Descrição

O script seed-radios.ts popula a base de dados com 30 rádios portuguesas principais, curadas manualmente e validadas.

Como Executar

# Via npm script
npm run seed:radios

# Ou via ts-node
npx ts-node apps/api/src/scripts/seed-radios.ts

Base de Dados Inicial

Rádios Nacionais (Principais)

Rádios Regionais

Rádios Especializadas

Metadados Incluídos

Cada rádio inclui:

Como Executar

Método 1: Via ts-node

npx ts-node apps/api/src/scripts/seed-radios.ts

Método 2: Via npm script

npm run seed:radios

Pré-requisitos

  1. MongoDB deve estar em execução
  2. Variáveis de ambiente configuradas (.env)
  3. Dependências instaladas (npm install)

Validação dos Streams

Todos os URLs de stream foram validados e testados. As rádios incluem:

Géneros Musicais Representados


Script 2: Seed Completo (Radio Browser API)

Descrição

O script seed-radios-full.ts recolhe TODAS as rádios portuguesas disponíveis via Radio Browser API.

Funcionalidades

Como Executar

# Via npm script (recomendado)
npm run seed:radios:full

# Ou via ts-node
npx ts-node apps/api/src/scripts/seed-radios-full.ts

Parâmetros da API

O script usa os seguintes parâmetros:

{
  limit: 10000,           // Máximo possível
  order: 'clickcount',    // Ordenar por popularidade
  reverse: true,          // Mais populares primeiro
  hidebroken: true,       // Esconder rádios não funcionais
}

Volume Esperado

Metadados Adicionais

Além dos campos base, o seed completo inclui:

Estrutura de Dados

interface RadioBrowserStation {
  stationuuid: string;
  name: string;
  url_resolved: string;    // URL do stream validado
  favicon: string;         // Logo
  tags: string;            // Géneros separados por vírgula
  country: string;
  state: string;           // Cidade/região
  language: string;
  codec: string;
  bitrate: number;
  lastcheckok: number;     // 1 = funcional, 0 = quebrado
  lastHttpStatus: number;  // 200 = OK
  clickcount: number;      // Popularidade
}

Output do Script

🌱 A iniciar seed COMPLETO de rádios portuguesas...
⚠️  Este processo pode demorar vários minutos!

🌐 A recolher rádios da Radio Browser API...
📻 Encontradas 245 rádios portuguesas

✅ 187 rádios funcionais encontradas
📊 A processar rádios...

✅ [1/187] Rádio Comercial (Lisboa) - mp3@128kbps
✅ [2/187] RFM (Lisboa) - aac@64kbps
⏭️  [3/187] Antena 1 - já existe
...

📊 Sumário Final:
   ✅ Criadas com sucesso: 150
   ⏭️  Já existentes (ignoradas): 37
   ❌ Erros: 0
   📻 Total processadas: 187

🗄️  Total de rádios na base de dados: 180

✨ Seed completo de rádios concluído!

Comparação dos Scripts

Característica seed-radios.ts seed-radios-full.ts
Volume 30 rádios 100-500 rádios
Fonte Curadas manualmente Radio Browser API
Tempo ~5 segundos 2-10 minutos
Qualidade Verificada manualmente Validada automaticamente
Metadados Básicos Completos (codec, bitrate)
Uso Setup inicial rápido Base completa

Pré-requisitos

  1. MongoDB deve estar em execução
  2. Variáveis de ambiente configuradas (.env)
  3. Dependências instaladas (npm install)

Validação dos Streams

As rádios cobrem diversas regiões de Portugal:

Notas Técnicas

Schema da Base de Dados

O schema de rádio (radio.schema.ts) suporta:

{
  name: string;           // Obrigatório
  stream_url: string;     // Obrigatório, validado como URL
  logo?: string;          // Opcional
  description?: string;   // Opcional
  genres: string[];       // Array, default []
  language?: string;      // Opcional
  country?: string;       // Opcional
  city?: string;          // Opcional
  is_active: boolean;     // Default true
  createdAt: Date;        // Auto-gerado
  updatedAt: Date;        // Auto-gerado
}

Índices MongoDB

Os seguintes índices estão criados para performance:

Troubleshooting

Erro de Conexão MongoDB

# Verificar se MongoDB está em execução
docker-compose ps

# Iniciar MongoDB
docker-compose up -d mongodb

Duplicados

O script pode falhar se as rádios já existirem. Para limpar:

# Entrar no MongoDB
docker-compose exec mongodb mongosh

# Usar a base de dados
use audissey

# Limpar coleção de rádios
db.radios.deleteMany({})

Verificar Rádios Criadas

# Via MongoDB Shell
db.radios.countDocuments()
db.radios.find().pretty()

# Filtrar por cidade
db.radios.find({ city: "Lisboa" })

# Filtrar por género
db.radios.find({ genres: "Fado" })

Próximos Passos

  1. ✅ Script de seed criado e testado
  2. ⏳ Adicionar comando npm ao package.json
  3. ⏳ Integrar com CI/CD para seed automático
  4. ⏳ Criar endpoint admin para adicionar novas rádios
  5. ⏳ Implementar sistema de validação de streams (health check)

Manutenção

Para manter a lista atualizada:

  1. Verificar streams periodicamente - URLs podem mudar
  2. Adicionar novas rádios - Atualizar array portugueseRadios
  3. Remover rádios inativas - Marcar is_active: false
  4. Atualizar metadados - Corrigir descrições/géneros conforme necessário

Contribuir

Para adicionar novas rádios ao seed:

  1. Adicionar objeto ao array portugueseRadios
  2. Validar URL de stream
  3. Preencher todos os metadados obrigatórios
  4. Testar execução do script
  5. Verificar que a rádio foi criada corretamente

Data de criação: Dezembro 2025
Última atualização: Dezembro 2025
Versão: 1.0