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.
- HTML5
- CSS3
- JavaScript
- Node.js
- Express
- CORS
- Body-Parser
- Prisma
- MySQL Workbench
- Postman
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)
- Node.js instalado
- MySQL instalado e configurado
- Editor de código (ex: VS Code)
git clone https://github.com/campoos/backEnd_spotify.gitFramework minimalista e flexível para criar APIs com Node.js.
npm install express --savePermite o compartilhamento de recursos entre diferentes origens, útil quando o front-end está em outro endereço.
npm install cors --saveMiddleware que permite interpretar os dados enviados no corpo das requisições (JSON, urlencoded, etc).
npm install body-parser --saveORM (Object Relational Mapper) que facilita a comunicação entre o Node.js e o banco de dados MySQL.
npm install prisma --saveCliente gerado automaticamente pelo Prisma, usado para fazer consultas ao banco de dados dentro do seu código.
npm install @prisma/client --saveApós instalar o Prisma, inicie a estrutura padrão do ORM com o comando:
npx prisma initEsse 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 devCria uma nova música vinculando-a a um álbum, gêneros e bandas.
{
"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 }
]
}{
"status": true,
"status_code": 201,
"message": "Item criado com sucesso."
}Lista todas as músicas cadastradas com seus respectivos dados relacionados (gêneros, bandas, curtidas, etc).
{
"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
}
]
}Busca uma música específica pelo seu ID.
GET /v1/controle-musicas/musica/6
Atualiza uma música existente com novos dados.
PUT /v1/controle-musicas/musica/7
{
"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 }
]
}{
"status": true,
"status_code": 200,
"message": "Item atualizado com sucesso."
}Remove uma música do banco de dados com base no ID informado.
DELETE /v1/controle-musicas/musica/6
{
"status": true,
"status_code": 200,
"message": "Item deletado com sucesso."
}Cadastra uma nova curtida, associando um usuário a uma música.
{
"id_usuario": 1,
"id_musica": 2
}{
"status": true,
"status_code": 201,
"message": "Item criado com sucesso."
}Remove uma curtida do banco de dados com base no ID da curtida.
DELETE /v1/controle-curtidas/curtida/1
{
"status": true,
"status_code": 200,
"message": "Item deletado com sucesso."
}Cria uma nova banda e associa-a a um ou mais gêneros musicais.
{
"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 }
]
}{
"status": true,
"status_code": 201,
"message": "Item criado com sucesso."
}Retorna uma lista de todas as bandas cadastradas, incluindo seus gêneros, álbuns e músicas associadas.
{
"status": true,
"status_code": 200,
"items": 1,
"bands": [
{
"id_banda": 1,
"nome_banda": "Beatles",
"genres": [...],
"albuns": [...]
}
]
}Busca uma banda específica pelo ID, retornando também seus gêneros, álbuns e músicas relacionadas.
GET /v1/controle-bandas/banda/10
Atualiza as informações de uma banda existente.
PUT /v1/controle-bandas/banda/11
{
"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 }
]
}{
"status": true,
"status_code": 200,
"message": "Item atualizado com sucesso."
}Remove uma banda do banco de dados pelo ID.
DELETE /v1/controle-bandas/banda/1
{
"status": true,
"status_code": 200,
"message": "Item deletado com sucesso."
}Cadastra um novo álbum e o associa a uma banda existente.
{
"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
}{
"status": true,
"status_code": 201,
"message": "Item criado com sucesso."
}Lista todos os álbuns cadastrados, com suas respectivas músicas, bandas e gêneros.
{
"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": [...]
}
]
}Busca um álbum específico pelo ID.
GET /v1/controle-albuns/album/4
Atualiza os dados de um álbum existente.
PUT /v1/controle-albuns/album/2
{
"titulo": "bittersweet memories",
"capa_url": "https://th.bing.com/th/id/R.38fca9a711c46b6a0c34954caab549a5?...",
"data_lancamento": "2023-07-22",
"id_banda": 4
}{
"status": true,
"status_code": 200,
"message": "Item atualizado com sucesso."
}Remove um álbum do banco de dados pelo ID.
DELETE /v1/controle-albuns/album/3
{
"status": true,
"status_code": 200,
"message": "Item deletado com sucesso."
}Cria um novo gênero musical.
{
"nome_genero": "gospel"
}{
"status": true,
"status_code": 201,
"message": "Item criado com sucesso."
}Retorna todos os gêneros cadastrados. Alguns gêneros podem trazer também suas músicas relacionadas.
{
"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": [...]
}
]
}Retorna um gênero específico pelo ID.
GET /v1/controle-generos/genero/3
Atualiza o nome de um gênero musical.
PUT /v1/controle-generos/genero/2
{
"nome_genero": "ROCK"
}{
"status": true,
"status_code": 200,
"message": "Item atualizado com sucesso."
}Deleta um gênero do sistema com base no ID.
DELETE /v1/controle-generos/genero/3
{
"status": true,
"status_code": 200,
"message": "Item deletado com sucesso."
}Cria um novo usuário no sistema.
{
"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"
}{
"status": true,
"status_code": 201,
"message": "Item criado com sucesso."
}Lista todos os usuários cadastrados.
{
"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"
}
]
}Retorna os dados de um usuário específico pelo ID.
GET /v1/controle-usuarios/usuario/1
Atualiza os dados de um usuário específico.
PUT /v1/controle-usuarios/usuario/1
{
"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"
}{
"status": true,
"status_code": 200,
"message": "Item atualizado com sucesso."
}Remove um usuário do sistema com base no ID.
DELETE /v1/controle-usuarios/usuario/2
{
"status": true,
"status_code": 200,
"message": "Item deletado com sucesso."
}Realiza o login de um usuário com base em email e senha.
{
"email": "afroldo@gmail.com",
"senha": "123afroldo"
}{
"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"
}
]
}- O usuário envia requisições via Postman (GET, POST, PUT, DELETE)
- O servidor Node.js com Express processa a requisição
- O Prisma interage com o banco MySQL
- O resultado é retornado em formato JSON
- Disciplina: Back-End
- Professor(a): Marcel
- Instituição: SENAI Jandira - Curso Técnico em Desenvolvimento de Sistemas
- Ano/Semestre: 2025 - 3º Semestre