Open endersonmenezes opened 5 months ago
Entrando em uma discussão mais técnica... Estive refletindo sobre a necessidade de uma API ou qualquer outro entrypoint complexo para isso. Tenho boas ideias, mas não quero usar um canhão para matar uma formiga... Portanto, vou apresentar algumas dúvidas que tenho, com o objetivo de esboçar a solução de forma simples (mas não simplista) e suficientemente manutenível para que outras pessoas possam contribuir. A ideia aqui também é compreender melhor qual é o problema e como desejamos resolvê-lo, afinal, para evitar criar uma solução que não atenda às necessidades reais ou que não seja fácil de manter. Com isso em mente, separei algumas dúvidas e ideias iniciais:
@endersonmenezes dá uma olhadinha aqui pra vê se eu tô viajando muito
Fala @causticsudo !
Acredito que você nos deu o caminho da perfeição.
Respondendo suas dúvidas
Por onde quem realizará o cadastro da mentoria deve acessar isso? Pelo site da Codaqui? Com um DNS próprio? Na nuvem? No desktop, etc...
O mentor e o mentadora vão continuar usando e-mail/calendário, acho que isso é um ponto legal que ensinamos. As mentorias podem ser realizadas via Meeting ou via Discord, conforme ambos preferirem.
Preciso de alguma interface gráfica?
Como vamos criar o processo imagino que não, eu pensei em um Sheets onde todos os mentores têm acesso e precisam colocar alguns dados de suas mentorias para que a gente que se reúne com mais frequência tenha noção do que está acontecendo, e quero voltar a termos acompanhamento de um(a) pedagogo.
É necessário ter algum tipo de controle para quem ingere os dados através do app?
Talvez no Sheets em abas, sendo a aba que tem informações confidenciais somente acessada pelo proprio mentor e o "conselho".
Onde desejo emitir esse relatório? Em qual formato?
Manualmente sendo feito buscas mesmo, conforme ficar padrão o relatório a gente coloca no nosso projeto de dados. Uma extração limpa de dados pessoais.
Preciso deste framework apenas para gerar métricas ou também para melhorar a qualidade de vida do fluxo de mentoria? Notificações, integrações, adaptações, controle... Por enquanto não, mas legal pensar nisso por que creio que vai surgir.
Google Apps Script
é gratuito no plano Education?Ideia maneira hipermegacomplexa
não se encaixaria no projeto do Tutor que estamos montando?Desafios da implementação:
o caso de Não tende a escalar e é difícil manter um bom versionamento.
, será que com um repositório privado, não conseguimos nos organizar?Será que o Google Apps Script é gratuito no plano Education?
Deve ter algum ratelimit, mas é gratuito pra geral
A Ideia maneira hipermegacomplexa não se encaixaria no projeto do Tutor que estamos montando?
Batemos no sync, mas aqui eu acho eu não. Acho que o tutor tá num nível mais de acesso conjunto, pensei inicialmente em algo mais administrativo um worflow pra gente conseguir coletar métricas, fornecer funcionalidade pro processo em si. Mas assim, acho completamente plausível uma ferramenta plugar na outra, ou funcionarem do forma conjunta... Mas por segregação de responsabilidade, talvez faça mais sentido ser separado, pelo menos agora.
Como temos Desafios da implementação: o caso de Não tende a escalar e é difícil manter um bom versionamento., será que com um repositório privado, não conseguimos nos organizar?
Talvez isso seja uma complexidade a mais, tu garantir o versionamento "saudável" de algo que está espalhado pela plataforma do google dentro de um repo deve ser algo chatão de fazer, e com pouco ganho também. Agora, a ideia do que a gente quer fazer aqui sim, de fato conseguimos organizar no gh, dá até pra trabalha com merges reativos, que disparam functions e atualizam algum valor em algum lugar, por aí vaí (mas isso só sobre os cenários onde é feito pelo fluxo certinho, abrindo pr, aprovando, mergeando, changelog e zás).
Bom, pra gente sair do zero, eu criei uma planilha no sheets pra gente ter uma noção de informação e o que que a gente quer fazer com elas. @endersonmenezes Depois dá uma bizóiada lá e vai comentando/ajustando no que for necessário.
Quanto a PoC, fiz uma apizinha, simplona, recebendo um valor e jogando numa planilha qualquer do sheets, man molezinha. Hospedar n é um problema, tem uns raspberry em algum lugar por aqui :laughing:. Vou passar a PoC pra uma solution organizada, ou um repo e depois a gente vê onde vai deixar isso ai.
Enquanto a poc está em andamento, é tranquilão deixar uma v0 rodando no appScripts. só precisamos bater o que é necessário pra essa v0.
@endersonmenezes Vamos precisar ver a parte de autenticação com essa API dos caras: https://developers.google.com/workspace/guides/configure-oauth-consent?hl=pt-br
Em paralelo à isso, eu já vou ir criando o repo aqui do nosso lado, pq já tem coisa que dá pra colocar em vigor.
Infelizmente, parece que não é de graça essa api do sheets :/
Acredito que vamos ter que mudar a abordagem, por hora vamos manter local (versionando no repo mesmo) eu vou deixar um csv ou arquivo parecido e gente depois importa pro sheets via appScript, vou pensar numa maracutaia boa mas isso não trava a gente.
@endersonmenezes Depois dá uma olha na doc desse pr:https://github.com/codaqui/mentoria-framework/pull/1 Vamos começar a dar mais contexto pra isso pra eu ir definindo os entregáveis.
Se puder depois dá uma olhada nas configs do repo em si e vê se falta fazer alguma coisa
@endersonmenezes @causticsudo , gostaria de contribuir com isso:
Para interface, não poderíamos usar o AppSheet? Ele dá uma interface e a base de dados é uma planilha. É melhor do que deixar o acesso direto à planilha.
Sobre o controle de dados é importante ressaltar, até onde eu sei, não é possível controlar acesso à abas de planilhas no Google Sheets. Você pode controlar permissão de edição de cada aba, mas não consegue definir quem poderá ver uma aba. Quem vê a planilha, vê tudo. Por este motivo sugiro que dados sensíveis sejam armazenados em arquivos específicos.
Sobre os relatórios, podemos usar o Looker Studio, conectando no Sheets e gerando os indicadores. É possível agendar envio dos indicadores por email, definindo os remetentes e os filtros que serão usados.
Exemplo do looker que fiz aqui
Abri o appsheet com aquela planilha. Ele já montou uns campos automaticos. Podemos personalizar se acharem que faz sentido partir pra esse lado Exemplo aqui
@renanceratto Fala aí, man! Beleza? Muito obrigado pelas sugestões; ajudaram bastante no desenvolvimento da ideia!
Acredito que a ideia é boa, especialmente no curto prazo. O bom é que tudo está próximo, o que facilita a configuração. A maneira como esses dados serão consumidos não é um problema; podemos transitar entre várias soluções nesse aspecto.
A vantagem de ter todo o seu workflow no Google é que é muito fácil integrar as ferramentas. No entanto, como não existe almoço grátis, há um limite considerável de extensão. Sempre que precisamos expandir um pouco mais, isso implica em "$$$$". Portanto, a médio e longo prazo, eu consideraria migrar para uma solução baseada em funções, scripts, etc., algo que ofereça mais controle e escalabilidade em termos de comportamento. Mas, por enquanto, acho que o caminho é esse mesmo. Inclusive, se não me engano o @endersonmenezes já tinha comentado sobre isso comigo.
Sobre a ideia do Looker, achei muito bacana. Eu não conhecia muito bem, mas vai ajudar bastante nos envios, especialmente se pudermos enviar para outros canais além do e-mail (Discord, por exemplo). No entanto, isso não é um problema, já que é possível criar schedulers no AppScript também.
Quanto ao ponto de segurança, eu também havia pensado em algo semelhante. Atualmente, o acesso à planilha está liberado para todos porque estávamos definindo quais informações seriam necessárias, e o esquema ainda não está 100% fechado. Estou fazendo alguns testes para determinar o que será possível utilizar como info. Mais para frente, a planilha será bem restritiva em todas as páginas. Se precisarmos de uma visualização ou algo mais editável, podemos replicar os dados em outro bucket sem alterar a fonte da verdade, criando algo semelhante a projeções. No entanto, também não vejo o armazenamento dessas informações no Sheets por muito tempo; há vários problemas nessa abordagem, especialmente quando o volume de dados é alto e quando é necessário realizar alguma migração.
@renanceratto Quando eu finalizar o workflow de inserção e manipulação de dados na planilha, acho que poderemos começar a focar na parte de dashboard. Se você quiser, podemos marcar uma conversa nas próximas semanas para discutir isso. O que acha?
@causticsudo bora. Prefere durante o dia ou fora do horário de expediente? (por mim tanto faz) Combinamos lá pelo whatsapp
@causticsudo bora. Prefere durante o dia ou fora do horário de expediente? (por mim tanto faz) Combinamos lá pelo whatsapp
@renanceratto Pra mim funciona melhor no período da noite, ultimamente tá pegado pra mim lá no trampo :c
@endersonmenezes Man, tive estudando as formas de versionar o script e mantê-lo dentro do repositório e, até agora, encontrei duas abordagens. Ainda não fiz PoC de nenhuma delas; é mais em prol da discussão mesmo.
Para chegar ao resultado esperado, será necessário:
Pontos positivos dessa abordagem:
Problemas dessa abordagem:
Para chegar ao resultado esperado, será necessário:
eval()
no arquivo carregadoPontos positivos dessa abordagem:
Problemas dessa abordagem:
TL;DR
Sheets -> Banco de Dados Workflow GitHub -> CI/CD AppSheet -> Frontend Looker -> Relatórios
tl; dr
Avançamos bastante no fluxo de upsert na planilha com a ajuda do @renanceratto. Já está funcionado certinho. Vou precisar fazer algum ajuste pois estamos inserindo as calls de segunda tb.
Quanto ao funcionamento da action, estou enfrentando um problema de autenticação com o clasp, o erro é de contrato do json. Ainda to pesquisando como é o contrato esse troço. Mas já atualizei o pr com as evidências de configuração.
Sobre a call de segunda, contanto que o calendar da mentoria não esteja na call de segunda, não vai ter problema. Imagino que o mentoria@codaqui.dev não esteja como convidado dessa call Precisamos, na verdade, ver como colocamos o calendar do mentoria no acionador do app script. mentoria é um grupo, certo? Posso pesquisar como fazer isso
Mentoria é uma conta, pode pegar a senha comigo ou com o @causticsudo também!
Trazendo um update mais atual do status do fluxo de via gh actions:
tl;dr - precisamos mudar a abordagem de auth via actions e adicionar mais uma api no projeto da codaqui pra consegui gerar esse token de acesso. A ferramenta não está aceitando o refresh token (token que é gerado uma vez só)
@renanceratto Tb ainda não consegui ler com calma seu comentário, mas tá no radar!
@causticsudo @renanceratto quais as pendências.
@causticsudo @renanceratto quais as pendências.
@endersonmenezes na parte do script de inserção do evento basta apenas tratar o cancelamento do evento.
Pretendo trabalhar com isso após o dia 25/10 quando acaba a feira e volto pra Maringá.
@endersonmenezes @causticsudo App criado e sendo possível ver/editar os meus mentorados e as minhas agendas. Dentro da agenda tem o link das mentorias, sendo possível criar registros de mentoria. Cada mentoria tem o campo de anotações https://www.appsheet.com/start/5f848f70-92e3-49d9-9e7c-838acd3e7b99
Foi mal, galera. Fico atualizando o pr lá e esqueço da issue aqui. Mas basicamente deu mt bom o fluxo via ci/cd, inclusive já está funcional.
Tl;dr:
Pull request aguardando revisão para seguir com merge:
Status:
DoD: Planilha + Tema + Descrição
Google Drive (Banco de Dados) -> Sheets / Data -> Resumo Mensal