fanny / functional-project

1 stars 0 forks source link

Projeto Final da Disciplina Programação Funcional

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

Configuração

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

Execução do Projeto

Haskell

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.

JavaScript

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.

Execução da interface web

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.

Captura-de-tela-de-2019-11-27-12-55-16

Organização de Pacotes

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*  

Funcionalidades

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: