/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.1 * User agent: apibuilder app.apibuilder.io/nccloud/reporting-api/0.0.1/http4s_0_20 */ package de.nccloud.reporting.api.v0.server import org.http4s.circe.decodeUri import org.http4s.circe.encodeUri import org.http4s.dsl.{io => _, _} import org.http4s.implicits._ import cats.effect._ import cats.implicits._ import de.nccloud.common.v0.models.json._ import de.nccloud.reporting.api.v0.models.json._ private[server] trait Matchers[F[_]] extends Http4sDsl[F] { 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") implicit lazy val deNccloudCommonV0ModelsSortDirectionQueryParamDecoder: org.http4s.QueryParamDecoder[de.nccloud.common.v0.models.SortDirection] = org.http4s.QueryParamDecoder.fromUnsafeCast[de.nccloud.common.v0.models.SortDirection](p => de.nccloud.common.v0.models.SortDirection.fromString(p.value).get)("de.nccloud.common.v0.models.SortDirection") object ApiVersion { val ApiVersionMajor = { "X-Apidoc-Version-Major".ci } def apply(req: org.http4s.Message[F]): Boolean = req.headers.get(ApiVersionMajor) match { case Some(v) if v.value == "0" => true case _ => false } } object UUIDVal { def unapply(s: String): Option[_root_.java.util.UUID] = scala.util.Try(_root_.java.util.UUID.fromString(s)).toOption } object DirectionDeNccloudCommonV0ModelsSortDirectionDefAscMatcher extends QueryParamDecoderMatcher[de.nccloud.common.v0.models.SortDirection]("direction") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some(de.nccloud.common.v0.models.SortDirection.Asc)) } object LimitIntDef25Matcher extends QueryParamDecoderMatcher[Int]("limit") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some(25)) } object OffsetIntDef0Matcher extends QueryParamDecoderMatcher[Int]("offset") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some(0)) } object SortByStringDefNameMatcher extends QueryParamDecoderMatcher[String]("sort_by") { override def unapply(params: Map[String, Seq[String]]) = super.unapply(params).orElse(Some("name")) } } trait QueryResponseRoutes[F[_]] extends Matchers[F] { implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A], sync: Sync[F]) = org.http4s.circe.jsonOf[F, A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A], sync: Sync[F]) = org.http4s.circe.jsonEncoderOf[F, A] sealed trait PostResponse object PostResponse { case class HTTP200(value: de.nccloud.reporting.api.v0.models.QueryResponse, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP400(value: Seq[de.nccloud.common.v0.models.GenericError], headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends PostResponse } def post( _req: org.http4s.Request[F], body: => org.http4s.DecodeResult[F, de.nccloud.reporting.api.v0.models.QueryForm] ): F[PostResponse] def apiVersionMatch(req: org.http4s.Message[F]): Boolean = ApiVersion(req) def service()(implicit sync: Sync[F]) = org.http4s.HttpRoutes.of[F] { case _req @ POST -> Root / "query" if apiVersionMatch(_req) => post(_req, _req.attemptAs[de.nccloud.reporting.api.v0.models.QueryForm]).flatMap { case PostResponse.HTTP200(value, headers) => Ok(value, headers: _*) case PostResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case PostResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "query" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait TopicRoutes[F[_]] extends Matchers[F] { implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A], sync: Sync[F]) = org.http4s.circe.jsonOf[F, A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A], sync: Sync[F]) = org.http4s.circe.jsonEncoderOf[F, A] sealed trait GetResponse object GetResponse { case class HTTP200(value: de.nccloud.reporting.api.v0.models.TopicResponse, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetResponse } def get( _req: org.http4s.Request[F], offset: Int, limit: Int, sortBy: String, direction: de.nccloud.common.v0.models.SortDirection ): F[GetResponse] sealed trait GetByGuidResponse object GetByGuidResponse { case class HTTP200(value: de.nccloud.reporting.api.v0.models.Topic, headers: Seq[org.http4s.Header] = Nil) extends GetByGuidResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends GetByGuidResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetByGuidResponse } def getByGuid( _req: org.http4s.Request[F], guid: String ): F[GetByGuidResponse] def apiVersionMatch(req: org.http4s.Message[F]): Boolean = ApiVersion(req) def service()(implicit sync: Sync[F]) = org.http4s.HttpRoutes.of[F] { case _req @ GET -> Root / "topics" :? OffsetIntDef0Matcher(offset) +& LimitIntDef25Matcher(limit) +& SortByStringDefNameMatcher(sortBy) +& DirectionDeNccloudCommonV0ModelsSortDirectionDefAscMatcher(direction) if apiVersionMatch(_req) => get(_req, offset, limit, sortBy, direction).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "topics" :? OffsetIntDef0Matcher(offset) +& LimitIntDef25Matcher(limit) +& SortByStringDefNameMatcher(sortBy) +& DirectionDeNccloudCommonV0ModelsSortDirectionDefAscMatcher(direction) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "topics" / guid if apiVersionMatch(_req) => getByGuid(_req, guid).flatMap { case GetByGuidResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetByGuidResponse.HTTP404(headers) => NotFound(headers: _*) case GetByGuidResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "topics" / guid if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait ViewRoutes[F[_]] extends Matchers[F] { implicit def circeJsonDecoder[A](implicit decoder: _root_.io.circe.Decoder[A], sync: Sync[F]) = org.http4s.circe.jsonOf[F, A] implicit def circeJsonEncoder[A](implicit encoder: _root_.io.circe.Encoder[A], sync: Sync[F]) = org.http4s.circe.jsonEncoderOf[F, A] sealed trait GetResponse object GetResponse { case class HTTP200(value: de.nccloud.reporting.api.v0.models.ViewResponse, headers: Seq[org.http4s.Header] = Nil) extends GetResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetResponse } def get( _req: org.http4s.Request[F], offset: Int, limit: Int, sortBy: String, direction: de.nccloud.common.v0.models.SortDirection ): F[GetResponse] sealed trait GetByGuidResponse object GetByGuidResponse { case class HTTP200(value: de.nccloud.reporting.api.v0.models.View, headers: Seq[org.http4s.Header] = Nil) extends GetByGuidResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends GetByGuidResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetByGuidResponse } def getByGuid( _req: org.http4s.Request[F], guid: _root_.java.util.UUID ): F[GetByGuidResponse] sealed trait PostResponse object PostResponse { case class HTTP201(value: de.nccloud.reporting.api.v0.models.View, headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class HTTP400(value: Seq[de.nccloud.common.v0.models.GenericError], headers: Seq[org.http4s.Header] = Nil) extends PostResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends PostResponse } def post( _req: org.http4s.Request[F], body: => org.http4s.DecodeResult[F, de.nccloud.reporting.api.v0.models.ViewForm] ): F[PostResponse] sealed trait PutByGuidResponse object PutByGuidResponse { case class HTTP200(value: de.nccloud.reporting.api.v0.models.View, headers: Seq[org.http4s.Header] = Nil) extends PutByGuidResponse case class HTTP400(value: Seq[de.nccloud.common.v0.models.GenericError], headers: Seq[org.http4s.Header] = Nil) extends PutByGuidResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends PutByGuidResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends PutByGuidResponse } def putByGuid( _req: org.http4s.Request[F], guid: _root_.java.util.UUID, body: => org.http4s.DecodeResult[F, de.nccloud.reporting.api.v0.models.ViewForm] ): F[PutByGuidResponse] sealed trait DeleteByGuidResponse object DeleteByGuidResponse { case class HTTP200(headers: Seq[org.http4s.Header] = Nil) extends DeleteByGuidResponse case class HTTP404(headers: Seq[org.http4s.Header] = Nil) extends DeleteByGuidResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends DeleteByGuidResponse } def deleteByGuid( _req: org.http4s.Request[F], guid: _root_.java.util.UUID ): F[DeleteByGuidResponse] def apiVersionMatch(req: org.http4s.Message[F]): Boolean = ApiVersion(req) def service()(implicit sync: Sync[F]) = org.http4s.HttpRoutes.of[F] { case _req @ GET -> Root / "views" :? OffsetIntDef0Matcher(offset) +& LimitIntDef25Matcher(limit) +& SortByStringDefNameMatcher(sortBy) +& DirectionDeNccloudCommonV0ModelsSortDirectionDefAscMatcher(direction) if apiVersionMatch(_req) => get(_req, offset, limit, sortBy, direction).flatMap { case GetResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "views" :? OffsetIntDef0Matcher(offset) +& LimitIntDef25Matcher(limit) +& SortByStringDefNameMatcher(sortBy) +& DirectionDeNccloudCommonV0ModelsSortDirectionDefAscMatcher(direction) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "views" / UUIDVal(guid) if apiVersionMatch(_req) => getByGuid(_req, guid).flatMap { case GetByGuidResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetByGuidResponse.HTTP404(headers) => NotFound(headers: _*) case GetByGuidResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "views" / UUIDVal(guid) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ POST -> Root / "views" if apiVersionMatch(_req) => post(_req, _req.attemptAs[de.nccloud.reporting.api.v0.models.ViewForm]).flatMap { case PostResponse.HTTP201(value, headers) => Created(value, headers: _*) case PostResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case PostResponse.UndocumentedResponse(response) => response } case _req @ POST -> Root / "views" if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ PUT -> Root / "views" / UUIDVal(guid) if apiVersionMatch(_req) => putByGuid(_req, guid, _req.attemptAs[de.nccloud.reporting.api.v0.models.ViewForm]).flatMap { case PutByGuidResponse.HTTP200(value, headers) => Ok(value, headers: _*) case PutByGuidResponse.HTTP400(value, headers) => BadRequest(value, headers: _*) case PutByGuidResponse.HTTP404(headers) => NotFound(headers: _*) case PutByGuidResponse.UndocumentedResponse(response) => response } case _req @ PUT -> Root / "views" / UUIDVal(guid) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ DELETE -> Root / "views" / UUIDVal(guid) if apiVersionMatch(_req) => deleteByGuid(_req, guid).flatMap { case DeleteByGuidResponse.HTTP200(headers) => Ok(headers: _*) case DeleteByGuidResponse.HTTP404(headers) => NotFound(headers: _*) case DeleteByGuidResponse.UndocumentedResponse(response) => response } case _req @ DELETE -> Root / "views" / UUIDVal(guid) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } }