All Projects → Holmusk → Three Layer

Holmusk / Three Layer

Licence: bsd-3-clause
3️⃣ 🍰 Architecture of the Haskell web applications

Programming Languages

haskell
3896 projects

Projects that are alternatives of or similar to Three Layer

issue-wanted
🏷 Web application to help beginners to start contributing into Haskell projects
Stars: ✭ 61 (-75.2%)
Mutual labels:  backend, web-application
Terraform Aws Tfstate Backend
Terraform module that provision an S3 bucket to store the `terraform.tfstate` file and a DynamoDB table to lock the state file to prevent concurrent modifications and state corruption.
Stars: ✭ 229 (-6.91%)
Mutual labels:  backend
Bit
A tool for component-driven application development.
Stars: ✭ 14,443 (+5771.14%)
Mutual labels:  backend
Webanno
The Official WebAnno Repository
Stars: ✭ 220 (-10.57%)
Mutual labels:  web-application
Berserker
A list of useful payloads for Web Application Security and Pentest/CTF
Stars: ✭ 212 (-13.82%)
Mutual labels:  web-application
Storaji
📒 The light/responsive inventory management system available on Windows, macOS and Linux.
Stars: ✭ 222 (-9.76%)
Mutual labels:  backend
Taisite Platform
最强接口测试平台
Stars: ✭ 203 (-17.48%)
Mutual labels:  backend
Kimchi
An HTML5 management interface for KVM guests
Stars: ✭ 2,773 (+1027.24%)
Mutual labels:  web-application
Appy
🚀 A full stack boilerplate web app
Stars: ✭ 225 (-8.54%)
Mutual labels:  backend
Easy Admin Demo
A demo application to showcase EasyAdmin features
Stars: ✭ 219 (-10.98%)
Mutual labels:  backend
Node Red Contrib Uibuilder
Easily create data-driven web UI's for Node-RED using any (or no) front-end library. VueJS and bootstrap-vue included but change as desired.
Stars: ✭ 215 (-12.6%)
Mutual labels:  web-application
Dns Ui
Opera's LDAP-authenticated PowerDNS user interface
Stars: ✭ 211 (-14.23%)
Mutual labels:  web-application
Ownphotos
Self hosted alternative to Google Photos
Stars: ✭ 2,587 (+951.63%)
Mutual labels:  backend
Tornarest
A simple RESTful Web Service built with Tornado.
Stars: ✭ 211 (-14.23%)
Mutual labels:  backend
Relate
RELATE is an Environment for Learning And TEaching
Stars: ✭ 239 (-2.85%)
Mutual labels:  web-application
Go Graphql Starter
This repository uses graph-gophers/graphql-go to build a starter web application
Stars: ✭ 204 (-17.07%)
Mutual labels:  backend
Omnidb
Web tool for database management
Stars: ✭ 2,709 (+1001.22%)
Mutual labels:  web-application
Webperl
Run Perl in the browser with WebPerl!
Stars: ✭ 221 (-10.16%)
Mutual labels:  web-application
Free Programming Resources
💎 免费的编程资源大全,持续更新!🔥 覆盖各种语言和方向(Java \ Python \ C++ \ JavaScript \ Golang \ 前端 \ 后端等)的学习路线、贴心教程、项目实战、编程书籍、面试合集、实用资源等,对程序员非常有帮助!
Stars: ✭ 225 (-8.54%)
Mutual labels:  backend
Full Stack Fastapi Couchbase
Full stack, modern web application generator. Using FastAPI, Couchbase as database, Docker, automatic HTTPS and more.
Stars: ✭ 243 (-1.22%)
Mutual labels:  backend

Logo CircleCI

three-layer

This package is aimed at being a modern, production-level, batteries-included starting template for writing web servers with Haskell on backend and Elm on frontend. It follows the Three Layer Cake. architecture pattern.

Haskell libraries used in here:

Detailed approach description

This section contains more detailed description of the chosen architecture and our particular implementation of it.

Application environment

Data type for the runtime environment for the whole application is defined in the Lib/App/Env.hs module. It contains various fields required for the application processing, like database pool, JWT secret, logger, etc. It also has instance of custom Has typeclass which tells how to extract different parts of the application. This is done to achieve the following purposes:

  1. Specify in the constraints what parts of the environment you need.
  2. Introduce more modularity when multiple different environments are implemented.

Environment initialisation is happening in the Lib.hs module.

Application errors

Module Lib/App/Error.hs contains exhaustive list of all errors that application can throw. This module provides convenient layer between human-readable error names and HTTP error codes. It also contains useful utilities for throwing errors and for formatting CallStack of errors.

Application monad

Main application monad can be found in the Lib/App/Monad.hs module.

Database

This template uses PostgreSQL database and contains helper wrappers around functions from the postgresql-simple library to integrate smoother with our own monad. See Lib/Db/Functions.hs for more details.

Effects

All new effects (like sending an email. storing the file, etc.) should be added to the Lib/Effects/ directory.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].