[Música] antes de gente começar essa aula eu quero te mostrar uma feature uma funcionalidade do herd então clica aqui no no her na opção que vai ficar na sua barra e vai em configurações tá assim que você abrir as configurações aqui na na aba General tem essa opção aqui de her paths que que ele fala aqui Que todos os os subfolders né as pastas dentro desse desses diretórios elas vão se tornar disponíveis como um domínio local Olha que legal então o que que isso quer dizer quer dizer que se eu vier aqui clicar em mais
vi no meu sites ou qualquer pasta que você quiser toos os subdiretórios eles vão se tornar domínios então fica muito mais fácil de eu acessar e eu não preciso ficar e executando o PHP artesan serve o tempo Inteiro então por exemplo aqui eu tenho duas pastas com dois arquivos index.php com hello world lá dentro Eu vou clicar em Open para ficar barra code barra sites aqui dentro agora eu vou lá no meu Firefox e vou digitar teste pon teste que é o domínio padrão do her né o domínio raiz Olha aqui que legal eu acessei
teste. teste ou teste 2. test né então você pode usar essa essa funcionalidade para facilitar a sua vida então por exemplo nosso Projeto se eu acessar FH ptest eu entro no meu site tá vendo Claro que ele tá todo desconfigurado por qu porque eu preciso rodar npm Run Dev tá ele compilar todos os assets e pra Dev Então olha aí tá então se eu acessar FH PDV porque está dentro de um diretório chamada FH ele já acessa Ah dessa maneira Olha que legal tá então só uma dica rápida para para que você possa tirar o
máximo proveito do her tá então fica muito bom Beleza então vamos continuar aqui temos que fazer a parte de enviar uma proposta Então vamos voltar para nosso código entendeu o que temos Ah temos aqui o meu Project show o meu Project show proposals então o que que eu vou fazer eu vou criar mais um um componente Live Wire que vai ficar responsável pelo formulário Tá então vamos lá então vou vir aqui vou abrir uma nova aba Ahã PGP artisan Make a Live Wire make Live Wire eu vou digitar projects Create perdão proposals Create tá esse
aqui vai ficar dentro de proposals Create e aqui nós vamos ter o nosso formulário no nos componentes que eu já disponibilizei aqui eu já tenho o o formulário Card simples layout dentro de ui eu tenho modal aqui um modal Zinho Que eu criei para vocês Ah o que que ele vai ter ele vai ter uma combinação de Live Wire com Alpine JS então você que não conhece Alpine JS Alpine JS ele é um Framework java script extremamente leve com foco em vamos dizer que em te D poderes direto em tags HTML para você não escrever
tanto tanto JavaScript assim né então por exemplo eu tenho aqui ó x data quer dizer que eu tô criando eu tô Abrindo um componente Zinho que nesse contexto eu vou ter uma variável chamado Open que ela inicializa no estado falso e quando eu fizer um clique nesse botão eu vou mudar a variável de Open para true e aqui eu tenho um cenário de de controle que assim que Ah eu troco eu coloco x show eu vou verificar essa variável Então se ela for verdadeira eu mostro conteúdo senão não então ele é muito simples e ele
foi criado pelo mesmo criador do livewire então a Compatibilidade entre os dois é é absurda né eles são feitos um para o outro né eles foram casados um para o outro então a gente tem várias várias possibilidades para poder usar os dois juntos então nesse cenário o que que eu tenho aqui eu tenho um componente que eu tenho um uma variável show modal que eu vou usar essa variável para mostrar o o dialog não né mostrar o o modal Zinho ou não então através dessa desse variável de controle e eu tenho E esse essa diretiva
aqui a o entangle que eu vou fazer o seguinte e esse esse componente modal Ele tá esperando que seja usado dentro de um Live Wire de um componente Live Wire e esse componente Live Wire me diz que eu preciso ter uma variável chamado modal então toda vez que pelo livewire eu mudar essa variável modal ele vai fazer a sincronia com o meu Alpine olha que massa e aí eu consigo ter um um controle entre os dois Isso quer dizer o quê que Assim que pelo Live Wire também eu avisar olha toda vez que eu tiver
um clique nesse botão eu vou setar variável para falso ele vai esconder e ele vai mostrar Tá bom então então se eu vier aqui ah se eu vier então lá no nosso componente proposals Create o que que nós temos que fazer nós vamos ter Ah o nosso modal que fica dentro de proposals for então Proposals ah for tá esse aqui na verdade eu assim eu coloquei todos eles dentro de um componente para para que você possa ver e facilitar e nada te impede também de pegar isso aqui e colocar tudo aqui dentro para você ter
mais direto controle direto no componente Live é uma escolha tua tá Ah você pode deixar ou lá dentro do dos componentes ou aqui fora nesse caso eu vou deixar aqui fora porque a gente vai ter bastante controle Dos inputs e de como a gente vai trabalhar e etc então eu vou preferir trazer aqui fora para você ter mais visibilidade tá então Ó então a gente vai ter o nosso Wire modal né então vamos voltar pra nossa tela aqui vou dar um Reload Ah eu vou garantir de que aqui no meu show eu tenha eu carregue
o meu Live Wire proposals Create tá então ele não apareceu na tela aind Vamos dar uma olhada agora que que a gente vai fazer ou perdão aqui no vai ser no show no show Blade dentro de Live Wire eu vou ter eu vou ter o meu Card e eu vou ter o meu proposal Create tá então aqui ele já me deu ele já fou tudo por eu preciso trazer aqui o meu qual spam e Grid calls calls um Call spam 2 aqui pronto tá E por que que eu tô Adicionando uma div porque o Live
War requer que o minha raiz ou seja o meu arquivo o meu início de tudo para eu adicionar vários elementos eu preciso ter só uma div ele só ele só pode carregar uma só div tá e depois eu coloco eles dentro deles então proposal Create o meu proposal Create ele tem um modal esse modal Ele vai esperar que eu tenha uma variável chamada modal no meu componente Live Wire então aqui no meu componente Live Wire eu vou criar uma Variável buana do tipo com nome modal inicializar ela como falso tá lá no meu projects card
no botão tá eu vou adicionar o seguinte vou trocar tudo isso aqui para Wire Click e setar a variável modal para true Beleza então vamos voltar lá na teoria se eu clicar aqui ele tem que aparecer o modal vamos dar uma olhada do porquê que que faltou aqui então Missing closing Tags ure show modal não está definido Ah tá vamos dar uma olhada aqui vamos trocar no Project Factory V eu vou tirar esse Random HTML tá gerando HTML todo torto e eu vou fazer PHP artisan migrate fres seed tá ou mfs deixa eu voltar aqui
agora vamos dar uma olhada console a propriedade modal não pode ser encontrada no proposals Create tá vamos dar uma olhada aqui Proposals proposal Create justo eu coloquei precisa precisa estar ligado diretamente no no componente que eu estou criando né modal é igual a falso pronto então neste cenário ó vamos trocar aqui vamos tirar do show então o show ele tem o project card e o Project Card é que tem o botão certo então como é que a gente pode fazer essa amarração do project card chamando o proposals Create o que que eu posso fazer eu
posso vi aqui tirar o proposals Create aqui vamos lá no nosso Card novamente e eu vou fazer o seguinte eu vou o meu componente aqui por o meu componente ele vai ter ele vai ser esse botão ele vai mostrar esse botão e aí dentro dele eu vou ter o controle de abrir ou não Tá então vamos lá no nosso Create Blade então eu vou trazer esse botão Para cá é claro que eu vou fazer um Wap de tudo com Mad Porque eu só posso ter uma div né certo então eu vou ter esse botão e
eu vou ter o modal então na teoria continuo tudo igual na hora que eu clico agora eu tenho um controle legal do que tá acontecendo porque faz sentido esse meu esse meu proposals Create ser esse botão né Porque neste meu cenário só ele que vai ter este poder de abrir ou não o o meu modal certo olha aí que bacana Tá Beleza então fizemos isso vamos fazer a parte de de enviar uma proposta então o formulário de Fato né então aqui eu tenho o envie uma proposta Eu vou vou colocar um form em volta disso
tudo para que nós possamos ter um poder de quando clicar enter ele já submeter né então eu vou amarrar todo ele aqui dentro vamos ver se continua o mesmo conceito Ah eu vou colocar aqui classe Flex e um espaçamento de seis para poder Manter o espaçamento para não precisar ficar abrindo o tempo todo olha que legal o que que a gente pode fazer lá dentro do componente livewire eu vou trocar de falso para true isso quer dizer que ele vai manter sempre aberto eu não preciso ficar clicando tá então eu vou ter aqui agora como
é que eu vou amarrar n as variáveis os meus inputs para fazer um forme no meu back porque essa é a grande vantagem do Live War né eu mando As informações pro Back e eu controlo tudo lá de uma maneira mais simples então eu vou fazer o seguinte eu vou fazer no momento do submit e eu vou fazer um no momento do submit aqui eu vou fazer um vou ter um uma uma função chamada save tá então eu vou criar aqui Public function save e nesse save eu vou ter o seguinte eu vou esperar que
eu tenha uma propriedade chamada ã e-mail e uma propriedade chamada horas Certo beleza então a minha propriedade aqui e-mail vai ser do tipo string tá e eu vou ter uma propriedade inteiro chamado ours que foi isso que Nós criamos no nosso Create proposal né Nós temos e-mail e nós temos horas tá e precisamos também do projeto o projeto eu posso receber Project Project no momento que eu estiver carregando o meu componente Ou seja eu o proposals o meu show proposals ele tem essa informação certo Que é aqui ele recebe isso E no momento do card
lá dentro do card eu eu posso vir aqui e passar o meu Project também para dentro do meu componente Create tá então esse aqui eu já carrego esses dois aqui eles ainda não vão carregar então o que que eu vou fazer eu vou fazer o seguinte olha dentro de dentro do meu projects meu Project que eu acabei de criar eu vou ter eu tenho todos os meus proposals certo e eu quero criar uma nova aqui e Eu vou criar como o meu e-mail vai receber TH e-mail o meu Hours vai receber th Hours Tá beleza
então vamos ver se isso aqui funciona É claro uma coisa que a gente tem que fazer agora na não vai funcionar na verdade por Eu Preciso Dizer paraos meus inputs que eles estão amarrados com a propriedade Live e assim como im vi react que a gente tem Que colocar uma informação aqui no nosso input né tipo no vi v mod tá então é um v mod E aí o nome do meu da minha variável que no caso aqui eil no Live eu adiciono mod então eu ponho Wire Model e model War Model é Hours tá
bom prec acessado PR antes de inicializar justo que que a gente tem que fazer aqui vamos colocar um valor padrão porque senão ele não inicializa e a gente não Consegue isso aqui é do PHP então na teoria uma vez que a gente tá sub mudando aqui eu ten um e-mail Então vamos lá teste @email.com e as horas ah eu vou submeter prop f m assignment tá uma coisinha duas coisinhas que a gente tem que arrumar aqui uma coisa é toda vez que eu estou mudando o clicando nesse botão ou nesse botão ele está submetendo form
por qu porque eu não adicionei aqui o tipo do botão tá Eu não adicionei o tipo do botão isso aqui ele tá se eu não coloco o tipo do botão como só Button ele vai achar que isso aqui é tudo um submit né e ele não e ele vai ficar submetendo o form o tempo todo por isso que ele toda vez que eu clicava lá e aqui aparecia a validação de e-mail né que não está correto então aqui agora eu tenho melhor e na hora que eu enviar a proposta Eu tenho esse erro tudo bem
esse erro é o seguinte eu já expliquei Ah acredito que eu já tenha explicado que é o laravel tem uma proteção paraas para para Mod para você não poder fazer mass assignment ou seja não poder adicionar criação com formato de Array tá então o que que a gente pode fazer nós vamos lá nos models e proposal e eu vou adicionar aqui um aqui no user uma propriedade que é o fillable e eu passo o que que eu posso criar dessa Maneira então aqui eu vou ter eil e eu vou ter horas e agora eu consigo
criar elementos criar propostas tá passando a rei senão se eu não usasse dessa maneira e não tivesse o fillable qual que era a maneira que eu poderia criar Ah eu teria que criar um novo uma nova proposta em formato de de objeto então proposal igual a new proposal e aqui preencher cada uma das informações então por exemplo Project ID seria this Project id e preencher cada uma delas e no final dar um save aí eu não preciso adicionar naquele proposal lá tá naquele fillable Mas como eu quero dessa maneira a gente adiciona no filb para
ter uma proteção um controle melhor tá então vamos lá agora que que eu vou fazer vou vir aqui vou digitar um e-mail vou digitar teste @email.com vou colocar e enviar proposta bosta não deu nenhum erro na teoria tá isso aqui já foi registrado vamos ver no Banco de dados vamos olhar aqui no nas propostas e eu vou reordenar pelo mais antigo pelo mais novo Olha aqui tá vendo Então as nossas propostas funcionou direitinho só vamos dar uma olhada nas horas daqui por que ele ele não veio as horas corretas eu vou dar um DD des
Hours vou voltar no Firefox eu vou clicar aqui e ele não está atualizando Então vamos no no frontend novamente proposal Create aqui eu tenho a Wire Model Hours Wire Model Hours ã por quê pelo seguinte por caso desse meu x Model aqui Ah isso aqui está me atrapalhando então o que que a gente pode fazer eu vou colocar aqui Hours e assim como eu fiz assim como eu fiz no usando entangle eu vou colocar aqui também entangle Hours e aqui vai ser hours e eu Não preciso diso aqui vamos dar uma olhada então Hours e
Hours aqui na verdade tem que ser acho que agora dá para ser Ah vamos dar uma olhada mudou enviou certinho tá então eu amarro uma variável uma variável do Live Wire com uma variável do Alpine por quê Porque esse controle aqui o @ click eu estou fazendo via alpinejs tá beleza show E aí ele atualiza o meu R models então funcionou certinho vamos Voltar no no no componente na classe e salvar novamente então teste @email.com eu vou mudar para 5 Vamos no banco de dados atualizei agora deu certinho dentro do projeto certo horas e teste
e meil Tá mas poxa eu deixei o cara criar duas propostas n Então temos algumas possibilidades se ele colocar o mesmo e-mail a gente pode vir aqui e fazer uma atualização ou criar eu posso fazer um update ou Create nessa minha Proposta Tá mas ten que fazer uma leve mudança o update orate ele você pode passar duas propriedades as duas propriedades são o seguinte a primeira são os atributos e a segunda são os valores os atributos vão ser usados para fazer a consulta no banco de dados para ver se aquele aquele registro existe para ser
atualizado tá enquanto os valores ele simplesmente vai usar para adicionar no banco de dados e uma coisa interessante é que ele vai fazer se Caso eu estou fazendo uma criação ele vai monar esses dois arris para poder fazer o Create Então a gente vai continuar tendo o e meil e vai continuar tendo as horas Mas neste cenário a gente não vai criar um registro novo tá então o que que eu vou fazer aqui eu vou deletar essa linha pra gente ter somente um teste e eu vou mudar de cinco para dois talvez então teste @email.com
eu vou mudar aqui para Vamos mudar para 12 Vando enviar uma proposta Voltei no banco de dados a atualizei e olha aqui que legal mudou para 12 eu só tenho um registro de teste pon eil tá simplesmente com essa mudança segundo passo validação né aqui eu tenho uma validação uma validação na verdade não tenho nenhuma validação tá vendo Acabei de criar um registro vazio tenho nada a única validação que eu tenho é se eu adicionar alguma coisa que ele não é um e-mail Válido por causa do tipo do do input que eu coloquei né como
Adicionei como e-mail tá então como é que a gente faz primeira coisa vamos adicionar uma uma função aqui chamada validate que ele já existe dentro do componente Live e aqui eu vou utilizar atributos tá então ó validate ou pode ser regra também os dois funcionam iguais Qual que é a minha regra de validação Ah eu vou dizer que isso que é required ou perdão não no modal né no e-mail e ele é do tipo e-mail Tá olha que massa e aqui nas horas eu vou dizer que ele é obrigatório ele é do tipo Number e
ele precisa ter no no mínimo uma hora então como ele é do tipo numérico ele fala Opa tem que ser maior do que um no mínimo um tem que ser maior que zero né Ou a gente pode fazer assim ó granden zero ou maior que zero os dois funcionam vamos dar uma olhada ã antes de eu fazer isso eu vou vir aqui no meu Create e eu vou mostrar esse erro como que eu vou Mostrar esse erro tem uma diretiva chamada @error e eu vou passar e-mail e aqui eu vou transmitir a mensagem então Então
essa minha diretiva aqui ele vai verificar se na sessão eu tenho um erro de e-mail e ele já vai criar uma variável para mim do tipo message então eu vou vir aqui vou adicionar uma div vou colocar Tex 600 e um e Tex ao que assim tá bom Ó vou clicar método Number não existe justo é numeric numeric pronto lá validation required beleza então aqui a nós precisamos ter a nossa a nossa validação a a nossa mensagem de validação e aqui no validation required Ah o laravel ele já possui uma Biblioteca de textos né de
de mensagens de validação então se nós viermos no terminal e fizermos PHP artisan leng publish ele vai criar alguns arquivos para nós dentro de resources ah perdão dentro de da Raiz leng e como você pode ver aqui nós temos em inglês as mensagens de validação tudo bonitinha né então o que que isso quer dizer quer dizer que Se nós formos o nosso ponto env e mudamos para inglês ir lá no nosso Firefox carregar perdão eh Não é daquela maneira é só em inglês ó o campo ele mostra uma mensagem muito mais elegante né ó campo
e-mail é obrigatório assim como a as horas deixa eu colocar no nosso Create Blade eu vou colocar aqui também as nossas horas ou aqui vai ser hours então Ó o câ precisa ser maior do que zero Tá bem então a nossa validação ela está funcionando mas nosso sistema em português né Queremos que seja em Português então o que que eu vou pedir para você fazer eu vou pedir para você procurar aqui no no Google tá e procura assim laravel pt br tradução o Lucas kudo sim Lucas kudo e aqui ele já tem um pacote que
ele já traduz ele já tem todos esses elementos traduzidos E aí facilita a nossa vida né então o que que a gente tem que fazer a gente já fez o langage publish vamos copiar este Ah comando para instalar o pacote no no ambiente de Dev vamos voltar lá no Firefox e nós vamos publicar essa tag esse vendor né publicar esses arquivos de vendor com essa tag então ele vai copiar os arquivos para dentro do nosso diretório tá ah em português tá vendo ele criou um PTBR e o PT então com isso voltar aqui no nosso
ponto env podemos voltar a ser PTBR no nosso loque que agora quando nós enviarmos uma proposta nosso campo de validação ele está correto tá ele está bonitinho beleza só isso então você pode Vir aqui no no terminal agora se você quiser e dá um un install nesse aqui ou remove né reinstall um eu escrevi errado né uninstal para poder remover porque a gente não vai mais precisar então ele a gente Já copiou para dentro do nosso projeto dentro de leng tá o nosso arquivo nossos arquivos de tradução tbr tá esse arquivo aqui Jon ele funciona
ele já tá vendo ele já traz um monte de opções aqui se caso você quiser alguns textos como é que funciona a tradução no Larv tá então ele tem algumas algumas e funções por exemplo und und ou l mais utilizada andore andore se você vier aqui e colocar Hours por exemp exemplo Ah ele vai procurar dentro desse PT Jon né Se caso não for nenhuma chave vai procurar em todos esses arquivos na verdade out pagination password validation o Jon é mais quando é textos né então acho que não talvez não vai ter Hours aqui mas
se eu colocar Hours lá ó tá aparecendo em inglês se eu vier no Arquivo PTBR json e aqui eu colocar uma chave Hours eu vou colocar ele tem que transferir para horas tem que ser dupl n vou voltar para Firefox Ó lá ele já traduziu Então você consegue ter tradução de todos os seus textos de todas as suas coisas simplesmente utilizando Essas funções tá o a função ela vai procurar quando é textos assim dentro do Jon ou dentro desses arquivos por Chaves e uma chave né uma com dot Notation então um que é são digamos
referências né então por exemplo nent do arquivo de validação Eu tenho um accepted então se eu criar aqui um horas Ah eu vou esperar que mostre horas o que que eu tenho que carregar é validation que é o nome do arquivo tá ponto o nome da chave que é horas né a nossa chave é horas então ponto horas ele vai mostrar da mesma maneira tá só para você ver como mudou ó minhas horas das validações do do validation do Validation Ó lá Minas horas do validation tá então dá para você fazer dessa maneira também então
eu vou voltar aqui como era horas e tudo bem então ó fizemos a validação dos nossos Campos fizemos a ah salvar no banco de dados Ah o que que nós temos que fazer então eu vou fechar esse modal na verdade vamos Adicionar este elemento aqui que eu preciso concordar né eu preciso concordar com o meu o meu Ah com o meu elemento ali então como é que a gente faz essa parte então eu validei o meu formulário eu posso criar um novo o Nossa propriedade aqui chamada ah agree El não vai ser falso e eu
faço o seguinte se caso o meu agree for falso eu vou adicionar um erro chamado agree mesmo é o nome do campo e você Precisa precisa concordar concordar com os termos de uso tá beleza Isso aqui vai Adicionar nos erros pra gente com uma mensagem de erro para validação Então vamos lá no nosso form eu vou pegar isso aqui e vou adicionar aqui embaixo mas nesse caso é agree vamos ver então concordo o nosso input precisa ser o Wire Model agree né eu preciso ele precisa mapear daquele jeito então vamos voltar Aqui vamos ver o
que eu estou recebendo desse agreen então eu vou fazer um eu vou fazer os dois para ver como que é o retorno se está sendo verdadeiro ou falso tá então ó true então ele está aparecendo aqui ótimo então vamos lá Então adicionei o o erro ag então aqui vamos dar uma olhada nisso aqui Então quando a gente usa o eror a gente tá manualmente controlando o sistema de validação Então esse validate ele ele vai funcionar ele vai mostrar automaticamente assim que isso aqui for falso né ou seja Quando essas regras elas não estiverem sido cumpridas
então o que que a gente pode fazer vamos mudar isso aqui pro para baixo e eu vou dar um return ou seja para não continuar nada nesse método e se caso isso acontecer Então agora que que a gente tem a gente tem aqui o um teste @email.com coloquei e Opa você precisa concordar com os termos de uso concordei ele enviou ótimo enviado com sucesso agora sego último passo é só eu fechar o modal então eu mudo para falso Então vou mudar aqui teste email.com novamente mudei para quatro enviar a proposta e pronto Fechou tá aqui
o meu teste certinho Tá beleza Vamos cometar vamos comitar isso aqui né vou pegar aqui fazer um Git AD então Git comit traço M ã salvando proposta tá salvei proposta vamos ah finalizar alguns detalhes essa parte aqui ó encerramento vamos adicionar a um componente livewire que ele vai ficar mostrando isso aqui tá de tempos em tempos ó de cada um segundo Beleza então vamos criar um componente novo L voar make Light Wire Project timer pro pra gente seguir certinho então ele vai receber Public Project e vai receber a proposta né aqui eu vou criar uma
propriedade computada function que vai ser meu Timer ou seja eu vou acessar esse método direto aqui né Então vou eu vou trazer lá do meu project card Cadê o meu timer aqui meu timer é isso aqui encerra em vou pegar isso aqui tudo vou trazer para cá então o que que nós precisamos ter aqui aqui eu tenho dias né então tem várias maneiras de de fazer isso aqui eu posso eu vou fazer mais simples 10 horas a Minutos e segundos tá V já vou carregar isso aqui para dar erro lá mesmo e vai dar erro
Live Wire projects timer e vou passar o meu Project referência então se eu voltar no Firefox enable to find component projects timer Live Wire projects timer timer oh beleza agora tem os erros corretos eu Não tenho dia não tenho nada Vamos pro timer vou fazer o seguinte vamos aqui na na renderização mesmo passar as variáveis Então eu tenho 10 eu vou colocar um eu tenho horas vou colocar 2 minutos 3 e segundos 4 então na teoria ele tem que tá mostrando vamos fechar esse nosso Create né Vamos colocar aqui falso para não ficar atrapalhando a
gente então ten aqui ó 1 2 3 4 Tá então eu preciso ter a diferença do meu da data do horário que vai finalizar para agora né então eu tenho o meu endet Ah então comparado agora qual que é a minha diferença de data Então esse aqui é o meu dif tá vendo Então é this project this project então se eu dar isso aqui eu tenho uma diferença eu tenho uma propriedade Ah um objeto de Carbon interval que eu tenho a minha diferença Em minutos dias horas segundos e etc tá vendo aqui ah eu posso
passar D para Dias h para horas I para minutos e s para segundos então eu vou usar Exatamente isso então dif vai ter h para horas h para horas D para Days dif em minutos e dif em Seconds Tá bom então agora eu tenho ó para acabar em 19 hor e 8 4 3 tem minutos em 19 horas na verdade não é m né m é de mês Aí pronto 19 horas 26 Mas como é é que eu faço para eu não para atualizar isso aqui para ele ficar atualizando eu vou aqui no meu timer
e eu coloco isso aqui ó Wire Pool só isso vamos ver Wire [Música] Pool Vamos aqui na documentação do Live Wire pra gente fazer um double check né então Wire vamos fazer Basic Usage então Pool ele vai atualizar cada 2.5 segundos não vamos mudar para cada um segundo wipol pon 1 segundo TR vamos ver se está atualizando certinho networking wipol eu escrevi errado certeza É com dois Ls Beleza então agora um segundo 1 segundo 1 segundo 1 segundo ótimo tá e sim poderíamos fazer isso aqui via JavaScript no front PR aliviar request Back e etc
sim poderíamos fazer eu só tô querendo te mostrar possibilidades Tá bom eu tô querendo te mostrar possibilidades aqui com livewire ó ele fica calculando certinho beleza ótimo fizemos aessa nossa primeira parte já vamos fazer um comite Então vamos colocar aqui a timer do projeto tá segunda parte Vamos colocar aqui as horas corretas de cada uma dessas Propostas Tá bom então vamos aqui livewire propostas aqui eu tenho dentro de components proposals index eu tenho este elemento né as propostas que estão vindo do projeto e a posição e o item aí no item eu tenho aqui o
time proposal time não é time aqui na verdade são horas pronto então já ajustei aqui a quantidade de horas tenho que Ordená-los pelo maior certo eu tenho que ordenar pelo maior então no meu index Eu estou passando proposals o tamanho dos proposals eu tenho projects proposals e aqui eu passo os meus proposals tá aqui o que que eu posso fazer eu posso falar o seguinte eu posso abrir uma consulta em vez direto todos os itens do relacionamento e eu vou fazer Order buy Ou eu vou fazer latest e vou fazer um get tá para trazer
os últimos não tem que ser Order by horas certo e Order by Desk ou seja descendente ordeno descendente em vez de ascendente do mais alto pro mais novo tá vendo beleza e eu vou fazer algo mais tá aqui dentro do nosso componente então projects proposals ã eu vou criar uma propriedade computada pra gente deixar o controle e a regra de Negócio da pesquisa toda aqui então eu vou ter proposals que vai me retornar Esse projeto aí proposals eu vou abrir minha query e vou fazer a mesma coisa aqui Order Desk por horas e vou fazer
um get tá eu tenho que avisar pro meu componente Live que essa função ela é uma propriedade computada Ou seja que através do Fronte aqui do meu componente de front do HTML Eu vou acessar essas propostas a aquela função Através de uma propriedade Então ela se mantém igual não tivemos é uma mudança aqui nenhum erro mas a minha regra de negócio tá aqui por quê Porque agora eu posso ter um controle muito maior de de quantidade de limite então por exemplo aqui no meu no meu loop Eu estou fazendo um loop eh eu estou travando
aqui 10 elementos aqui mas eu não quero travar 10 elementos aqui eu quero trazer todas as propostas Então nesse caso tenho mais do que 10 tá vendo Por quê Porque eu quero paginar aqui então Ou seja eu vou ter um controle de quantos eu vou mostrar então quantidade ou carregar quantidade vai ser padrão 10 e eu vou ter um limite aqui ó um limite ah de 10 tá então quantidade é isso quantidade então aqui eu já travo novamente para 10 quando eu clicar carregar mais mais eu quero mostrar mais eu quero que mostrar mais 10
Tá bom então vamos lá então o que que eu posso fazer Aqui várias possibilidades ã eu vou criar uma nova função Opa perdão Ah eu vou criar a load more e eu vou fazer essa quantidade mais ou igual a 10 seja ela mesmo adicionando mais 10 tá então lá no meu index P Blade eu tenho SM meu carregar mais eu vou adicionar o quê Wire Click L more tá então aqui eu tô carregando 10 vou clicar e ele já me mostra mais 10 ótimo mas eu só posso mostrar este botão se eu tiver mais certo
como é que eu Faço isso como é que eu vou eh como é que eu faço isso dentro L eu poderia fazer uma outra consulta verificando Olha tem mais do que 10 ou a quantidade e eu bato e faço todo toda essa diferença poderia mas como nós estamos falando de um Framework Ah eu posso utilizar uma função em vez de limite e get eu posso utilizar uma função chamado paginate isso vai me vai me trazer um objeto já com várias informações né n ah e uma dessas funções chama has pages Ou has more pages ou
tem mais ela tem mais né existem mais elementos dentro dessa minha loja sim ou não então eu posso utilizar isso então nada muda no meu front no meu comportamento Também nada muda mas agora eu tenho a seguinte possibilidade proposals has more pages então se tiver mais eu mostro sen não não então cliquei não tenho mais Nenhum elemento o botão desaparece Olha que legal e sim o laravel também se caso você quiser ele já vem a proposals com paginação botid ou se dentro dele mesmo então se eu adicionar links ele já tem elemento de paginação aqui
ó então se eu mudar o meu componente de paginate para paginate a Simple paginate Olha só eu tenho meu sistema de paginação bonitinho em vez de carregar mais que foi o que eu mesmo implementei certo então ele já tem essas Possibilidades tá então eu vou utilizar vamos utilizar o pagin nesse caso Porque eu só tô carregando mais mesmo então ele faz menos consultas no banco de dados eu vou tirar esse links ótimo temos os nossos Nossa paginação Ah vamos mudar esse aqui qual foi a última vez que alguém publicou né eu posso eu vou deixar
essa minha regra aqui também então eu vou criar uma nova Last proposal Time Eu vou fazer eu vou fazer uma outra consulta no banco de dados Project proposals latest first e de at for humans então o é um carbons e o for humas ele é um uma função dentro do Carbon né então o que que eu tô fazendo ó fil ordena pelo Último tá e pega para mim o primeiro elemento então ele vai fazer um limite um tá então aqui eu vou mais uma vez colocar como um computed eu vou lá no paginate e eu
vou trocar isso aqui por this last proposal time foi esse método que eu criei foi esse método que eu criei Ah então perdão não é a é created a última vez que foi criada a do nosso projeto ó lá Há 17 minutos funciona de primeira e mais uma vez uma vez que nós estamos com com a nossa linguagem setada para português né o próprio Carbon ele já identifica que estamos em português e ele traduz pra gente tá então aqui a publicação foi feita há 17 minutos atrás aqui temos que pegar o total de elementos o
total de elementos então aqui o Simple paginate é os métodos que ele tem é a próxima página e A página atual ã ele não me mostra o total que eu tenho então se eu mudar para paginate eu tenho o total então eu vou usar paginate nesse cenário por porque a gente precisa atualizar esse cara aqui quantos de fato tem então vamos lá pro nosso index eu não vou mostrar o Size of proposal eu vou mostrar Total 12 ó eu tenho 12 no total então aqui eu mostrando só 10 n poderia vir Aqui e mostrar mais
só cinco tá vendo e aí eu mostro de cinco em cinco ó cinco né Assim fica mais legal mais bonitinho tá então mostro o meu cinco tá e a maneira como eu estou mostrando esses ícones já como Vencedor e etc e tal Ah fica no proposal item o propos item eu tô passando a posição do do do Array né do loop né do da coleção que eu tenho então quando eu faço um for each Ah o for each ele me Traz uma variável chamada loop que eu tenho várias informações dentro dela Inclusive a posição atual
do registro então na posição atual do registro deixa eu pegar aqui para você ah eu tenho um outro componente Zinho que é o proposals position e aqui eu faço Ah aqui eu faço o seguinte olha se a posição for zero ele vai ser dessa cor né E vai mostrar o o troféu o o o troféu vai mostrar o troféu esses aqui eu Coloquei simplesmente para referência mas eu vou deixar todos eles Iguais por enquanto porque essa questão de subir e descer a gente vai fazer já já tá então aqui eu deixei então 1 do TR
3 1 2 3 4 Vamos colocar aqui maior que quatro Não esse aqui vai ser o padrão então maior do que do tá então maior do que do Deixa eu tirar esse cara daqui sintaxe error vamos tirar esse cara daqui Tirar esses dois elementos pronto Fique tranquilo maior do que dois tá então primeiro segundo terceiro e todos os outros beleza Tá então temos o que que a gente vai fazer agora eu quero que uma vez que a gente enviar a proposta Eu quero enviar uma mensagem para esse meu componente aqui para ele ele já mostrar
então por exemplo aqui nós Temos um elemento que deixa eu só fazer uma correção aqui a gente quem ganha na verdade quem manda menos menos tempo né não mais tempo é quem consegue fazer em menos tempo então deixa eu fazer aqui latest Order by pronto É esse aqui mesmo que quem consegue fazer em menos horas ganha né então eu quero enviar na hora que enviar uma proposta quero avisar esse Componente para atualizar e já mostrar na hora o que que aconteceu como que a gente faz isso primeiro deixa eu deletar este este elemento e eu
vou deletar esse cara aqui também porque eu não posso ter ninguém com zero né então vou deletar o meu teste e mail também para deixar só o com os valores bem alto n Então tem um de três um de 33 e etc pode então o que que eu vou fazer no meu componente de Create eu vou fazer um disparar um Evento falando o seguinte Ah e aqui eu posso colocar o texto que eu quiser tá proposal Creed por exemplo eu vou avisar todo mundo ah ou eu posso avisar um componente específico Tá mas no caso
aqui eu só vou disparar proposal created lá no meu proposals aqui no render eu vou ter uma outra atributo chamado então quando deixa eu carregar essa essa classe tá então é um atributo On Quando acontecer o qu quando proposal created ele vai acionar este método ele vai renderizar vamos ver se isso aqui funcionou Então vou colocar teste email.com e aqui eu vou colocar uma hora concordo e ó já atualizou tá já atualizou Olha que legal rápido assim simples assim Beleza então já tenho estes elementos funcionando tá próximo passo vamos ver aqui quem que Subiu e
quem que desceu no nosso no nosso registro e tem qual estratégia que a gente vai herdar nisso aí então o que que a gente vai fazer toda vez que a gente criar uma proposta Ah no momento que a gente criar uma uma proposta Na verdade nós vamos ver qual que vai ser a posição dela naquela lista e aí a gente vai colocar o seguinte se ela ganhou posição ou se ela perdeu posição vamos ver como que a gente vai fazer Isso claro antes da gente seguir em frente vamos fazer um commit então avisando o componente
proposals que uma nova proposta uma nova proposta foi criada Tá bom então vamos lá vamos ver como que a gente vai fazer isso aqui e tem que acontecer lá no meu propostos Create então ah partir do momento que eu criar eu tenho que ter alguma maneira de Salvar no banco de dados o estato eh da ordem né da posição que ele tava Então a gente vai ter que fazer uma mudança ali no no na proposal que é a posição dela referente a esse projeto tá ã então uma a gente vai ter todos eles né então
uma vez que eu fazer o update or Create eu tenho que fazer ã eu tenho que fazer uma consulta no banco de dados novamente para eu verificar qual que vai ser a Nova posição dessa proposta tá ã E aí vê se tem alguém naquele lugar se tiver alguém naquele lugar eu vejo se ele tá se ele é melhor as horas são maiores ou menores E aí marcar que se se ele ganhou ou perdeu daquele registro então a pessoa que ganhou fica como seta para cima e a pessoa que perdeu a posição fica com seta para
baixo Então vamos Seguir assim e pra gente fazer isso nós vamos adicionar ah dois elementos deixa eu abrir aqui novamente o nosso Create nós vamos adicionar nova duas novas colunas no banco de dados tá bom ah a primeira nós vamos adicionar posição de fato pra gente controlar qual posição ele tá e o posição o position status que vai ser se a gente fez ele subir ou descer de nível tá Então nesse Contexto eu vou mostrar para você uma outra possibilidade de você utilizar consultas ou fazer mudanças no banco de dados através de um de uma
classe chamada DB que vai de dar a opção de você executar query pura no banco de dados então eu quero te mostrar essa possibilidade também então vamos lá então a gente vai voltar pro nosso terminal e vamos fazer make PHP artisan né PHP artisan make migration e vamos adicionar add Position to proposals table bom então add vamos abrir a nossa migration nova e vamos adcionar as seguintes colas né Vamos adicionar uma coluna de unsign integer que vai ser de position e vamos colocar unsign un você vai ser uma string mesmo vou colocar se foi subiu
ou desceu up and down então position ST tá bom e as duas vão entrar como nulles eu posso Adicionar elas como NES e no Down que é o movimento reverso eu faço um drop colums e aqui eu passo o nome das colunas então position e position stadus Tá bom então assim que eu rodar agora PGP artisan migrate ele vai migrar essas minhas novas colunas tá bom ã eu vou vi dentro de proposal eu vou lá no meu Create agora vou começar a brincadeira então o que que eu vou Fazer eu vou criar um método aqui
pra gente deixar separado porque este save aqui ele controla a criação de fato do propos então o que que eu vou fazer eu vou criar um mtodo aqui que é arrange positions tá bom e eu vou passar para ele o meu projeto novo a minha proposal novo criada então proposal eu vou passar para ele o meu propos que eu vou eu vou necessitar dele eu vou necessitar dele então eu vou criar um novo método aqui Pra gente se concentrar neste método então ele vai receber um proposal certo então o primeiro passo que vamos fazer tá
nós vamos procurar no banco de dados e o que que eu já vou fazer aqui na nossa migration Price seed ah Database seeder eu já vou fazer um seed para cada aqui temos o projeto então para cada projeto eu já vou Reordenar tá eu vou deixar este elemento ordenado como que eu vou fazer isso eu vou fazer isso aqui ó eu vou abrir um DB Então tem que ser suporte façade suporte façade DB como nesse cenário eu estou utilizando um banco de dados picolite então cada banco de dados tem a sua maneira de fazer as
coisas né eu vou utilizar uns métodos picolite para poder criar esse essa opção de de posição então se eu voltar aqui no no banco de Dados eu vou abrir um cite que que eu posso fazer eu posso fazer cura todo mundo que é que vem do proposals onde o projeto é igual ao três que é o que eu estava trabalhando certo então as posições estão vazias Como que eu posso fazer eu posso utilizar de uma função chamada R Number e eu falo olha faz uma uma numeração sobre a Order by sobre as horas então como
p e aqui eu consigo ter minha posição de acordo com as horas que foram criadas tá Vendo Beleza então eu utilizo isso aqui para poder fazer o update Então vamos lá como que eu faço isso eu crio uma tabela temporária com with então eu posso dar nome que eu quiser eu vou colocar rank proposals como aí abre e fecho parênteses e aqui eu crio minha tabela né então vai ser select ID aí Row Number over ah Order by a sobre as horas como P eu vou dar um nome de p tá Da onde dos Proposal
E é claro que aqui ah eu vou fazer um Range de tudo tá vamos dar uma olhada aqui sobre vamos ver se a gente consegue fazer o seguinte sobre Project id e horas então eu quero eu quero fazer dessa maneira então Order by Project ID legal então o que que isso aqui me faz vamos dar uma olhada na Minha nova [Música] posição então não na verdade não preciso desse Project ID porque eu vou est fal Trabalhando dentro desse contexto mesmo né então Ótimo então eu vou fazer aqui we proposals ah depois de criado onde o
meu Project ID é igual a Project dois pontos Project eu vou usar essa referência para poder para poder passar um valor para ela tá bom então agora logo em seguida eu faço update proposals eu faço um set position é igual a select position na verdade P Da onde Da minha Tabela nova criada do meu ranked proposals então rank proposals tá onde proposals pid iG ranked proposals pid então pego ID aqui e comparo com a Ed aqui e pego a posição tá bom E claro onde eu vou aqui eu filtro de novo pelo Project id e
n nós vamos dar uma olhada no resultado tenho que fazer como segundo parâmetro aqui o biding ou seja esse Project qual que é esse Project é do meu da minha variável ali em cima Né Tá bom então com isso aqui eu consigo atualizar o meu rank né o meu meu elemento então vamos fazer o migration fres seed e vamos dar uma olhada no banco de dados eu vou abrir aqui o proposals e Ó Minha nova posição tá certinha eu vou fazer um filtro aqui pela três vamos dar uma olhada e ela tem que bater com
a ordem desse aqui á funcionou legal tá bom funcionou exatamente como eu esperava então com isso aqui em mente Nós vamos vir aqui já temos a nossa primeira leva atualizada Então agora que que eu vou fazer eu vou pegar de novo eu vou fazer uma consulta no banco de dados para poder para poder pegar os dados agora eu vou utilizar o método select vou pegar todos os dados e eu vou fazer novamente o r Number para eu ver a Minha nova posição meu novo ordenamento para ver como está porque com esse resultado eu Vou eu
vou dar o nome de New position tá from propos aí eu vou deixa eu organizar aqui porque com esse nova posição eu vou comparar Olha o a quy o o a proposa que eu acabei de entrar Qual que é a nova posição dela a E3 tem algum alguém que tá nessa posição tem aí eu faço a substituição tá Project ID é igual ao nosso Project e aqui eu faço o binding novamente Project é igual e da onde que eu vou Pegar esse Project do proposal criado então proposal Ten o meu Project ID nele tá bom
então aqui eu tenho a minha cor então peguei esses dados legal então qual que é a minha posição a posição do meu proposal eu vou fazer um collect que isso aqui ele me retorna uma Red objetos então eu vou fazer um collect e com essas coleções eu posso fazer um filtro mais simples nela Então me traga onde a posição é igual a o meu Query tá o meu New position na verdade é é igual o ID Qual que é a minha posição do propos então perdão aqui é ID então de acordo com a ID Qual
que é a Minha nova posição a é tal Legal tem alguém ah other eu vou colocar other proposal então alguma outra proposta existe dentro desse nessa posição agora sim eu utilizo position então eu vou colocar position e aqui eu vou colocar first tá para poder trazer só um então position e aqui eu dei o nome de New Position então New position tem alguém com essa essa opção então se caso tiver Se caso tiver o que que eu faço tá o que que eu vou fazer eu vou pegar esse essa minha proposta e eu vou atualizar
o meu position status para up porque eu vou tomar o lugar dela entendeu eu vou tomar o lugar dela e o meu Order proposal eu vou atualizar só que para atualizar este cara aqui ele Não é mais um uma coleção não é mais um Model né não é mais um eloquente ah dos proposals ele é um banco um um objeto do banco de dados Então como que a gente faz eu posso vir aqui escrever proposal Ah criar uma query eu faço Where where perdão eu abro uma query update [Música] Where update perdão proposal eu tô
pegando proposal certo perdão proposal qu Where ID é igual a Order proposal ID aqui eu faço update qual que vai ser position status então eu marco que ela foi alterada por último eu de fato reorganizo tudo para poder padronizar para poder limpar então eu posso dar Duas opções né posso ter copiar isso aqui e colocar aqui ou eu posso criar uma outra classe que vai fazer isso por exemplo eu posso eu posso vir aqui no app criar um um folder chamado de Actions E aí eu crio uma nova uma nova classe uma classe PHP chamada
arrange ranks Range positions Opa perdão deixa eu apertei enter sem querer aqui Deixa eu deletar e criar novamente então PP file Class arrange positions tá e a gente deixa este elemento podemos criar nome de Run aqui dentro recebendo o qu recebendo um ID um Project id e é só isso que ele faz ó então eu carrego essa classe até deixar como estático e com estático Nós não precisamos instanciar né criar um objeto desta desse dessa classe então tanto no ceder aqui eu troco para arrange positions Run e ele vai rodar o Mesmo o mesmo a
a mesma lógica como no cre eu falo arrange positions Run aí eu passo proposal Project ID Tá bom vamos ver como isso aqui funciona vamos ver se isso aqui funciona Vamos pro Firefox Ah tenho aqui o meu registro eu vou criar então um com 5 horas então teste email.com 1 2 3 4 5 concordo enviar então não tenho update proposal 7 zer position Stars eu coloquei algum arrei Errado aqui exatamente aqui faltou não é uma vírgula é uma é uma flecha então ele acabou criando e para evitar com que isso aqui aconteça tá que n
eu acabei criando E aí não atualizou corretamente eu posso encapsular tudo isso aqui dentro de uma transaction olha que legal para evitar com que esse problema ocorra tá então eu travo dentro de uma transaction Então se acontecer algum Problema ele não vai entrar então teste email.com Eu acho que eu coloquei C1 L eu vou colocar quatro dessa vez para ele atualizar então atualizou 4 horas vamos ver o que aconteceu vamos ver o que aconteceu no banco de dados então eu vou vir aqui ó então meu torf caliu que era posição um ele virou posição ele
ficou como dá a única coisa que a gente tem que ajustar é porque que ele não atualizou aqui para up então position status iG up eu sei o Por porque lá no nosso proposal o nosso fillable ele não está aqui então como a gente tá utilizando essa funcionalidade para poder atualizar ele precisa estar no fillable tá então com isso ele vai atualizar agora que que a gente vai fazer nós vamos pegar aqui o do 21 do dank e vamos colocar um 20 então teste e-mail com 3l.com Vamos colocar 20 aqui e enviar a proposta voltar
no Blanco de dados Então agora eu Tenho o meu teste no lugar do danc ele subiu up and down lindo né com isso podemos voltar no nosso componente de item nosso proposal position e ter o quê ter Aquelas nossas Ah os outros ícones né então nós passamos aqui position e também nós passamos se o status o status deste elemento então tenho proposal tenho position ah o proposal aqui vai ser Proposal e position status tá aqui eu eu adiciono mais um mais uma propriedade para esse meu componente Blade que é o status e agora eu posso
brincar com ele então se ele não tiver entre os primeiros ele vai tá aqui certo ah então vamos lá então se caso o meu status for igual a up else sen não se o status for igual a Down se não e aí eu eu fecho aqui com Meu and if Tá eu vou colocar o ícone então o Icone eu já tenho é o icons provavelmente é esse up e a mesma coisa então vamos dar uma olhada aqui ui icons ah Arrow up e Arrow Down tá então Arrow up e eu vou copiar a classe aqui
para ficar igual e Arrow Down vamos dar uma olhada lá olha lá eu ganhei eu subi e ele desceu Olha que bacana Olha que Bacana e o teste meio ganhou posição e o Duncan desceu Vamos colocar aqui 27 vou colocar Jeremias emil.com vou pôr 27 ó lá o Jeremias subiu e o outro desceu então funcionou exatamente como a gente queria tá acredito que finalizamos essa parte tudo certinho e vamos fazer o seguinte nós vamos ah criar uma lógica de quando nós enviarmos uma proposta a nós vamos mandar uma notificação pro dono da proposta falando que
ele que recebeu uma Nova proposta tá um e-mail mesmo como é que a gente faz isso primeiro a gente vai voltar aqui você ver como é bem simples eu vou aqui então atualizando atualizando posições tá atualizando posições então o que que eu vou fazer eu vou criar uma notificação make notification Ah que vai ser New proposal e essa notificação ela vai ficar aqui dentro da do diretório notifications tá Ah ela recebe um objeto que Ou seja a pessoa que tá notific que tá vai ser notificado e por qual canal então a gente pode determinar vários
canais tá aqui é um objeto do New message que ele já vai criar com um padrão e a gente pode já atualizar os registros aqui então como é que eu vou fazer eu vou ter na minha linha aqui ó nova proposta Você recebeu uma nova proposta Ah e aqui veja o seu projeto eu vou colocar o RL Do projeto aqui tá então route Project show e eu vou ter que receber o projeto Ah o projeto nessa classe que vai ser aqui no Construtor então eu vou receber este elemento aqui então Project tá então toda vez
que eu notificar eu tenho que passar um projeto para qual estou notificando tá então aqui obrigado simples assim tá como é que a gente ativa isso aqui vamos lá no nosso proposal Create novamente então eu vou vou fazer isso aqui então eu tenho o Na no Project eu tenho quem que é o autor certo o criador então eu falo olha Eh desse projeto Project eu tenho o autor e o autor eu quero notify passando o quê o new prop e passando claro eu tenho que passar o projeto aqui para dentro então o autor ele pode
ser notificável por quê Porque eu tenho essa trade aqui eu tenho esses poderes dentro desse módel de Notificação Olha que legal então ah para onde que ele vai mandar por e-mail qual que é Nossa configuração de e-mail aqui no ponto en eu tenho a configuração para onde eu posso mandar Então nesse cenário eu tô mandando para dentro de um log tá ou seja pro arquivo de log mesmo eu posso mandar via smtp tá então se você for em config ah mail.php você tem todos os seus os seus maers suas opções de envio smtp SCS postmark
resend seja send mail E log ou Array então você pode ter serviços ou ou outros cenários então para caso de teste a gente pode usar o próprio log Ou se você quiser você pode subir uma ah subir um instalar na tua máquina o mail tip ah utilizando docker se você quiser tá Ah ou algum outro parecido então o meil TIP o local host 8025 eu só tenho que habilitar Eu tenho esse meio tip aqui na minha máquina Ah eu vou ligá-lo deixa eu mostrar aqui para você Tá então meio tip eu vou ligar o meu
docker então na porta 8025 Eu tenho um servidorzinho para receber mensagem então eu vou lá no meu ponto env troco para smtp ah a porta é 1025 que ele recebe tá na nesse cenário Então vamos lá eu vou enviar a proposta Jeremias email.com concordo e vamos dar uma olhada ah olha aqui chegou a proposta chegou o e-mail a gente fez em 3 minutos né ó Você recebeu uma nova proposta Claro Tudo isso aqui é customizável né que a gente vai aprender a gente vai aprender na formação como customizar tudo isso aqui como trabalhar com tudo
mas eu quero te mostrar a possibilidade ó e veja se o projeto já é um clique para chegar lá então bacana né E você pode configurar essas notificações para mandar um SMS para mandar um Slack message para fazer o que você quiser somente com isso Beleza podemos criar uma nova Notificação falando o seguinte ah perdeu perdeu Mané tá a minha notificação perdeu mané ah perdeu mané a gente vai nós vamos mandar a mesma coisa a gente vai receber um um projeto Recebemos um projeto ele vai avisar o seguinte ó você perdeu posição nesse projeto ou
no projeto e a gente coloca aqui T Project ah Me tit né que estamos fazendo Project title Project isso aí nesse projeto aí F Abra o projeto eu passo aqui a rota já Project Project Project show Project e obrigado isso aqui toda vez Create toda vez que ele perder aqui então neste proposal a gente manda pra pessoa do proposal né então podemos já Mudar alguma coisinha aqui então eu vou colocar proposal eu vou colocar vou simplificar isso aqui então eu vou fazer uma consulta vou pegar o find aí aqui propose eu atualizo e eu mando
proposal eu mando a notificação New perdeu Mané e eu passo projeto tá lembrando que o Model para eu poder ser ter o poder de notificação eu tenho que adicionar essa trade E como eu Estou utilizando eu tenho o e-mail ele já vai achar daquela maneira então ele vai achar aquele campo e já vai fazer a mudança tá então o que que eu vou fazer aqui eu vou avisar o torf que ele perdeu então e eu vou criar um cinco é isso cinco ttmail.com 5 mandei vamos dar uma olhada aqui ó 2 E5 então New proposal
quem recebeu foi a Rosa al que é a dona e o perdeu Manel quem recebeu foi o torf aqui ó o torf Perdeu posição Ó você perdeu posição num projeto proo no projeto perdeu mané Tá bom então vamos aqui o a notificações tá h tá E esses essas esses e-mails nós podemos enviar para uma fila olha como é simples então quando a gente tá falando aqui ah nesse caso a minha fila está no banco De dados né aqui ó que Connection banco de dados tá se nós procurarmos aqui ó Database tudo certinho é o que
o Connection tá no banco de dados então ele vai jogar pra fila então se eu vi aqui por exemplo no meu perder o mané e eu vou falar o seguinte Ah isso aqui é kable ele implementa uma trate aqui e a gente fala o seguinte nós implementamos uma outra contrato falando que este elemento precisa ser essa classe precisa rodar numa fila tá E Vamos voltar lá ver o que acontece eu vou criar uma nova proposta Ah vamos criar aqui 25 então proposta 25 colocar tdt2 tá ó eu recebi só um e-mail por quê Porque o
outro e-mail está numa fila se eu vi no meu banco de dados e olhar dentro de Jobs Eu tenho um Job aqui ó eu tenho um Job e que não tentou rodar nenhuma vez por quê Porque eu preciso dizer pro meu sistema rodar os elementos da fila ó lá agora ele rodou chegou mais Um e-mail o perdeu o mané e tudo certo e ele saiu da fila o meu controle meu controle de fila já não tem mais nada e o larel ele tem opção de você rodar filas em banc de dados em ries enfim aonde
você necessitar tá onde você tiver necessitar o mais simples é dentro de de filas é que se tiver erro ele vai aparecer dentro deste deste elemento Então dessa maneira a gente consegue rodar filas facilmente no larf a última coisa que quero fazer aqui para mostrar Para você você com poderoso larv é criar um comando que vai ficar verificando se o o stado do projeto mudou ou não E aí atualizar o projeto e fechar o projeto tá então é bem simples eu vou fechar isso aqui vou rodar PHP artisan make Command Close Project Esse vai ser
o nome do meu do meu elemento aqui ele criou uma novoa diretório chamado Actions commands e Close Project e eu posso rodar Esse comando através meu vira um comando artisan app Close Project eu posso dar o nome que eu quiser aqui só para você ver que isso aqui funciona Jeremias eu vou lá PHP artesan app Close Project eu rodo Jeremias então aqui eu posso fazer o que eu quiser né eu posso pegar todos os projetos ah onde where at Where é menor que Agora e vamos ver se tem algum eu vou fazer um um DD
aqui só para ver se tem algum tá vou rodar o comando novamente eu não tenho nenhum Mas se caso tivesse eu já posso atualizar o status tá então se nós dermos olhada no Create Project nós temos o status status vai ser igual a closed e a gente roda simples assim D um a mais aqui tá dessa maneira bem simples né então tudo que tiver menor que agora ele pum atualiza Isso aqui nós precisamos informar o projeto que ele vai rodar eh que ele vai rodar de tempos em tempos então na configuração no Bootstrap app eu
vou falar olha meu projeto eu tenho Ah eu tenho um Schedule então é function Schedule scheduler tá é o meu Schedule tá E aqui eu tenho que pegar do scheduling Schedule e eu posso falar o seguinte Olha eu vou ter um Schedule Que vai rodar o comando app Close Qual que é o nome do Close Project quando quando que eu vou verificar isso aqui eu vou colocar every Minute a cada minuto ele vai rodar isso aqui tá então só para você ver Close Project eu vou colocar aqui um log Ah um log ins rodou o
comando tá então vou deixar Isso aqui rodando Ah eu vou rodar PHP artisan Schedule ah work para ficar rodando e eu vou abrir uma outra aba para ficar analisando o log então laravel tem F os logs ficam dentro de Storage log log larva e eu quero ver se isso aqui vai rodar a cada minuto eu vou dar um pause aqui ah e vou para você não ficar esperando um minuto a minuto tá então rodou direitinho o comando e com isso a gente ah finaliza o nosso projeto finaliza o Nosso projeto E aprendemos muita coisa né
eu consegui a gente conseguiu ver o que que que é Live Wire a gente aprendeu o um o laravel em si né como é que um um ciclo de vida de um de um request acontece aqui dentro né passando pelas rotas controllers models eh notificações criamos notificações enviando por e-mail criamos ah comandos via console certo pra gente rodar quando a gente precisar Então esse aqui é um overview né uma uma Introdução ao larel para que você possa ver todas ou muitas das possibilidades que esse Framework ele te te dá tá como eu falei algumas estratégias
que nós usamos aqui eu escolhi usar dessa maneira para que você possa entender possibilidades beleza e na formação claro que você vai aprender muito mais e conhecer muito mais ao fundo todas essas tecnologias que nós vimos aqui Beleza então espero que você tenha gostado e um Grande abraço