Modern Haskell Webserver Boilerplate
- Graphql API
- morpheus-graphql (https://github.com/morpheusgraphql/morpheus-graphql)
- Schema is in
schema.graphql
type User { id: Int! email: String! name: String! updatedAt: String! createdAt: String! } type Session { token: String! user: User! } type Query { login(email: String!, password: String!): Session! myUserInfo: User! } type Mutation { register(email: String!, password: String!, name: String!): Session! changePassword(oldPassword: String!, newPassword: String!): Boolean! }
- Database:
- Postgresql + Opaleye
- Migration using
dbmate
(https://github.com/amacneil/dbmate) - Pooling using
Data.Pool
This boilerplate wires up:
- Reading .env using
envy
- Database
- Graphql API
- Authorization using JWT
- Monad transformers
Running
- Feed in you database & secret in
.env
:$ cp .env.default .env
DATABASE_URL="postgres://Dandoh:[email protected]:5432/webhaskell?sslmode=disable" JWT_SECRET="my_jwt_secret"
- Migrations
$ dbmate up
- More uses refer https://github.com/amacneil/dbmate
- Run webserver
$ stack run
Now GraphQL API is at http://localhost:8080/api
You can also access Graphql Playground at http://localhost:8080/graphiql
Running on Docker
-
Feed in you database & secret in
.env
:$ cp .env.default .env
-
(Optional) Edit anything you need in the .env file
-
Create and start docker containers
$ docker-compose up
-
Now you can visit: http://localhost:8080/ in your local machine.
-
Migrations will automatically run, and you can run them manually anytime using
$ docker-compose up dbmate
-
Stack will restart whenever you change any .hs file, thanks to entr
Contributors
PR are more than welcome. The only note is we use ormolu
to format codes.