[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Tiago André Ribeiro
Criador Tiago André Ribeiro 30/07/2018

Tenho um sistema que envia mensagens para os usuarios cadastrados.

Quando envio a mensagem para os usuarios ocorre normal, mas o problema acontece quando eu tento enviar outra mensagem sem a primeira ter finalizado o envio. Alguns usuarios acabam recebendo duas vezes a mesma mensagem. 

Hoje a estrutura é a seguinte: Escrevo a mensagem e clico em enviar. Essa mensagem vai para uma tabela com status "em fila", após todas as mensagem serem adicionadas nessa tabela tem um novo job que atualizada o status para "processando", após todas serem atualizadas eu realizado o envio atualizando o status para "enviado". Mas conforme falei anteriormente, se eu realizar um novo envio enquanto esse está sendo processado ele acaba repetindo o envio.

Como posso resolver isso?

 

 

Manager Carlos Ferreira 30/07/2018

Olá Tiago!
Tudo bem?

Esse processamento das filas foi manual, ou você usou o recurso de Queues do Laravel?

Carlos Ferreira
Criador Tiago André Ribeiro 30/07/2018

Queue do Laravel.

Aqui tem uma parte do código. https://gist.github.com/tiagoandre/604573a0cd18c2d23601a379390a9a21

Tiago André Ribeiro
Manager Carlos Ferreira 30/07/2018

Obrigado por postar o código :)

Faltou o código do Model Send, ela é importante para analisar os métodos getAllSend(), sendUpdate(), getAllQueue() setDone()

Acho que tem algo não muito legal nessa implementação, talvez uma ideia superficial do projeto me dê esse tipo de visão, mas levando isso em consideração, vamos analisar a tabela sends.

Essa tabela tem muitos registros, inclusive informações duplicadas, entre ela, e a tabela messages... digo, você salva N as mensagens para cada usuário com o nome da mensagem + mensagem + tipo + user + etc.

Como essas informações da mensagem já existe na tabela Message, particularmente não vejo muito a necessidade de inserir estes registros de forma repetira na tabela sends... na minha opinião acho que fica mais fácil trabalhar com IDs, ou seja, relacionar essa tabelas, de forma que a sua tabela send sirva apenas pivô, relacionando com Message e User, e claro que tenha as informações dos status.

Uma dúvida amigo, como você vai exibir essas mensagens para usuário?
Através de views do blade (listagem tipo e-mails), ou tipo notificações (semelhante as do Facebook)?
Dependendo o que for fazer, o recurso de Notifications do Laravel se encaixe melhor.

Analisando o seu código me surgiu outra dúvida, por que precisa controlar os status do envio?
Só pegar a mensagem e processar diretamente controlando com Queues não atende?

Desculpas as dúvidas amigo, mas é porque preciso entender melhor do seu projeto para te ajudar como merece.

Também quero aproveitar a oportunidade para lhe parabenizar... confesso que infelizmente não é muito comum nas comunidades do Laravel ver tão facilmente pessoas com o seu nível intelectual, fiquei positivamente surpreso com você.

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

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!