Salve salve webmaster, Gustavo Web aqui mais uma vez com mais uma aula para o UpInside Play!
Seguinte, nessa aula aqui vamos fazer a integração com o Google Agenda, chamado pelo próprio Google de Calendar...
Bora programar um sistema para fazer agendamento de horários já sincronizado com o Google Agenda e notificando o participante com um arquivo .ics que é lido por todos os softwares de calendário/agenda pra ficar fácil de criar qualquer agendamento para médico, dentista, professora de yoga ou até pro pet shop saber que hora vai buscar o seu cachorro?
Esse recurso é bem bacana, porque permite que você adicione um evento a agenda e dessa forma o dono da agenda será notificado! Como todo mundo hoje tem a conta sincronizada com o smartphone é uma boa alternativa para gerar uma notificação para a pessoa e evitar que envie um e-mail e caia no spam por exemplo...
Como esse conteúdo é beeeem extenso, a primeira aula tudo o que é necessário para fazer a comunicação com o Google Calendar, a numa próxima aula a gente entra para fazer a gestão dos horários e consumir essa classe que estaremos criando hoje.
Embora já tem entregue uma estrutura pré-montada, aqui a gente vai trabalhar com o PHP7, Ajax, Consumo de API já tudo dentro das PSR's :)
Referências:
Como sempre, vou deixar disponível aqui os links que utilizei durante o desenvolvimento para que você possa consultar junto comigo.
Link para a página de instalação e credenciamento.
Link para a página de documentação de criação dos eventos.
Link para a página da documentação dos eventos.
Link para a página de documentação da API de Notificação.
Material de Apoio
Conforme vamos lendo a documentação e avançando no código, eu vou criando os diretórios lá no GitHub para que você possa consultar os arquivos e usar como base de estudo o que desenvolvemos durante essa aula.
O material que estou disponibilizando já está mais organizado, identado e comentado! Assim fica mais tranquilo você compreender a responsabilidade de cada método e quais são os parâmetros que precisam ser informados.
Fiz tem uma correção que me passou batido na aula, que eu criei a variável de data e hora do início com evento como star, e eu já alterei para start :)
Não fiz o upload da pasta vendor, portanto, se você baixar o conteúdo vai necessário rodar o comando composer update :)
Para acessar o repositório, é só clicar aqui e eu te levo pra lá agora!
Se você ainda não segue a gente no github, dê um follow lá! E não se esqueça de dar aquela estrelinha marota nos repos :)
Como você pode notar, em todas as nossas aulas do Play, a gente deixa os links de referência. Então quando você quiser fazer uma integração que não esteja presente ainda aqui no nosso site, você pode seguir esse mesmo passo.
Consumindo a Biblioteca do Google:
Como você pode ver pela documentação e pela aula, a gente trabalha com o Composer para fazer o download da biblioteca, e já aproveitamos para transferir a responsabilidade do autoload para o composer também...
... assim a gente tem a nossa aplicação trabalhando com a PSR-4 no autoload das classes.
A documentação do Google é bem rica e bem tranquila de se entender, o nosso trabalho aqui é basicamente que organizar o conteúdo para diminuir o acoplamento das funções e por consequência teremos alguns métodos a mais do que está estipulado na documentação, mas cada um com sua responsabilidade bem clara.
Isso fica ainda mais notável quando vamos de fato consumir os métodos, o processo fica mais ou menos assim:
tenho autenticação?
se não ->
Exibo a mensagem de que não sou autenticado
Gero o link para autenticar
se sim ->
Exibo a mensagem de que estou autenticado
Posso consumir os demais métodos
Se tivemos um método acoplado para tudo isso ficaria complicado a nossa aplicação interpretar essas informações.
Absorvendo a documentação criamos o método também para criar e deletar um evento da agenda, e a partir desse momento tudo começa a ficar mais simples e os pontos começam a se conectar.
Ao organizar a pasta você pode notar que trabalhamos com atributos privados da classe e precisamos parametrizar toda a nossa classe funcionar corretamente e fazer o reuso desses atributos, mas uma vez organizado, você consegue ter uma visão mais objetiva de cada linha.
Quanto a parte de autenticação, criamos um método específico para receber o codeAuth do Google e setar essa parametrização na nossa classe, então teremos um arquivo auth.php que será responsável justamente por resgatar esse código e aplicar na classe.
Validação de Erros e Prevenção:
Nas classes que desenvolvemos, colocamos alguns poucos testes que validam as informações antes de termos qualquer tipo de requisição para a API.
Você pode tomar isso como um padrão quando estiver desenvolvendo suas aplicações, assim você reduz a chance da sua aplicação quebrar por algum erro inesperado quando enviado para a API, faz somente as requisições que devem ser feitas (e com isso diminui o tempo de carregamento da página) e também pode aplicar essa mesma tecnica nas interações com banco de dados para que possa diminuir ainda mais o load do seu server :)
Instalação:
O processo de instalação eu mostro durante a aula, e por mais que você baixe o último repositório, terá que seguir os mesmos procedimentos pois a pasta vendor (do composer) e o client_secret.json não estão presentes.
Será necessário também criar um banco de dados, o script para criação das tabelas está na raiz do projeto :)
Adicionais e Recursos:
Eu vou deixar algumas sugestões do que pode ser implementado nesse sistema caso você vá utilizar esse escopo para um cliente seu:
- Tempo de cada consulta/agendamento
- Parametrização de dia e horário de disponibilidade para que possa ser feitos vários schedules simultâneos (para não ter que cadastrar um por um)
- Possibilidade de reservar o dia
- Transformar esse conteúdo em uma API REST para que possa ser consumida por um app mobile por exemplo
- Implementar um controle de Login para que fique protegido por usuário e senha
- Controle mais rigoroso de segurança no controlador
Como lição de casa eu deixo a parte de deletar schedules e ainda a edição das appointments :)
Projeto:
O projeto fica com uma estrutura bastante enxuta de fácil compreensão e manutenção... Cada arquivo tem sua responsabilidade bem definida e fica muuuito tranquilo de desenvolver! A gente faz um overview antes de começar a aula de como funciona.
O legal disso é que se você quiser aplicar dentro do seu projeto, basta seguir o passo a passo para adquirir o seu client_secret.json e copiar a classe Calendar para dentro do seu sistema e sair usando. Está totalmente desacoplado do sistema!
É claro que deve-se observar os namespaces...
Ambiente:
Um ponto importante é que você deve obrigatoriamente estar rodando a versão do PHP7 na sua máquina, pois vetor nas defines não são permitidas nas versões 5.x.
Eu estou com o XAMPP na versão 7.1.9 do PHP, se sua versão for essa ou superior provavelmente sua aplicação funcionará sem nenhum tipo de problema.
Deixe seu comentário: