Skip to content
@Tune-Bridge

Tune-Bridge

🎵 TuneBridge

Transfira suas playlists e músicas entre diferentes serviços de streaming de forma simples e eficiente.

TuneBridge é uma aplicação web que permite transferir playlists entre plataformas de streaming como Spotify, YouTube Music, Apple Music, SoundCloud e outros, resolvendo o problema de migração de bibliotecas musicais entre serviços.

📋 Índice

🎯 Sobre o Projeto

TuneBridge nasceu da necessidade de facilitar a migração entre serviços de streaming de música. Ao invés de recriar manualmente suas playlists favoritas ao trocar de plataforma, o TuneBridge automatiza esse processo através de integração com as APIs oficiais dos provedores.

Como Funciona

  1. Conecte suas contas - Autentique-se com os serviços de origem e destino via OAuth 2.0
  2. Selecione suas playlists - Escolha quais playlists você deseja transferir
  3. Transferência inteligente - O sistema mapeia as músicas e cria automaticamente as playlists no destino

✨ Funcionalidades

MVP (Versão Atual)

  • ✅ Autenticação de usuário (registro/login)
  • ✅ Conexão com contas externas via OAuth 2.0
  • ✅ Integração com Spotify
  • ✅ Leitura de playlists do serviço origem
  • ✅ Mapeamento inteligente de faixas
  • ✅ Criação automática de playlists no destino
  • ✅ Dashboard do usuário
    • Visualização de contas conectadas
    • Histórico de transferências
    • Status em tempo real
  • ✅ Transferências gratuitas

Provedores Suportados

Provedor Status Leitura Escrita
Spotify 🚧 Em Desenvolvimento - -
YouTube Music 📅 Planejado - -
Apple Music 📅 Planejado - -
SoundCloud 📅 Planejado - -

🛠 Tecnologias

Frontend

  • Angular - Framework principal
  • TypeScript - Linguagem de programação
  • RxJS - Programação reativa
  • Angular Material - Componentes UI (opcional)
  • NgRx - Gerenciamento de estado (futuro)

Backend

  • Java 17+ - Linguagem de programação
  • Spring Boot - Framework
  • Spring Security - Autenticação e autorização
  • Spring Data JPA - Persistência de dados
  • JWT - Tokens de autenticação
  • PostgreSQL - Banco de dados relacional
  • Redis - Cache e filas
  • RabbitMQ - Processamento assíncrono (opcional)

Infraestrutura

  • Docker - Containerização
  • Docker Compose - Orquestração local
  • GitHub Actions - CI/CD
  • Nginx - Proxy reverso (produção)

🏗 Arquitetura

Estrutura do Projeto

TuneBridge/
├── tunebridge-frontend/     # Aplicação Angular
│   ├── src/
│   │   ├── app/
│   │   │   ├── modules/
│   │   │   │   ├── auth/           # Autenticação
│   │   │   │   ├── dashboard/      # Dashboard do usuário
│   │   │   │   ├── transfer/       # Transferência de playlists
│   │   │   │   ├── providers/      # Conectores de provedores
│   │   │   │   └── shared/         # Componentes compartilhados
│   │   │   ├── core/
│   │   │   └── services/
│   │   └── environments/
│   └── ...
│
├── tunebridge-backend/      # API Spring Boot
│   ├── src/
│   │   └── main/
│   │       ├── java/
│   │       │   └── com/tunebridge/
│   │       │       ├── controllers/    # REST Controllers
│   │       │       ├── services/       # Lógica de negócio
│   │       │       ├── repositories/   # Acesso a dados
│   │       │       ├── models/         # Entidades JPA
│   │       │       ├── config/         # Configurações
│   │       │       └── security/       # Segurança JWT/OAuth
│   │       └── resources/
│   └── ...
│
└── docker-compose.yml       # Orquestração dos serviços

Fluxo de Transferência

┌─────────────┐     OAuth      ┌──────────────┐
│   Usuário   │ ◄─────────────► │   Provedor   │
└──────┬──────┘                 │   (Spotify)  │
       │                        └──────────────┘
       │ 1. Conecta contas              ▲
       ▼                                │
┌─────────────┐                         │ 3. API calls
│  Frontend   │                         │
│  (Angular)  │                         │
└──────┬──────┘                         │
       │ 2. Solicita transferência      │
       ▼                                │
┌─────────────┐     4. Processa    ┌────┴─────┐
│   Backend   │ ───────────────────►│  Worker  │
│ (Spring)    │ ◄───────────────────│  (Async) │
└──────┬──────┘     5. Atualiza    └──────────┘
       │            status
       ▼
┌─────────────┐
│ PostgreSQL  │
│   + Redis   │
└─────────────┘

📊 Modelo de Dados

Principais Entidades

User

id: UUID (PK)
email: VARCHAR(255) UNIQUE
password_hash: VARCHAR(255)
created_at: TIMESTAMP
updated_at: TIMESTAMP

ServiceAccount

id: UUID (PK)
user_id: UUID (FK)
provider: ENUM (spotify, youtube, apple, soundcloud)
access_token: TEXT (encrypted)
refresh_token: TEXT (encrypted)
expires_at: TIMESTAMP
refresh_metadata: JSONB
created_at: TIMESTAMP

Track

id: UUID (PK)
title: VARCHAR(500)
artists: JSONB (array)
album: VARCHAR(500)
duration_ms: INTEGER
external_ids: JSONB (map provider->id)
created_at: TIMESTAMP

Playlist

id: UUID (PK)
user_id: UUID (FK)
provider: ENUM
provider_id: VARCHAR(255)
name: VARCHAR(500)
track_count: INTEGER
created_at: TIMESTAMP
updated_at: TIMESTAMP

TransferJob

id: UUID (PK)
user_id: UUID (FK)
from_provider: ENUM
to_provider: ENUM
playlist_from_id: VARCHAR(255)
playlist_to_id: VARCHAR(255) (nullable)
status: ENUM (created, mapping, transferring, done, failed)
matched_tracks: INTEGER
unmatched_tracks: INTEGER
log: JSONB
created_at: TIMESTAMP
updated_at: TIMESTAMP
completed_at: TIMESTAMP

📦 Pré-requisitos

  • Node.js >= 18.x
  • npm >= 9.x
  • Java >= 17
  • Maven >= 3.8
  • Docker >= 20.x
  • Docker Compose >= 2.x
  • PostgreSQL >= 14 (ou via Docker)
  • Redis >= 7 (ou via Docker)

Obtendo Credenciais OAuth

Spotify

  1. Acesse Spotify Developer Dashboard
  2. Crie um novo app
  3. Configure Redirect URIs: http://localhost:8080/api/oauth/spotify/callback
  4. Copie Client ID e Client Secret
  5. Habilite os escopos: playlist-read-private, playlist-modify-public, playlist-modify-private

🔌 API Endpoints

Autenticação

POST   /api/auth/register          - Criar usuário
POST   /api/auth/login             - Login (retorna JWT)
GET    /api/user                   - Perfil do usuário

Provedores

GET    /api/providers              - Lista provedores suportados
GET    /api/oauth/{provider}/authorize  - Inicia OAuth
GET    /api/oauth/{provider}/callback   - Callback OAuth

Playlists

GET    /api/{provider}/playlists           - Listar playlists
GET    /api/{provider}/playlists/{id}      - Detalhes e faixas

Transferências

POST   /api/transfer               - Criar transferência
GET    /api/transfer/{id}          - Status e logs
GET    /api/transfers              - Histórico do usuário
DELETE /api/transfer/{id}          - Cancelar transferência

Exemplo de Request

# Login
curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"senha123"}'

# Criar transferência
curl -X POST http://localhost:8080/api/transfer \
  -H "Authorization: Bearer SEU_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "from_provider": "spotify",
    "to_provider": "youtube",
    "playlist_id": "37i9dQZF1DXcBWIGoYBM5M",
    "options": {
      "overwrite": false,
      "match_tolerance_ms": 2000
    }
  }'

🔒 Segurança

Medidas Implementadas

  • HTTPS obrigatório em produção
  • Tokens criptografados no banco de dados (AES-256)
  • JWT para autenticação stateless
  • Rate limiting por usuário e IP
  • CSRF protection para OAuth flows
  • Validação de redirect URIs
  • Sanitização de inputs
  • Hash de senhas com BCrypt
  • Secrets management via variáveis de ambiente
  • CORS configurado para frontend específico

Boas Práticas

  • Nunca commitar credenciais no código
  • Rotacionar tokens regularmente
  • Monitorar acessos suspeitos
  • Manter dependências atualizadas
  • Realizar auditorias de segurança

🗺 Roadmap

Versão 1.0 (MVP) - 🚧 Em Progresso

  • Autenticação básica
  • OAuth com Spotify
  • Transferência de playlists
  • Dashboard do usuário

Versão 1.1 - 📅 Planejado

  • Integração com YouTube Music
  • Melhorias no algoritmo de matching
  • Edição manual de mapeamento
  • Notificações em tempo real

Versão 1.2 - 📅 Planejado

  • Integração com Apple Music
  • Integração com SoundCloud
  • Transferência em lote (múltiplas playlists)
  • Filtros avançados

Versão 2.0 - 🔮 Futuro

  • Aplicativo mobile (PWA)
  • Planos pagos
  • Sincronização automática de playlists
  • Suporte a podcasts
  • API pública para desenvolvedores

🤝 Contribuindo

Contribuições são sempre bem-vindas! Para contribuir:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/MinhaFeature)
  3. Commit suas mudanças (git commit -m 'Adiciona MinhaFeature')
  4. Push para a branch (git push origin feature/MinhaFeature)
  5. Abra um Pull Request

Diretrizes

  • Siga os padrões de código do projeto
  • Escreva testes para novas funcionalidades
  • Atualize a documentação quando necessário
  • Seja respeitoso nos comentários e reviews

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

Popular repositories Loading

  1. tunebridge-backend tunebridge-backend Public

    Java

  2. .github .github Public

  3. tunebridge-frontend tunebridge-frontend Public

    TypeScript

Repositories

Showing 3 of 3 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…