Este pacote tem como objetivo ser um modelo de partida moderno, de nível de produção e incluído nas baterias, para escrever servidores da Web com Haskell no back-end e Elm no front-end. Segue o bolo de três camadas. padrão de arquitetura.
Bibliotecas Haskell usadas aqui:
relude : Prelúdio Alternativo; Aqui é usado o truque base-noprelude .co-log : Biblioteca de log comonadic composível contravariante.postgresql-simple : biblioteca de clientes PostGresql de nível médio para interação do banco de dados.servant : Família de bibliotecas para definir a API REST Services no nível do tipo.elm-street : Bridge entre Elm e Haskell - Gerando tipos de dados de ELM, codificadores JSON e decodificadores automaticamente dos tipos Haskell.proto-lens : mensagens protobuf para integração com o aplicativo móvel.ekg : Monitoramento de desempenho do aplicativo.bcrypt : funções de hash de senha.jwt : Autenticação do usuário via JWT.hspec e hedgehog : Testando Bibliotecas. Esta seção contém uma descrição mais detalhada da arquitetura escolhida e nossa implementação particular dela.
Tipo de dados para o ambiente de tempo de execução para todo o aplicativo é definido no módulo Lib/App/Env.hs . Ele contém vários campos necessários para o processamento de aplicativos, como pool de banco de dados, Secret JWT, Logger etc. Ele também possui a instância do TypeClass Has , que informa como extrair diferentes partes do aplicativo. Isso é feito para alcançar os seguintes propósitos:
A inicialização do ambiente está acontecendo no módulo Lib.hs
Módulo Lib/App/Error.hs contém uma lista exaustiva de todos os erros que o aplicativo pode lançar. Este módulo fornece camada conveniente entre nomes de erros legíveis por humanos e códigos de erro HTTP. Ele também contém utilitários úteis para arremessar erros e para formatar a pilha de CallStack de erros.
A Monad Application principal pode ser encontrada no módulo Lib/App/Monad.hs .
Este modelo usa o banco de dados PostgreSQL e contém embalagens de auxiliares em torno das funções da biblioteca postgresql-simple para integrar mais suavemente à nossa própria Mônada. Consulte Lib/Db/Functions.hs para obter mais detalhes.
Todos os novos efeitos (como enviar um email. Armazenar o arquivo etc.) devem ser adicionados ao Lib/Effects/ Directory.