1
resposta

[Dúvida] Método post para músicas cria um novo artista mesmo se já houver cadastro no banco

Olá!

Estou testando os métodos para música e a única maneira que consegui fazer a inserção de músicas através do post foi passando um JSON com os dados completos, caso contrário aponta exception.

Método:

app.MapPost("/Musicas", ([FromServices] DAL<Musica> dal,
    [FromBody] Musica musica) =>
{
    dal.Adicionar(musica);
    return Results.Ok();
});

JSON de teste para o post:

{
    "nome": "Teste",
    "anoLancamento": 2000,
    "artista": {
        "nome": "Foo Fighters",
        "bio": "Foo Fighters é uma banda de rock alternativo americana formada por Dave Grohl em 1995.",
        "fotoPerfil": "https://cdn.pixabay.com/photo/2016/08/08/09/17/avatar-1577909_1280.png"
    }
}

A questão é que está criando o mesmo artista no banco, mesmo quando ele já existia previamente:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Como consigo contornar isso?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá, Gabriela? Como vai?

Para evitar a criação duplicada de artistas ao adicionar uma nova música, você pode verificar se o artista já existe no banco de dados antes de adicioná-lo. Aqui está uma abordagem que você pode seguir:

  1. Verifique se o artista já existe: Antes de adicionar o artista, faça uma consulta no banco de dados para verificar se o artista já está cadastrado.

  2. Utilize o artista existente: Se o artista já existir, utilize o ID do artista existente em vez de criar um novo.

Aqui está um exemplo de como você pode implementar isso:

app.MapPost("/Musicas", ([FromServices] DAL<Musica> dalMusica, [FromServices] DAL<Artista> dalArtista, [FromBody] Musica musica) =>
{
    // Verificar se o artista já existe no banco de dados
    var artistaExistente = dalArtista.ObterPorNome(musica.Artista.Nome);
    
    if (artistaExistente != null)
    {
        // Usar o artista existente
        musica.Artista = artistaExistente;
    }
    else
    {
        // Adicionar o novo artista
        dalArtista.Adicionar(musica.Artista);
    }

    // Adicionar a música
    dalMusica.Adicionar(musica);
    
    return Results.Ok();
});

Certifique-se de que o método ObterPorNome em DAL<Artista> esteja implementado para buscar um artista pelo nome. Isso ajudará a evitar a duplicação de artistas no banco de dados.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.