Ce package vise à être un modèle de démarrage moderne, au niveau de la production, inclus pour la rédaction de serveurs Web avec Haskell sur Backend et Elm sur Frontend. Il suit le gâteau à trois couches. modèle d'architecture.
Bibliothèques Haskell utilisées ici:
relude : Prélude alternatif; Ici, une astuce base-noprelude est utilisée.co-log : bibliothèque de journalisation comonadique composable.postgresql-simple : bibliothèque client postgresql de niveau intermédiaire pour l'interaction de base de données.servant : Famille de bibliothèques pour définir l'API de repos Webservices au niveau du type.elm-street : pont entre ELM et Haskell - Génération de types de données ELM, d'encodeurs JSON et de décodeurs automatiquement à partir de types Haskell.proto-lens : Messages Protobuf pour l'intégration avec l'application mobile.ekg : surveillance des performances de l'application.bcrypt : fonctions de hachage de mot de passe.jwt : Authentification utilisateur via JWT.hspec et hedgehog : tests de bibliothèques. Cette section contient une description plus détaillée de l'architecture choisie et de notre mise en œuvre particulière de celui-ci.
Le type de données pour l'environnement d'exécution pour l'ensemble de l'application est défini dans le module Lib/App/Env.hs Il contient divers champs requis pour le traitement de l'application, comme le pool de bases de données, JWT Secret, Logger, etc. Il a également une instance de coutume Has TypeClass qui explique comment extraire différentes parties de l'application. Ceci est fait pour atteindre les fins suivantes:
L'initialisation de l'environnement se produit dans le module Lib.hs
Module Lib/App/Error.hs contient une liste exhaustive de toutes les erreurs que l'application peut lancer. Ce module fournit une couche pratique entre les noms d'erreur lisibles par l'homme et les codes d'erreur HTTP. Il contient également des utilitaires utiles pour lancer des erreurs et pour la mise en forme CallStack d'erreurs.
Application principale La monade peut être trouvée dans le module Lib/App/Monad.hs .
Ce modèle utilise la base de données PostgreSQL et contient des emballages d'assistance autour des fonctions de la bibliothèque postgresql-simple pour intégrer plus fluide à notre propre monade. Voir Lib/Db/Functions.hs pour plus de détails.
Tous les nouveaux effets (comme l'envoi d'un e-mail. Stockage du fichier, etc.) doivent être ajoutés à la Lib/Effects/ répertoire.