Repositório referente ao projeto final da disciplina Programação Funcional 2019.2.
O projeto se trata da implementação da especificação nas linguagens Haskell e JavaScript
Para a execução do projeto em Haskell garanta que possui instalado em sua máquina o GHCI(compilador para Haskell), e o Cabal, para utilização de pacotes.
O projeto utiliza Aeson como parser para JSON. Sua instalação pode ser feita através dos comandos:
$ cabal update
$ cabal install aeson
Além disso, para os testes é utilizado o HUnit, caso não o tenha instalado, execute o comando abaixo:
$ cabal install HUnit
Para ter acesso às funções implementadas, execute na raiz do projeto Haskell (src/core-haskell) o comando:
$ ghci index.hs
Feito isso, as funções estão disponíveis para uso. Exemplo:
$ db <- getTransactions /** Carrega as transações */
$ getMaxBalance db 2019 2
A execução dos testes pode ser feita através da função runTests
.
Para ter acesso a API de JavaScript, garanta que você executou na pasta raiz do projeto JavaScript (src/core-js) os comandos:
$ yarn install
$ yarn start
Feito isso, importe as funções desejadas do arquivo /src/core-js/index.ts.
Para a executar a UI certifique-se de estar no pacote /src/ui, em seguida, execute os comandos:
$ yarn install
$ yarn start
Feito isso, a aplicação estará disponível no endereço http://localhost:8080.
data/ /** Módulo contendo os dados usados por toda aplicação */
src/
+- core-haskell/ /** Módulo contendo a estrutura e implementação do projeto haskell */
+- packages/ /** Módulo contendo a API para módulos externos */
| +- json-parser/
| +- JsonParser.hs /** Código responsável pelo parser dos arquivos json para um tipo haskell*/
+- resolvers/ /** Módulo contendo as funções responsáveis por resolver um pedido do cliente e devolver os dados */
| +- Queries.hs /** Código responsável pelas funções de consulta */
| +- Filters.hs /** Código responsável pelas funções de filtragem */
| +- Helpers.hs /** Código responsável pela definição de funções auxiliares, usadas nos métodos de consulta */
+- tests/ /** Módulo contendo os testes das funcionalidades do projeto */
| +- TestAverages.hs
| +- TestBalances.hs
| +- TestCashFlows.hs
| +- TestFilters.hs
| +- Tests.hs
| +- TestValues.hs
+- typings/ /** Módulo contendo todos os tipos da aplicação */
| +- GregorianCalendar.hs
| +- Transaction.hs
| +- TransactionType.hs
index.hs /** Ponto de entrada do projeto Haskell, que possibilita o acesso aos metódos de sua API */
+- core-js /** Módulo contendo a estrutura e implementação do projeto javascript */
+- resolvers/ /** Módulo contendo as funções responsáveis por resolver um pedido do cliente e devolver os dados */
| +- queries.ts /** Código responsável pelas funções de consulta */
| +- filters.ts /** Código responsável pelas funções de filtragem */
| +- helpers.ts /** Código responsável pela definição de funções auxiliares, usadas nos métodos de consulta */
+- typings/ /** Módulo contendo todos os tipos da aplicação */
| +- global.ts
package.json
tsconfig.json
index.ts /** Ponto de entrada do projeto JS, que possibilita o acesso aos metódos de sua API */
util.ts /** Código contendo a implementação de funções utilitárias para listas e objetos*/
+- ui
+- *Coming Soon*
As funcionalidades da aplicação são referentes ao conjunto de dados disponível no diretório /data.
Consultas, funções e operações disponíveis: