Skip to content

campoos/backEnd_spotify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎧 backend_spotify

CRUD completo simulando funcionalidades básicas do Spotify, desenvolvido como parte da disciplina de desenvolvimento Back-End. A API permite gerenciar músicas, albúns e artistas, utilizando Node.js com banco de dados MySQL e ferramentas como Postman para testes de requisições.

🚀 Tecnologias Utilizadas

  • HTML5
  • CSS3
  • JavaScript
  • Node.js
  • Express
  • CORS
  • Body-Parser
  • Prisma
  • MySQL Workbench
  • Postman

🛠️ Funcionalidades

O projeto implementa operações CRUD completas para as seguintes entidades do sistema, simulando uma base de dados musical:

  • 🎵 Músicas

    • Cadastrar, listar, editar e excluir músicas
  • ❤️ Curtidas

    • Cadastrar curtida, visualizar, editar e excluir
  • 🎤 Bandas

    • Gerenciar informações de bandas (CRUD completo)
  • 💿 Álbuns

    • Cadastro de álbuns e gerenciamento por banda ou música
  • 🎧 Gêneros

    • Gerenciamento de estilos musicais (CRUD completo)
  • 👤 Usuários

    • (CRUD completo)
    • Login com autenticação (endpoint de login)

⚙️ Instalação e Execução

Pré-requisitos

  • Node.js instalado
  • MySQL instalado e configurado
  • Editor de código (ex: VS Code)

1. Clone o repositório

git clone https://github.com/campoos/backEnd_spotify.git

2. Instale as dependências

🔌 Express

Framework minimalista e flexível para criar APIs com Node.js.

npm install express --save

🔐 Cors

Permite o compartilhamento de recursos entre diferentes origens, útil quando o front-end está em outro endereço.

npm install cors --save

📩 Body-Parser

Middleware que permite interpretar os dados enviados no corpo das requisições (JSON, urlencoded, etc).

npm install body-parser --save

🧬 Prisma

ORM (Object Relational Mapper) que facilita a comunicação entre o Node.js e o banco de dados MySQL.

npm install prisma --save

📁 @prisma/client

Cliente gerado automaticamente pelo Prisma, usado para fazer consultas ao banco de dados dentro do seu código.

npm install @prisma/client --save

3. Inicialização do Prisma

Após instalar o Prisma, inicie a estrutura padrão do ORM com o comando:

npx prisma init

Esse comando vai criar a pasta /prisma com o arquivo schema.prisma, além do arquivo .env para configuração da URL de acesso ao banco de dados.

Depois de configurar o banco no arquivo .env, execute a migração com:

npx prisma migrate dev

🛠️ ENDPOINTS

🎵 Músicas

📥 POST /v1/controle-musicas/musica

Cria uma nova música vinculando-a a um álbum, gêneros e bandas.

🔸 Corpo da Requisição (JSON)

{
  "nome": "Something",
  "duracao": "00:03:03",
  "data_lancamento": "1969-09-26", 
  "letra": "Something in the way she moves...",
  "link": "https://youtu.be/UelDrZ1aFeY",
  "capa_url": "https://upload.wikimedia.org/wikipedia/en/4/42/Beatles_-_Abbey_Road.jpg",
  "id_album": 1,
  "generos": [
    { "id_genero": 2 },
    { "id_genero": 3 }
  ],
  "bandas": [
    { "id_banda": 1 }
  ]
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 201,
  "message": "Item criado com sucesso."
}

📤 GET /v1/controle-musicas/musica

Lista todas as músicas cadastradas com seus respectivos dados relacionados (gêneros, bandas, curtidas, etc).

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "items": 1,
  "musics": [
    {
      "id_musica": 2,
      "nome": "Something",
      "duracao": "1970-01-01T00:03:03.000Z",
      "data_lancamento": "1969-09-26T00:00:00.000Z",
      "letra": "Something in the way she moves...",
      "link": "https://youtu.be/UelDrZ1aFeY",
      "capa_url": "https://upload.wikimedia.org/wikipedia/en/4/42/Beatles_-_Abbey_Road.jpg",
      "id_album": 1,
      "genres": [...],
      "bandas": [...],
      "curtidas": 1
    }
  ]
}

🔍 GET /v1/controle-musicas/musica/:id

Busca uma música específica pelo seu ID.

Exemplo de rota:

GET /v1/controle-musicas/musica/6

✅ Resposta Esperada (mesma estrutura do GET geral)

✏️ PUT /v1/controle-musicas/musica/:id

Atualiza uma música existente com novos dados.

Exemplo de rota:

PUT /v1/controle-musicas/musica/7

🔸 Corpo da Requisição (JSON)

{
  "nome": "primavera",
  "duracao": "00:03:22",
  "data_lancamento": "2024-11-03", 
  "letra": "teste primavera",
  "link": "https://youtu.be/nbp9wXbxL0w",
  "capa_url": "https://th.bing.com/th/id/R.38fca9a711c46b6a0c34954caab549a5?...",
  "id_album": 4,
  "generos": [
    { "id_genero": 9 },
    { "id_genero": 6 }
  ],
  "bandas": [
    { "id_banda": 3 },
    { "id_banda": 10 }
  ]
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item atualizado com sucesso."
}

❌ DELETE /v1/controle-musicas/musica/:id

Remove uma música do banco de dados com base no ID informado.

Exemplo de rota:

DELETE /v1/controle-musicas/musica/6

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item deletado com sucesso."
}

❤️ Curtidas

📥 POST /v1/controle-curtidas/curtida

Cadastra uma nova curtida, associando um usuário a uma música.

🔸 Corpo da Requisição (JSON)

{
  "id_usuario": 1,
  "id_musica": 2
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 201,
  "message": "Item criado com sucesso."
}

❌ DELETE /v1/controle-curtidas/curtida/:id

Remove uma curtida do banco de dados com base no ID da curtida.

Exemplo de rota:

DELETE /v1/controle-curtidas/curtida/1

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item deletado com sucesso."
}

🎤 Bandas

📥 POST /v1/controle-bandas/banda

Cria uma nova banda e associa-a a um ou mais gêneros musicais.

🔸 Corpo da Requisição (JSON)

{
  "nome_banda": "Beatles",
  "foto_url": "https://storage.lacapitalmdp.com/2022/10/The-Beatles.jpg",
  "biografia": "é os beatles",
  "email_login": "beatles@gmail.com",
  "senha": "123",
  "telefone_contato": "1111-1111",
  "email_contato": "beatles_profissional@gmail.com",
  "generos": [
    { "id_genero": 1 },
    { "id_genero": 2 }
  ]
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 201,
  "message": "Item criado com sucesso."
}

📤 GET /v1/controle-bandas/banda

Retorna uma lista de todas as bandas cadastradas, incluindo seus gêneros, álbuns e músicas associadas.

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "items": 1,
  "bands": [
    {
      "id_banda": 1,
      "nome_banda": "Beatles",
      "genres": [...],
      "albuns": [...]
    }
  ]
}

🔍 GET /v1/controle-bandas/banda/:id

Busca uma banda específica pelo ID, retornando também seus gêneros, álbuns e músicas relacionadas.

Exemplo de rota:

GET /v1/controle-bandas/banda/10

✅ Resposta Esperada (mesma estrutura do GET geral)

✏️ PUT /v1/controle-bandas/banda/:id

Atualiza as informações de uma banda existente.

Exemplo de rota:

PUT /v1/controle-bandas/banda/11

🔸 Corpo da Requisição (JSON)

{
  "nome_banda": "Beatles",
  "foto_url": "https://storage.lacapitalmdp.com/2022/10/The-Beatles.jpg",
  "biografia": "é os beatles",
  "email_login": "beatles@gmail.com",
  "senha": "123",
  "telefone_contato": "1111-1111",
  "email_contato": "beatles_profissional@gmail.com",
  "generos": [
    { "id_genero": 13 }
  ]
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item atualizado com sucesso."
}

❌ DELETE /v1/controle-curtidas/curtida/:id

Remove uma banda do banco de dados pelo ID.

Exemplo de rota:

DELETE /v1/controle-bandas/banda/1

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item deletado com sucesso."
}

💿 Álbuns

📥 POST /v1/controle-albuns/album

Cadastra um novo álbum e o associa a uma banda existente.

🔸 Corpo da Requisição (JSON)

{
  "titulo": "Abbey Road",
  "capa_url": "https://upload.wikimedia.org/wikipedia/en/4/42/Beatles_-_Abbey_Road.jpg",
  "data_lancamento": "1969-09-26",
  "id_banda": 1
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 201,
  "message": "Item criado com sucesso."
}

📤 GET /v1/controle-albuns/album

Lista todos os álbuns cadastrados, com suas respectivas músicas, bandas e gêneros.

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "items": 1,
  "albuns": [
    {
      "id_album": 1,
      "titulo": "Abbey Road",
      "capa_url": "...",
      "data_lancamento": "1969-09-26T00:00:00.000Z",
      "id_banda": 1,
      "musics": [...]
    }
  ]
}

🔍 GET /v1/controle-albuns/album/:id

Busca um álbum específico pelo ID.

Exemplo de rota:

GET /v1/controle-albuns/album/4

✅ Resposta Esperada (mesma estrutura do GET geral)

✏️ PUT /v1/controle-albuns/album/:id

Atualiza os dados de um álbum existente.

Exemplo de rota:

PUT /v1/controle-albuns/album/2

🔸 Corpo da Requisição (JSON)

{
  "titulo": "bittersweet memories",
  "capa_url": "https://th.bing.com/th/id/R.38fca9a711c46b6a0c34954caab549a5?...",
  "data_lancamento": "2023-07-22",
  "id_banda": 4
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item atualizado com sucesso."
}

❌ DELETE /v1/controle-albuns/album/:id

Remove um álbum do banco de dados pelo ID.

Exemplo de rota:

DELETE /v1/controle-albuns/album/3

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item deletado com sucesso."
}

🎧 Gêneros

📥 POST /v1/controle-generos/genero

Cria um novo gênero musical.

🔸 Corpo da Requisição (JSON)

{
  "nome_genero": "gospel"
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 201,
  "message": "Item criado com sucesso."
}

📤 GET /v1/controle-generos/genero

Retorna todos os gêneros cadastrados. Alguns gêneros podem trazer também suas músicas relacionadas.

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "items": 5,
  "generos": [
    {
      "id_genero": 5,
      "nome_genero": "gospel"
    },
    {
      "id_genero": 4,
      "nome_genero": "rap"
    },
    {
      "id_genero": 3,
      "nome_genero": "trap",
      "musics": [...]
    }
  ]
}

🔍 GET /v1/controle-generos/genero/:id

Retorna um gênero específico pelo ID.

Exemplo de rota:

GET /v1/controle-generos/genero/3

✅ Resposta Esperada (mesma estrutura do GET geral)

✏️ PUT /v1/controle-generos/genero/:id

Atualiza o nome de um gênero musical.

Exemplo de rota:

PUT /v1/controle-generos/genero/2

🔸 Corpo da Requisição (JSON)

{
  "nome_genero": "ROCK"
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item atualizado com sucesso."
}

❌ DELETE /v1/controle-generos/genero/:id

Deleta um gênero do sistema com base no ID.

Exemplo de rota:

DELETE /v1/controle-generos/genero/3

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item deletado com sucesso."
}

👤 Usuários

📥 POST /v1/controle-usuarios/usuario

Cria um novo usuário no sistema.

🔸 Corpo da Requisição (JSON)

{
  "nickname": "Afroldo",
  "foto_url": "https://i.ytimg.com/vi/nCtfTvYfXY8/hqdefault.jpg",
  "email": "afroldo@gmail.com",
  "senha": "123afroldo",
  "data_cadastro": "2025-05-12",
  "data_nascimento": "2007-09-11"
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 201,
  "message": "Item criado com sucesso."
}

📤 GET /v1/controle-usuarios/usuario

Lista todos os usuários cadastrados.

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "items": 1,
  "usuarios": [
    {
      "id_usuario": 1,
      "nickname": "Afroldo",
      "foto_url": "https://i.ytimg.com/vi/nCtfTvYfXY8/hqdefault.jpg",
      "email": "afroldo@gmail.com",
      "senha": "123afroldo",
      "data_cadastro": "2025-05-12T00:00:00.000Z",
      "data_nascimento": "2007-09-11T00:00:00.000Z"
    }
  ]
}

🔍 GET /v1/controle-usuarios/usuario/:id

Retorna os dados de um usuário específico pelo ID.

Exemplo de rota:

GET /v1/controle-usuarios/usuario/1

✅ Resposta Esperada (mesma estrutura do GET geral)

✏️ PUT /v1/controle-usuarios/usuario/:id

Atualiza os dados de um usuário específico.

Exemplo de rota:

PUT /v1/controle-usuarios/usuario/1

🔸 Corpo da Requisição (JSON)

{
  "nickname": "Afroldo",
  "foto_url": "https://i.ytimg.com/vi/nCtfTvYfXY8/hqdefault.jpg",
  "email": "afroldo1@gmail.com",
  "senha": "123afroldo",
  "data_cadastro": "2025-05-12",
  "data_nascimento": "2007-09-11"
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item atualizado com sucesso."
}

❌ DELETE DELETE /v1/controle-usuarios/usuario/:id

Remove um usuário do sistema com base no ID.

Exemplo de rota:

DELETE /v1/controle-usuarios/usuario/2

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "message": "Item deletado com sucesso."
}

🔐 POST /v1/controle-usuarios/usuario-login

Realiza o login de um usuário com base em email e senha.

🔸 Corpo da Requisição (JSON)

{
  "email": "afroldo@gmail.com",
  "senha": "123afroldo"
}

✅ Resposta Esperada

{
  "status": true,
  "status_code": 200,
  "users": [
    {
      "id_usuario": 1,
      "nickname": "Afroldo",
      "foto_url": "https://i.ytimg.com/vi/nCtfTvYfXY8/hqdefault.jpg",
      "email": "afroldo@gmail.com",
      "senha": "123afroldo",
      "data_cadastro": "2025-05-12T00:00:00.000Z",
      "data_nascimento": "2007-09-11T00:00:00.000Z"
    }
  ]
}

🧠 Como o projeto funciona

  1. O usuário envia requisições via Postman (GET, POST, PUT, DELETE)
  2. O servidor Node.js com Express processa a requisição
  3. O Prisma interage com o banco MySQL
  4. O resultado é retornado em formato JSON

🧾 Créditos

  • Disciplina: Back-End
  • Professor(a): Marcel
  • Instituição: SENAI Jandira - Curso Técnico em Desenvolvimento de Sistemas
  • Ano/Semestre: 2025 - 3º Semestre

About

API RESTful desenvolvida para simular o funcionamento de uma plataforma de streaming musical.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors