/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.1-dev * User agent: apibuilder app.apibuilder.io/nicolai-moraru/joglog-api/0.0.1-dev/http4s_0_17 */ package nm.joglog.api.v0.server import org.http4s.dsl._ import nm.joglog.api.v0.models.json._ private[server] object Matchers { implicit lazy val queryParamDecodeBigDecimal: org.http4s.QueryParamDecoder[BigDecimal] = org.http4s.QueryParamDecoder.fromUnsafeCast[BigDecimal](p => BigDecimal(p.value))("BigDecimal") implicit lazy val queryParamDecodeInstant: org.http4s.QueryParamDecoder[_root_.java.time.Instant] = org.http4s.QueryParamDecoder.fromUnsafeCast[_root_.java.time.Instant](p => _root_.java.time.OffsetDateTime.parse(p.value).toInstant)("_root_.java.time.Instant") implicit lazy val queryParamDecodeLocalDate: org.http4s.QueryParamDecoder[_root_.java.time.LocalDate] = org.http4s.QueryParamDecoder.fromUnsafeCast[_root_.java.time.LocalDate](p => _root_.java.time.LocalDate.parse(p.value))("_root_.java.time.LocalDate") implicit lazy val queryParamDecodeUUID: org.http4s.QueryParamDecoder[_root_.java.util.UUID] = org.http4s.QueryParamDecoder.fromUnsafeCast[_root_.java.util.UUID](p => _root_.java.util.UUID.fromString(p.value))("_root_.java.util.UUID") object ApiVersion { val ApiVersionMajor = { "X-Apidoc-Version-Major".ci } def apply(req: org.http4s.Message): Boolean = req.headers.get(ApiVersionMajor) match { case Some(v) if v.value == "0" => true case _ => false } } object IntVal { def unapply(s: String): Option[Int] = scala.util.Try(s.toInt).toOption } } trait TimeRoutes { import Matchers._ implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A]) = org.http4s.circe.jsonOf[A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A]) = org.http4s.circe.jsonEncoderOf[A] sealed trait PostResponse object PostResponse { case class HTTP201(value: nm.joglog.api.v0.models.Time, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP400(value: String, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends PostResponse } def post( _req: org.http4s.Request, body: => org.http4s.DecodeResult[.models.Minimal] ): fs2.Task[PostResponse] sealed trait GetResponse object GetResponse { case class HTTP200(value: Seq[nm.joglog.api.v0.models.Time], headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends GetResponse } def get( _req: org.http4s.Request ): fs2.Task[GetResponse] sealed trait GetByIdResponse object GetByIdResponse { case class HTTP200(value: nm.joglog.api.v0.models.Time, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class HTTP404(value: String, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends GetByIdResponse } def getById( _req: org.http4s.Request, id: Int ): fs2.Task[GetByIdResponse] sealed trait PatchResponse object PatchResponse { case class HTTP200(value: nm.joglog.api.v0.models.Time, headers: Seq[org.http4s.Header] = Nil) extends PatchResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends PatchResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends PatchResponse } def patch( _req: org.http4s.Request, body: => org.http4s.DecodeResult[Seq[time.models.Entry]] ): fs2.Task[PatchResponse] sealed trait DeleteByIdResponse object DeleteByIdResponse { case class HTTP200(value: nm.joglog.api.v0.models.Time, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class HTTP404(value: String, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends DeleteByIdResponse } def deleteById( _req: org.http4s.Request, id: Int ): fs2.Task[DeleteByIdResponse] def apiVersionMatch(req: org.http4s.Message): Boolean = ApiVersion(req) def service() = org.http4s.HttpService { case _req @ POST -> Root / "times" if apiVersionMatch(_req) => post(_req, _req.attemptAs[.models.Minimal]).flatMap { case PostResponse.HTTP201(value, headers) => Created(value).putHeaders(headers: _*) case PostResponse.HTTP400(value, headers) => BadRequest(value).putHeaders(headers: _*) case PostResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case PostResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "times" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "times" if apiVersionMatch(_req) => get(_req).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case GetResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "times" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "times" / IntVal(id) if apiVersionMatch(_req) => getById(_req, id).flatMap { case GetByIdResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case GetByIdResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case GetByIdResponse.HTTP404(value, headers) => NotFound(value).putHeaders(headers: _*) case GetByIdResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "times" / IntVal(id) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ PATCH -> Root / "times" if apiVersionMatch(_req) => patch(_req, _req.attemptAs[Seq[time.models.Entry]]).flatMap { case PatchResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case PatchResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case PatchResponse.UndocumentedResponse(response) => response } case _req @ PATCH -> Root / "times" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ DELETE -> Root / "times" / IntVal(id) if apiVersionMatch(_req) => deleteById(_req, id).flatMap { case DeleteByIdResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case DeleteByIdResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case DeleteByIdResponse.HTTP404(value, headers) => NotFound(value).putHeaders(headers: _*) case DeleteByIdResponse.UndocumentedResponse(response) => response } case _req @ DELETE -> Root / "times" / IntVal(id) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait UserRoutes { import Matchers._ implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A]) = org.http4s.circe.jsonOf[A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A]) = org.http4s.circe.jsonEncoderOf[A] sealed trait PostAuthenticateResponse object PostAuthenticateResponse { case class HTTP201(value: String, headers: Seq[org.http4s.Header] = Nil) extends PostAuthenticateResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends PostAuthenticateResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends PostAuthenticateResponse } def postAuthenticate( _req: org.http4s.Request, body: => org.http4s.DecodeResult[.models.Minimal] ): fs2.Task[PostAuthenticateResponse] sealed trait PostResponse object PostResponse { case class HTTP201(value: nm.joglog.api.v0.models.User, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP400(value: String, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends PostResponse } def post( _req: org.http4s.Request, body: => org.http4s.DecodeResult[.models.Minimal] ): fs2.Task[PostResponse] sealed trait GetResponse object GetResponse { case class HTTP200(value: Seq[nm.joglog.api.v0.models.User], headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends GetResponse } def get( _req: org.http4s.Request ): fs2.Task[GetResponse] sealed trait GetByIdResponse object GetByIdResponse { case class HTTP200(value: nm.joglog.api.v0.models.User, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class HTTP404(value: String, headers: Seq[org.http4s.Header] = Nil) extends GetByIdResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends GetByIdResponse } def getById( _req: org.http4s.Request, id: Int ): fs2.Task[GetByIdResponse] sealed trait PatchResponse object PatchResponse { case class HTTP200(value: nm.joglog.api.v0.models.User, headers: Seq[org.http4s.Header] = Nil) extends PatchResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends PatchResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends PatchResponse } def patch( _req: org.http4s.Request, body: => org.http4s.DecodeResult[Seq[user.models.Entry]] ): fs2.Task[PatchResponse] sealed trait DeleteByIdResponse object DeleteByIdResponse { case class HTTP200(value: nm.joglog.api.v0.models.User, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class HTTP403(value: String, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class HTTP404(value: String, headers: Seq[org.http4s.Header] = Nil) extends DeleteByIdResponse case class UndocumentedResponse(response: fs2.Task[org.http4s.Response]) extends DeleteByIdResponse } def deleteById( _req: org.http4s.Request, id: Int ): fs2.Task[DeleteByIdResponse] def apiVersionMatch(req: org.http4s.Message): Boolean = ApiVersion(req) def service() = org.http4s.HttpService { case _req @ POST -> Root / "users" / "authenticate" if apiVersionMatch(_req) => postAuthenticate(_req, _req.attemptAs[.models.Minimal]).flatMap { case PostAuthenticateResponse.HTTP201(value, headers) => Created(value).putHeaders(headers: _*) case PostAuthenticateResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case PostAuthenticateResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "users" / "authenticate" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ POST -> Root / "users" if apiVersionMatch(_req) => post(_req, _req.attemptAs[.models.Minimal]).flatMap { case PostResponse.HTTP201(value, headers) => Created(value).putHeaders(headers: _*) case PostResponse.HTTP400(value, headers) => BadRequest(value).putHeaders(headers: _*) case PostResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case PostResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "users" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "users" if apiVersionMatch(_req) => get(_req).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case GetResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "users" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "users" / IntVal(id) if apiVersionMatch(_req) => getById(_req, id).flatMap { case GetByIdResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case GetByIdResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case GetByIdResponse.HTTP404(value, headers) => NotFound(value).putHeaders(headers: _*) case GetByIdResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "users" / IntVal(id) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ PATCH -> Root / "users" if apiVersionMatch(_req) => patch(_req, _req.attemptAs[Seq[user.models.Entry]]).flatMap { case PatchResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case PatchResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case PatchResponse.UndocumentedResponse(response) => response } case _req @ PATCH -> Root / "users" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ DELETE -> Root / "users" / IntVal(id) if apiVersionMatch(_req) => deleteById(_req, id).flatMap { case DeleteByIdResponse.HTTP200(value, headers) => Ok(value).putHeaders(headers: _*) case DeleteByIdResponse.HTTP403(value, headers) => Forbidden(value).putHeaders(headers: _*) case DeleteByIdResponse.HTTP404(value, headers) => NotFound(value).putHeaders(headers: _*) case DeleteByIdResponse.UndocumentedResponse(response) => response } case _req @ DELETE -> Root / "users" / IntVal(id) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } }