practice-uffs / api Goto Github PK
View Code? Open in Web Editor NEWAPI central do Practice
License: MIT License
API central do Practice
License: MIT License
A ideia é preencher essa planilha com as informações desse tsv
:
qna-pt.zip
Após isso precisamos realizar isso practice-uffs/programa#1002 pra essa nova planilha. Gerar o Model e atualizar no servidor dev e prod.
O objetivo dessa issue é dar continuidade a integração do uffs-ca-scraping com a API cuja necessidade foi levantada nesta issue.
A ideia é que o pacote seja utilizado e sejam criadas funções para facilitar o acesso aos dados (pegar todo o calendario, um mes especifico...). Além disso uma possibilidade é ver uma maneira de usar o scraper apenas uma vez e salvar esses dados no banco para o o acesso seja mais rápido.
Alguma maneira de poder visualizar o Feedback das avaliações das respostas da Aura.
Existem diferentes tipos de gráficos que podem ser utilizados, ou até mesmo uma tabela simples pode ser implementada, que deixa ordenar por colunas por exemplo.
As avalações das respostas da Aura ficam no controller AnalyticsController
, no model Analytics
Para a aura o action
é aura_feedback
, a key
é a categoria da resposta, o value
é a pergunta do usuário e o rate
é se a avaliação é negativa ou positiva (respectivamente 0 ou 1).
Corrigir o texto que solicita autenticação (tem um erro 'portanto não poder - portanto não pode' - É possível também usar algo tipo "Para poder conversar comigo você precisa estar autenticado. Por favor autentique-se")
Essa tarefa se originou da issue #21
Por enquanto o resultado da issue 21 deixa o chat livre para quem quiser usar, com uma rota não autenticada, a ideia é tornar possível a autenticação pelo chat mesmo, para conseguir colocar o widget em sites que não possuem o token de autenticação entreges no iframe
<iframe src="https://practice.uffs.edu.br/api/v0/widgets/aura?token=TOKEN_DO_USUARIO_AQUI"></iframe>
<iframe src="https://practice.uffs.edu.br/api/v0/widgets/aura"></iframe>
Daí o próprio usuário se autentica pelo chat :)
A ideia dessa issue é se basear nesse repositório: https://github.com/ccuffs/uffs-ca-scraping e gerar um plugin no repositório ccuffs para pegar informações do RU.
Após gerar esse plugin, adicioná-lo na api do practice para ser utilizado com a aura.
O mais fácil é, a partir de uma URL do calendário, obter os dados em HTML da página e, a partir dela, criar o json.
O calendário acadêmicio é aquele que é mostrado com vários meses e afins:
O json de saída deve ter os campos data_inicio
, data_fim
, titulo
e envolvidos
Salvar na nossa API o histórico de conversas com a aura.
Para poder anonimizar estas conversas após o usuário discordar com o uso de consentimento, talvez seria interessante fazer algo um pouco mais desconexo do usuário (não sei se isso faz sentido hehe). Se eu não me engano a resposta que vem da aplicação da Aura tem consigo a identificação da resposta, e essa identificação pode ser armazenada ao invés do texto da resposta.
Depois que criarmos a avaliação das perguntas podemos armazenar também o histórico de likes e deslikes daquele usuário juntamente com o histórico de mensagens.
A avaliação de uma resposta da Aura referente pergunta realizada pelo usuário já pode ser armazenada anonimicamente na rota v0/analytics
, então além de guardar os likes no histórico de mensagens, também deve ser armazenado anonimicamente nesta rota.
O @alissonpeloso deu a ideia de guardar no BD vinculado ao usuário um campo tipo um JSON como o histórico, me parece muito válido e é algo a se considerar, talvez até colocar um limite no histórico.
O objetivo dessa issue é integrar o pacote beyondcode/laravel-websockets
na API do practice para que essa tenha funcionalidades de tempo real através de websockets. O projeto do forms e do live-web utilizam esse pacote e tem ele configurado e funcional.
O readme da api deve ser ajustado com as informações de como iniciar o servidor websocket.
Com o surgimento da issue #45, acredito que é necessário guardar o histórico de likes e deslikes do usuário para que seja possível descobrir quem avaliou aquela resposta (enquanto o usuário tenha dado o consentimento).
Acho que seria bom realizar esta issue antes da 45, já que no histórico vai ser guardados os likes e deslikes :)
Criar a API com JWT e autenticação com idUFFS.
O aplicativo do programa (bem como outros componentes no futuro) mostrarão informações de ambiente (env
). Essas informações são relacionadas ao contexto do usuário, como local, atividade sendo realizada, etc. A api do practice precisa listar as informações de ambiente/env que o usuário está interagindo.
O objetivo dessa issue é criar a rota que mostra essas informações. No arquivo routes/api/v0.php
implementar a rota autenticada GET /env
. Essa rota não recebe parâmetros, mas ela retorna uma resposta json. Essa resposta é um array de informação env, cuja estrutura é a seguinte:
{
"name": "Nome do env",
"description": "Descrição do env",
"live": false,
"app": "https://practice.uffs.edu.br/forms",
"type": "notice",
"icon_url": "https://practice.uffs.edu.br/img/icon.png",
"actions": [
{
"name": "Ação 1",
"description": "Descrição da ação 1",
"url": "https://practice.uffs.edu.br",
"method": "GET",
"params": {
}
},
{
"name": "Ação 1",
"description": "Descrição da ação 2",
"url": "https://practice.uffs.edu.br/teste",
"method": "GET",
"params": {
"foo": "bar"
}
}
]
}
Uma resposta json completa para esse endpoint seria algo como:
[
{
"name": "Nome do env",
"description": "Descrição do env",
"live": false,
"app": "https://practice.uffs.edu.br/forms",
"type": "notice",
"icon_url": "https://practice.uffs.edu.br/img/icon.png",
"actions": [
{
"name": "Ação 1",
"description": "Descrição da ação 1",
"url": "https://practice.uffs.edu.br",
"method": "GET",
"params": {
}
},
{
"name": "Ação 1",
"description": "Descrição da ação 2",
"url": "https://practice.uffs.edu.br/teste",
"method": "GET",
"params": {
"foo": "bar"
}
}
]
},
{
"name": "Nome do env 2",
"description": "Descrição do env 2",
"live": false,
"app": "https://practice.uffs.edu.br/forms",
"type": "notice",
"icon_url": "https://practice.uffs.edu.br/img/icon.png",
"actions": [
{
"name": "Ação 1",
"description": "Descrição da ação 1",
"url": "https://practice.uffs.edu.br",
"method": "GET",
"params": {
}
},
{
"name": "Ação 1",
"description": "Descrição da ação 2",
"url": "https://practice.uffs.edu.br/teste",
"method": "GET",
"params": {
"foo": "bar"
}
}
]
}
]
No momento a informação que será colocada em cada env retornado não é relevante. Faremos essas adequações em tarefas futuras.
O objetivo dessa issue é criar o endpoint /analytics
com todas as operações básicas de um crud (POST
para criar, PATCH
para atualizar, etc). Também é necessário criar uma migration e um modelo, que terão a seguinte estrutura (vou colocar o código da migration, depois precisa criar o model App\Models\Analytics
):
$table->id();
$table->foreignId('user_id')->index();
$table->foreignId('app_id')->index();
$table->string('action', 30)->index();
$table->text('key');
$table->text('value');
$table->timestamps();
Para testar as listagem de serviços no app
através da API
que está rodando, é necessário ajustar o mural que está em teste (https://v2.mural.practice.uffs.cc/) e vincular a API
á ele. Assim que concluído conseguimos testar a funcionalidade no app.
Cleisson informou que essa versão do mural que está rodando está com problema.
Sobre o ambiente de teste da API que conversamos na reunião de líder, por gentileza, criem uma issue relacionado a isso
Na mesma issue comentem sobre a utilização do Mural V2 de teste (https://v2.mural.practice.uffs.cc/) para esse ambiente, porém o mesmo precisa ser atualizado, pois, ainda está quebrado o acompanhamento de solicitações e pedidos, ocasinado pela exclusão de uma categoria de solicitação já criada
A ideia dessa issue é criar uma rota prefixada como /teste/algo
na api. Essa rota deve imprimir um conteúdo json. Para fins de ilustração, podemos imprimir campos da data atual (dia, mês e ano).
Se quiser fazer algo um pouco mais desafiador, pode-se enviar algum dado do aplicativo (usando o objeto do Framework7 que envia/coleta dados de uma API rest).
Aqui tem um exemplo muito bom: https://github.com/ricardokovalski/api-cakes/blob/main/app/Http/Controllers/Api/CakeController.php
A Minerva e a Aura utilização funcionalidade NLP para processamento de linguagem. Precisamos criar endpoints na api do practice para disponibilizar esses serviços de uma forma que todas as nossas aplicações consigam utilizar.
Os endpoints podem ser de qna
e dominain
, com modelos próprios para cada um deles.
Por enquanto não há nenhum loading quando as requisições são feitas, deixando a experiência de uso não tão fluída e agradável como deveria.
O próprio livewire tem as suas funções de loading relacionadas a uma função... Nesse link ali tem o funcionamento desta função bem certinho :)
E se forem encontradas mais melhoras para UX/UI, podem ser desenvolvidas e abertas novas issues se necessário.
Eu acho que seria daora se alguns devs testassem, para elencar alguns ajustes.
Na issue #45, fez-se necessário a criação destas rotas, migration e modelo. Que será desenvolvida em uma issue separada para melhor esclarecimento :)
A ideia dessa issue é simplificar a implementação do widget da aura mantendo suas funcionalidades atuais.
Modificar o texto apresentado pós login, atualmente parece que o nome do usuário que efetuou login é Aura
Reduzir o tanto de mensagens que é armazenado no JSON no histórico da aura
Por uma questão de escalabilidade, acredito que armazenar todas as mensagens trocadas pela aura com todos os usuários se torne muito custoso, poderíamos limitar apenas para as últimas mensagens por exemplo.
Também seria interessante, talvez, desvincular do model do usuário, criando seu próprio controller e tudo.
O que acontece é que hoje temos apenas essa rota para a aura: Route::get('/aura/nlp/{route}/{text}', [AuraController::class, 'index']);
Com isso, as aplicações que utilizam a aura precisam fazer requisição para as duas rotas para quando precisa-se de uma resposta, do tipo qna
ou domain
.
O objetivo dessa issue é criar uma nova rota que faz requisição para aura pela url qna
inicialmente e, caso não encontre resposta, faça requisição para a domain
.
Atualmente a implementação de push notifications usando FCM está dentro do mural v1. Precisamos que essa funcionalidade seja implantada dentro da API principal para que outros serviços consigam utilizar ela.
Eu iniciei a implementação, inclusive criando o modelo Channels, sua migration e a inclusão do pacote laravel-notification-channels/fcm
no composer. Acho que isso foi o máximo que eu fiz.
O objetivo dessa issue é finalizar a implantação de push notifications na API principal. No arquivo api/v0.php das rotas, já existe uma rota chamada user/notify/push
que será usada pelos serviços para enviar um push para o usuário que está usando a API (usuário do app/mural, por exemplo).
Também é necessário implementar os endpoints para gerência de channels
, que são utilizados pelo app para atualizar tokens do FCM.
Durante o desenvolvimento, o melhor é comentar as linhas 29 e 49 desse arquivo.
Vou atualizar o readme com informações sobre como fazer a API funcionar localmente e como gerar um token para ela. Se houver problemas, é só me chamar.
Atualmente, a README do projeto possui apenas o template e é necessário colocar informações mais detalhadas sobre o que é o projeto, como configurar o ambiente de trabalho e como contribuir com ele.
O objetivo dessa issue é verificar a possibilidade de integrar dois novos pacotes a api para que posteriormente eles possam ser utilizados pela aura. Os pacotes são uffs-ca-scraping e uffs-sga-scraping. A ideia é que se verifique se os pacotes estão disponiveis para uso e se sim adiciona-los a api.
Os APPs dispõem de um modo escuro e um modo claro, talvez de pra colocar como parâmetro na rota algo como 'mode=dark/light' que adapta o css.
Passar como parâmetro na rota:
/v0/widgets/aura?token=kqwmdkqwd123k12p1ked12de12&type=fullscreen&theme=dark
/v0/widgets/aura?token=kqwmdkqwd123k12p1ked12de12&type=fullscreen&theme=light
Ao tentar acessar rotas do tipo v0/mural/orders/{id}
recebemos um "Not found" como resposta.
Imagino que isso ocorra porque no arquivo de rotas apenas a rota get para v0/mural/orders
é especificada.
Provavelmente é apenas esse problema que esta causando o erro relatado nessa issue do aplicativo já que não é possível acessar a rota necessária. As outras rotas do mural (categorias, serviços...) também possuem o mesmo problema.
Na API
temos a classe: AcademicCalendarController
Essa classe utiliza um plugin de scrapper \CCUFFS\Scrap\AcademicCalendarUFFS
para pegar informações do calendário acadêmico.
O objetivo dessa issue é implementar um tipo de popup que será utilizado no widget da aura mostrando o calendário acadêmico.
Quando a aura envia uma mensagem que contem um link, esse link fica apenas como texto. O objetivo dessa tarefa é buscar um pattern pra capturar o link e criar uma tag clicável para que o usuário possa navegar.
OBS: Acredito que seja uma boa ideia adicionar a classe "link external" assim nos aplicativos ele irá abrir no navegador externo (assim espero). ex: <a class="link external" href="${url}">Acessar</a>
API central com a autenticação do PRACTICE está funcionando, da mesma forma que está a autenticação do Mural. Agora é necessário fazer a configuração do CI e deploy no servidor.
A criar a documentação da API com as rotas já disponíveis
Criar a página de login principal que receberá como parâmetro o local para onde será redirecionado pós login, semelhante ao comportamento página principal de login do google, com design da página de login do mural
É necessário adicionar a mensagem para aceitar o uso de dados (assim como tem nos apps atualmente, pode inclusive ser a mesma mensagem)
Para poder integrar no aplicativo por exemplo, é necessário que a aurafique em tela cheia:
Para Isso é necessária uma nova rota com um novo livewire com css diferente do existente (sem usar as classes que o atual usa), também terão que ir embora algumas divs.
Como já estou testando na dev com a dev do app, vou colocar aqui as alterações que deixam em tela cheia:
no aura.css:
.wrapper {
position: absolute;
right: 20px;
bottom: 100px;
width: 100%;
height: 500px;
opacity: 0;
transition: all 0.4s
}
.card {
height: 100%;
/* border-radius: 15px!important; */
/* background: linear-gradient(to right, #FEEED0, #EAF2F5)!important; */
background: linear-gradient(to right, #ffffff, #EAF2F5)!important
}
.card-header {
height: 20%;
/* border-radius: 15px 15px 0 0!important; */
border-bottom: 0!important
}
Pra poder ver o modelo que está implementado no servidor de testes
Na issue 215 do repositório app-practice, onde verificamos a possibilidade de utilizar o widget da Aura nos apps, foram encontradas algumas coisas, tanto por mim quanto pela @stefanimeneghetti que ajudou, que devem ser corrigidas e implementadas.
Alta prioridade:
Baixa prioridade:
O objetivo dessa issue é replicar o chat de interação da Aura existente no app-practice em uma outra página web (servida junto com a api). A url/rota da api que servirá essa página será GET /v0/widgets/aura
.
Existem dois caminhos possíveis para se seguir (faz parte dessa tarefa analisar eles e fazer a decisão)
Tentar utilizar ao máximo o código/estilo/estrutura do app-practice (e por tabela o framework7). Nesse caso, teríamos que remover tudo que é relacionado com o app e deixar só a tela da aura (remover header, storage, etc). A vantagem é que implementações futuras da Aura no app podem ser "facilmente" adaptadas para o widget, mantendo os depois com paridade de funcionalidades. A desvantagem maior é que contorcer o framework7 para isso talvez seja muito mais complicado do que implementar somente a tela do chat da Aura do zero utilizando html/css/js puro.
Implementar essa página do zero, utilizando html/css/js. A vantagem é que temos controle total do que será feito, inclusive replicar o layout do chat (que não é difícil de ser feito). A desvantagem é que, se implementarmos algo novo no app practice da Aura, teremos que portar isso para o widget.
Faz parte dessa tarefa também fazer o JS responsável por enviar as perguntas do chat para a API da Aura receber como parâmetro GET da URL da página o token do usuário. Por exemplo, imaginando que a página do widget é https://practice.uffs.edu.br/api/v0/widgets/aura
e que ele seja colocado em um iframe em alguma página qualquer (do mural), ela seria colocada assim:
<iframe src="https://practice.uffs.edu.br/api/v0/widgets/aura?token=TOKEN_DO_USUARIO_AQUI"></iframe>
A página servida de https://practice.uffs.edu.br/api/v0/widgets/aura
carregará o chat e o seu JS normalmente. O JS deverá buscar a query parameter token
da URL da página para saber qual token utilizar nas requisições da API (no Authentication: Beaer XXXX
).
Abaixo está uma função pronta para isso (utilizada no maker):
function getURLParam(name, defaultValue) {
var urlParams = new URLSearchParams(window.location.search);
var value = urlParams.get(name) || defaultValue;
return value;
};
Esse bug, para mim, é bem fora do comum, ele acontece periódicamente vez sim vez não, assim que você der o F5 ele volta a funcionar, e se tu apertar F5 denovo o erro volta a aparecer, e assim por diante.
Este erro passou despercebido por mim e acabou indo para dev, assim que o encontrei, investi um tempo para tentar achar uma solução, não encontrtei, daí por isso que crio esta issue.
O objetivo dessa issue é criar os models e rotas para salvar os dados das respostas do "questionário de bem estar" do app-bem-estar.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.