Dieses Paket zielt darauf ab, eine moderne Startvorlage auf Produktionsebene zu sein, um Webserver mit Haskell auf Backend und Elm on Frontend zu schreiben. Es folgt dem Drei -Schicht -Kuchen. Architekturmuster.
Haskell -Bibliotheken, die hier verwendet werden:
relude : Alternative Vorspiele; Hier wird base-noprelude Trick verwendet.co-log : Componierbare kontravariante comonadische Protokollierungsbibliothek.postgresql-simple : MidgreSQL Client Library für Datenbankinteraktion.servant : Bibliotheksfamilie zum Definieren von Webservices REST-API auf Typ-Ebene.elm-street : Brücke zwischen ELM und Haskell - Generieren von ELM -Datentypen, JSON -Encodern und Decoder automatisch aus Haskell -Typen.proto-lens : Protobuf-Nachrichten zur Integration in die mobile Anwendung.ekg : Überwachung der Anwendungsleistung.bcrypt : Passworthashing -Funktionen.jwt : Benutzerauthentifizierung über JWT.hspec und hedgehog : Testbibliotheken. Dieser Abschnitt enthält eine detailliertere Beschreibung der ausgewählten Architektur und unserer speziellen Implementierung.
Der Datentyp für die Laufzeitumgebung für die gesamte Anwendung ist im Lib/App/Env.hs -Modul definiert. Es enthält verschiedene Felder, die für die Anwendungsverarbeitung erforderlich sind, Has . Dies geschieht, um die folgenden Zwecke zu erreichen:
Umweltinitialisierung findet im Lib.hs -Modul statt.
Modul Lib/App/Error.hs enthält eine erschöpfende Liste aller Fehler, die die Anwendung werfen kann. Dieses Modul bietet eine bequeme Schicht zwischen menschlich-lesbaren Fehlernamen und HTTP-Fehlercodes. Es enthält auch nützliche Dienstprogramme zum Werfen von Fehlern und zum Formatieren von CallStack von Fehlern.
Hauptanwendungsmonade finden Sie im Modul Lib/App/Monad.hs .
Diese Vorlage verwendet die PostgreSQL-Datenbank und enthält Helfer-Wrapper um Funktionen aus der postgresql-simple -Bibliothek, um glatter in unsere eigene Monate zu integrieren. Weitere Informationen finden Sie Lib/Db/Functions.hs .
Alle neuen Effekte (wie das Senden einer E -Mail. Speichern der Datei usw.) sollten dem Lib/Effects/ Verzeichnissen hinzugefügt werden.