Skip to content

Commit

Permalink
updated zio http and zio config
Browse files Browse the repository at this point in the history
  • Loading branch information
sviezypan committed Feb 13, 2023
1 parent 3961bfc commit e5749bb
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 45 deletions.
11 changes: 5 additions & 6 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
val zioSqlVersion = "0.1.0"
val zioSqlVersion = "0.1.1"

val zioVersion = "2.0.5"
val zioHttpVersion = "2.0.0-RC4"
val zioVersion = "2.0.7"
val zioHttpVersion = "0.0.4"
val zioJsonVersion = "0.3.0-RC3"
val zioConfigVersion = "3.0.0-RC2"
val zioConfigVersion = "3.0.7"

val logbackVersion = "1.2.7"
val testcontainersVersion = "1.16.2"
Expand All @@ -26,8 +26,7 @@ lazy val root = (project in file("."))
//sql
"dev.zio" %% "zio-sql-postgres" % zioSqlVersion,
//http
"io.d11" %% "zhttp" % zioHttpVersion,
"io.d11" %% "zhttp-test" % zioHttpVersion % Test,
"dev.zio" %% "zio-http" % zioHttpVersion,
//config
"dev.zio" %% "zio-config" % zioConfigVersion,
"dev.zio" %% "zio-config-typesafe" % zioConfigVersion,
Expand Down
24 changes: 7 additions & 17 deletions src/main/scala/sviezypan/Main.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package sviezypan

import zhttp.service.server.ServerChannelFactory
import zhttp.service.{EventLoopGroup, Server}
import zio._
import zio.config._
import sviezypan.config._
import zio.http._
import sviezypan.config.ServerConfig
import sviezypan.api.HttpRoutes
import sviezypan.healthcheck.Healthcheck
import sviezypan.repo._
Expand All @@ -14,24 +12,16 @@ import zio.sql.ConnectionPool
object Main extends ZIOAppDefault {

def run =
getConfig[ServerConfig]
.map(config =>
Server.port(config.port) ++
Server.app(
HttpRoutes.app ++
Healthcheck.expose
)
)
.flatMap(_.start)
zio.http.Server.serve(HttpRoutes.app ++ Healthcheck.expose)
.provide(
ServerConfig.layer,
ServerChannelFactory.auto,
EventLoopGroup.auto(),
ZLayer.fromZIO(zio.config.getConfig[ServerConfig]).flatMap(c => zio.http.ServerConfig.live(http.ServerConfig.default.port(c.get.port))),
Server.live,
OrderRepositoryImpl.live,
CustomerRepositoryImpl.live,
QueryServiceImpl.live,
DbConfig.layer,
sviezypan.config.DbConfig.layer,
ConnectionPool.live,
DbConfig.connectionPoolConfig
sviezypan.config.DbConfig.connectionPoolConfig
)
}
43 changes: 26 additions & 17 deletions src/main/scala/sviezypan/api/HttpRoutes.scala
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
package sviezypan.api

import zhttp.http._
import zio.http._
import zio._
import zio.json._
import sviezypan.domain._
import sviezypan.repo._
import sviezypan.service._
import sviezypan.api.Protocol._
import zio.http.model._

object HttpRoutes {

val app: HttpApp[
OrderRepository with CustomerRepository with QueryService,
Throwable
Response
] =
Http.collectZIO {
Http.collectZIO[Request] {
case Method.GET -> !! / "orders" / "count" =>
OrderRepository
.countAll()
.either
.map {
case Right(count) =>
Response.json(s"{\"count\": \"${count.toString()}\"}")
case Left(_) => Response.status(Status.INTERNAL_SERVER_ERROR)
case Left(_) => Response.status(Status.InternalServerError)
}

case Method.GET -> !! / "customers" / "orders" / "join" =>
Expand All @@ -33,7 +34,7 @@ object HttpRoutes {
.either
.map {
case Right(customers) => Response.json(customers.toJson)
case Left(_) => Response.status(Status.INTERNAL_SERVER_ERROR)
case Left(_) => Response.status(Status.InternalServerError)
}

case Method.GET -> !! / "customers" / "orders" / "latest-date" =>
Expand All @@ -44,7 +45,7 @@ object HttpRoutes {
.either
.map {
case Right(customers) => Response.json(customers.toJson)
case Left(_) => Response.status(Status.INTERNAL_SERVER_ERROR)
case Left(_) => Response.status(Status.InternalServerError)
}

case Method.GET -> !! / "customers" / "orders" / "count" =>
Expand All @@ -55,24 +56,32 @@ object HttpRoutes {
.either
.map {
case Right(customers) => Response.json(customers.toJson)
case Left(_) => Response.status(Status.INTERNAL_SERVER_ERROR)
case Left(_) => Response.status(Status.InternalServerError)
}

case Method.GET -> !! / "customers" =>
CustomerRepository
.findAll()
.runCollect
.map(ch => Response.json(ch.toJson))
.either
.map {
case Right(ch) => Response.json(ch.toJson)
case Left(_) => Response.status(Status.InternalServerError)
}

case Method.GET -> !! / "orders" =>
OrderRepository
.findAll()
.runCollect
.map(ch => Response.json(ch.toJson))
.either
.map {
case Right(ch) => Response.json(ch.toJson)
case Left(_) => Response.status(Status.InternalServerError)
}

case req @ Method.POST -> !! / "customers" =>
(for {
body <- req.bodyAsString
body <- req.body.asString
.flatMap(request =>
ZIO
.fromEither(request.fromJson[Customer])
Expand All @@ -82,11 +91,11 @@ object HttpRoutes {
.tapError(e => ZIO.logInfo(s"Unparseable body ${e}"))
_ <- CustomerRepository.add(body)
} yield ()).either.map {
case Right(_) => Response.status(Status.CREATED)
case Left(_) => Response.status(Status.BAD_REQUEST)
case Right(_) => Response.status(Status.Created)
case Left(_) => Response.status(Status.BadRequest)
}

case Method.GET -> !! / "customers" / zhttp.http.uuid(id) =>
case Method.GET -> !! / "customers" / zio.http.uuid(id) =>
CustomerRepository
.findById(id)
.either
Expand All @@ -97,7 +106,7 @@ object HttpRoutes {

case req @ Method.POST -> !! / "orders" =>
(for {
body <- req.bodyAsString
body <- req.body.asString
.flatMap(request =>
ZIO
.fromEither(request.fromJson[Order])
Expand All @@ -107,11 +116,11 @@ object HttpRoutes {
.tapError(e => ZIO.logInfo(s"Unparseable body ${e}"))
_ <- OrderRepository.add(body)
} yield ()).either.map {
case Right(_) => Response.status(Status.CREATED)
case Left(_) => Response.status(Status.BAD_REQUEST)
case Right(_) => Response.status(Status.Created)
case Left(_) => Response.status(Status.BadRequest)
}

case Method.GET -> !! / "orders" / zhttp.http.uuid(id) =>
case Method.GET -> !! / "orders" / zio.http.uuid(id) =>
OrderRepository
.findById(id)
.either
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/sviezypan/config/configuration.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package sviezypan.config
import zio._
import zio.config._
import zio.config.ConfigDescriptor._
import zio.config.typesafe.TypesafeConfigSource
import zio.config.typesafe._
import zio.config.magnolia._
import com.typesafe.config.ConfigFactory
import zio.config.magnolia.DeriveConfigDescriptor.descriptor
import zio.sql.ConnectionPoolConfig

import java.util.Properties
Expand Down
7 changes: 4 additions & 3 deletions src/main/scala/sviezypan/healthcheck/Healthcheck.scala
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package sviezypan.healthcheck

import zio._
import zhttp.http._
import zio.http._
import zio.http.model._

object Healthcheck {
val expose: HttpApp[Any, Throwable] = Http.collectZIO {
val expose: HttpApp[Any, Response] = Http.collectZIO {
case Method.GET -> !! / "health" =>
ZIO.succeed(Response.status(Status.OK))
ZIO.succeed(Response.status(Status.Ok))
}
}

0 comments on commit e5749bb

Please sign in to comment.