[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Elizandro Echer
Criador Elizandro Echer 27/07/2019

Olá Carlos,

 

Vou tentar explicar minha necessidade:

 

Na minha API tenho algumas tabelas que possuem um campo 'order' que serve para ordenar os itens em uma ordem específica, no front pretendo utilizar um plugin para modificar a ordem dos itens com drag and drop e após alterar preciso pegar a nova ordem de todos os itens e atualizar na API. Então teria que chamar uma requisição PUT para cada item informando o paramentro order, correto?

 

Pensei em montar todas as requisições em um array com um forEach e utilizar o método axios.all();

 

Ex.:

 

let requests = [

    axios.put('https://projeto/api/products/1', {'order': 2})

    axios.put('https://projeto/api/products/2', {'order': 3})

    axios.put('https://projeto/api/products/3', {'order': 1})

]

 

axios.all([$requests])

.then(response => console.log(response))

.catch(errors => console.log(errors))

 

Seria essa a melhor forma ou existe outro método melhor?

E utilizando vuex, como ficaria? Coloco toda essa lógica dentro de uma action 'updateProductsOrder' e passaria um array de objetos, com o 'id' e o 'order' de cada item como parâmetro?

 

Ou ainda será que seria mais interessante fazer essa lógica na API, com um endpoint 'https://projeto/api/products/reorder' que recebe um array de arrays contendo o 'id' e 'order' como parâmetro e fazer o update por lá, para ter menos requisições?

Manager Carlos Ferreira 27/07/2019

Olá, Elizandro!
Tudo bem?

O ideal seria pegar diretamente no frontend um array com o ID do registro + Ordem (nova ordem), porque assim você envia apenas uma única requisição com um array com a ordem atualizada de cada produto, e na API basta atualizar os registros e está ok.

O array criado no frontend precisaria ter esse formato:
let ordes = [
    {
        product: 1,
        order: 2
    },
    {
        product: 2,
        order: 3
    },
    {
        product: 3,
        order: 1
    },
    {
        product: 4,
        order: 2
    }
]

Entendeu a ideia amigo?

Carlos Ferreira
Criador Elizandro Echer 27/07/2019

Olá Carlos,

 

Acho que entendi, para isso eu criaria uma nova rota na API do tipo PUT para receber esse array, que por sua vez vai enviar os dados da requisição para um método 'reorder' no controlador, certo?

 

Ex.: 'https://projeto/api/products/reorder'

 

Elizandro Echer
Manager Carlos Ferreira 27/07/2019

Exatamente amigo.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!