Unofficial Giter8 template for the Typelevel Stack (Http4s / Doobie / Circe / Cats Effect / Fs2) based on Cats v1.x.x
- Install sbt
sbt new profunktor/typelevel-stack.g8
cd quickstart
- Install PostgreSQL and configure access for user
postgres
and passwordpostgres
(or change it inModule
) - Create database
users
and tableapi_user
(seesrc/main/resources/users.sql
or useFlyway
as in the tests). sbt test
(optional)sbt run
curl http://localhost:8080/users/$USERNAME
It contains the minimal code to get you started:
UserRepository
: Defines a method to find a user without commiting to a Monad (kind of tagless-final).PostgresUserRepository
: Implementation of the UserRepository interface using Doobie and PostgreSQL abstracting over the EffectF[_]
.
UserService
: Business logic on top of the UserRepository again abstracting over the EffectF[_]
.UserHttpEndpoint
: Defines the http endpoints of the REST API making use of the UserService.HttpErrorHandler
: Mapping business errors to http responses in a single place.http
package: Includes custom Circe Json Encoders for value classes.validation
object: Includes fields validation usingcats.data.ValidatedNel
.Module
: Dependencies module.Server
: The main application that wires all the components and starts the web server.
Written in <2017> by @gvolpe
To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this template to the public domain worldwide. This template is distributed without any warranty. See http://creativecommons.org/publicdomain/zero/1.0/.