Giter Site home page Giter Site logo

api's People

Contributors

alissonpeloso avatar cleissonvieira avatar dovyski avatar oraphaborges avatar stefanimeneghetti avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

api's Issues

Integrar o ca-scraping com a api

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.

Visualizar o Feedback das avaliações das respostas da Aura

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).

image

Corrigir o texto que solicita autenticação

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")

Implementando juntamente com a issue #35, na branch 35.

Implementar autenticação do widget da aura

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 :)

Salvar um histórico das mensagens do usuário com a Aura

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.

Criar uma tela baseada no widget da aura com melhorias visuais

O widget da aura será utilizado em todas as nossas aplicações.

A ideia é que a o widget de tela cheia seja usado no mobile: (Aplicativos)
image

image

E que o widget com botão seja usado nos sistesmas web:

image

image


Pode se basear nessas telas que já existem. Pode usar o figma pra fazer as telas

Implementar websockets

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.

Possibilidade de avaliar as respostar como positivas ou negativas

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 :)

Listagem de elementos de env

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.

Endpoint para coleta de analytics

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();

Vincular API com Mural V2

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

Criar uma rota json no Laravel

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).

Criar enpoints para utilização de NLP

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.

UX/UI do widget da Aura

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 :)

image

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.

Reduzir o tanto de mensagens que é armazenado no JSON no histórico da 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.

Criar nova rota para Aura que junta a rota qna com domain

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.

Implementar push notifications

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.

Dicas

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.

Ajustar README

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.

Adicionar o tema dark para o widget da Aura

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

Erro ao acessar algumas rotas vinculadas ao mural

Ao tentar acessar rotas do tipo v0/mural/orders/{id} recebemos um "Not found" como resposta.

image

Imagino que isso ocorra porque no arquivo de rotas apenas a rota get para v0/mural/orders é especificada.

image

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.

Implementar um popup do calendário acadêmico para o widget da aura

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.

Tratar mensagem da Aura com Links

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>

Configurar o ambiente de deploy

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.

Criar a página de login principal

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

É necessário adicionar a mensagem para aceitar o uso de dados (assim como tem nos apps atualmente, pode inclusive ser a mesma mensagem)

  • "Para que eu consiga evoluir constantemente, todas as mensagens e interações que você fizer comigo são armazenadas em um banco de dados, na íntegra. As mensagens não estão associadas a você (a autoria é anonimizada). Você concorda com isso?"

Criar uma nova rota para a aura em tela cheia no widget

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
}

No widget em si:

image

image


Ajustes no Widget da Aura

Ajustes no Widget da Aura

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:

  • #44
  • #35
  • #41
    • "Para que eu consiga evoluir constantemente, todas as mensagens e interações que você fizer comigo são armazenadas em um banco de dados, na íntegra. As mensagens não estão associadas a você (a autoria é anonimizada). Você concorda com isso?"
  • #36
  • #37

Baixa prioridade:

  • #46
  • #38
  • Mostrar um histórico das mensagens anteriores trocadas com a Aura ( atualmente isso é feito armazenando as 200 ultimas mensagens diretamente no localhost, mas poderíamos pensar em uma forma de armazenar essa informação também no widget) -> acredito que criar um banco de dados seja o ideal para armazenar as mensagens, assim o usuário mantém todo histórico da aura em qualquer dispositivo.

Widget web de interação da Aura

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;
};

Bug: Chat da aura 'congela' em alguns momentos

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.

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.