--- title: Report tags: Report --- # Report Atualmente o projeto de relatórios perciste um meta modelo do rolatório, envia para o front, onde ele faz a conversão desse meta modelo para bql e devolve para o backend chamar o bragi. Esse modelo de projeto acaba gerando alguns problemas, sendo os principais: * Frontend acumulua regras que não competem a ele * O Backend não é independente, para um relatório "sair" de de forma correta ele depende do front A alternativa é tirar a conversão de um meta modelo para bql do front e trazer isso para o backend. # API Deve ser criado um novo end point para a execução do relatório **_/reports/{id}/execute_ - [POST]** ```jsonld= { "page": 1, "pageSize": 50 } ``` :::danger Hoje no report podemos adicionar filtros no front end, e nesse modelo isso ainda não ficou definido como deve ser tratado. ::: # Back end Para o back end temos varias abordagens que podemos tomar. ## Estratégia ### Opção 1 - Sobre demanda Nessa opção a conversão é realizada todo no momento da execução, ou seja, no momento que a api _/reports/{id}/execute_ for chamada o back end irá buscar o meta modelo do relatório, converter em bql de acordo com os parametros passados pelo front e fazer a chamada no bragi. ### Opção 2 - Pré processar ao persistir o meta modelo Aqui iremos deixar pré convertido o meta modelo do relatório, ou seja, vamos compilar toda a estrutura do meta modelo em uma estrutura mais facil de ser executada quando o usuario fizer a chada do relatório. :::warning Caso o usuario adicione filtros na execução esse procesamento deverá ocorrer por completo e não utilizar o que ja foi pré processado? ::: ## Técnica Independete da estratégia tomada podemos utilizar algumas técnicas para processar o relatório. ### Opção 1 - Conversão em java Essa opção consiste em utilizar o próprio java para conver o meta modelo em bql. Pontos positivos: * Linguagem amplamente conhecida na equipe * Baixa complexidade técnica Pontos negativos: * Alto custo de processamento * Conversão verbosa :::warning Essa opção não é recomendada caso a estratégia seja realizar o pré processamento. ::: ### Opção 2 - Conversão em scala Essa opção consiste em ter um engine em scala para converter o meta modelo em um modelo mais facil para o processametno Pontos positivos: * Alta performace * Baixa verbosidade Pontos negatigos: * Alta complexidade * Baixo conhecimento técnico na equipe :::info Temos exemplos dessa opção rodado no projéto do BTB na parte de filtros, regras de validação e fórmula. [https://gitlab.wssim.com.br/app-builder/expression-compiler](https://gitlab.wssim.com.br/app-builder/expression-compiler) :::