/** * Generated by API Builder - https://www.apibuilder.io * Service version: 1.0.1 * User agent: apibuilder app.apibuilder.io/gilt/gilt-public-api/1.0.1/http4s_0_22 */ package com.gilt.public.api.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 com.gilt.public.api.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") object ApiVersion { val ApiVersionMajor = { "X-Apidoc-Version-Major".ci } def apply(req: org.http4s.Message[F]): Boolean = req.headers.get(ApiVersionMajor).map(_.head) match { case Some(v) if v.value == "1" => true case _ => false } } object StoreVal { def unapply(s: String): Option[com.gilt.public.api.models.Store] = com.gilt.public.api.models.Store.fromString(s) } object ApikeyStringMatcher extends QueryParamDecoderMatcher[String]("apikey") } trait ProductRoutes[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 GetDetailJsonByProductIdResponse object GetDetailJsonByProductIdResponse { case class HTTP200(value: com.gilt.public.api.models.Product, headers: Seq[org.http4s.Header.ToRaw] = Nil) extends GetDetailJsonByProductIdResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetDetailJsonByProductIdResponse } def getDetailJsonByProductId( _req: org.http4s.Request[F], productId: String, apikey: String ): F[GetDetailJsonByProductIdResponse] sealed trait GetCategoriesJsonResponse object GetCategoriesJsonResponse { case class HTTP200(value: com.gilt.public.api.models.ProductCategories, headers: Seq[org.http4s.Header.ToRaw] = Nil) extends GetCategoriesJsonResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetCategoriesJsonResponse } def getCategoriesJson( _req: org.http4s.Request[F], apikey: String ): F[GetCategoriesJsonResponse] 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 / "products" / productId / "detail.json" :? ApikeyStringMatcher(apikey) if apiVersionMatch(_req) => getDetailJsonByProductId(_req, productId, apikey).flatMap { case GetDetailJsonByProductIdResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetDetailJsonByProductIdResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "products" / productId / "detail.json" :? ApikeyStringMatcher(apikey) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "products" / "categories.json" :? ApikeyStringMatcher(apikey) if apiVersionMatch(_req) => getCategoriesJson(_req, apikey).flatMap { case GetCategoriesJsonResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetCategoriesJsonResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "products" / "categories.json" :? ApikeyStringMatcher(apikey) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait SaleDetailRoutes[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 GetDetailJsonResponse object GetDetailJsonResponse { case class HTTP200(value: com.gilt.public.api.models.SaleDetail, headers: Seq[org.http4s.Header.ToRaw] = Nil) extends GetDetailJsonResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetDetailJsonResponse } def getDetailJson( _req: org.http4s.Request[F], store: com.gilt.public.api.models.Store, sale: String, apikey: String ): F[GetDetailJsonResponse] 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 / "sales" / StoreVal(store) / ":saledetail.json" :? ApikeyStringMatcher(apikey) if apiVersionMatch(_req) => getDetailJson(_req, store, sale, apikey).flatMap { case GetDetailJsonResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetDetailJsonResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "sales" / StoreVal(store) / ":saledetail.json" :? ApikeyStringMatcher(apikey) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } } trait SaleListRoutes[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 GetActiveJsonResponse object GetActiveJsonResponse { case class HTTP200(value: com.gilt.public.api.models.SaleList, headers: Seq[org.http4s.Header.ToRaw] = Nil) extends GetActiveJsonResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetActiveJsonResponse } def getActiveJson( _req: org.http4s.Request[F], apikey: String ): F[GetActiveJsonResponse] sealed trait GetActiveJsonByStoreResponse object GetActiveJsonByStoreResponse { case class HTTP200(value: com.gilt.public.api.models.SaleList, headers: Seq[org.http4s.Header.ToRaw] = Nil) extends GetActiveJsonByStoreResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetActiveJsonByStoreResponse } def getActiveJsonByStore( _req: org.http4s.Request[F], store: String, apikey: String ): F[GetActiveJsonByStoreResponse] sealed trait GetUpcomingJsonResponse object GetUpcomingJsonResponse { case class HTTP200(value: com.gilt.public.api.models.SaleList, headers: Seq[org.http4s.Header.ToRaw] = Nil) extends GetUpcomingJsonResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetUpcomingJsonResponse } def getUpcomingJson( _req: org.http4s.Request[F], apikey: String ): F[GetUpcomingJsonResponse] sealed trait GetUpcomingJsonByStoreResponse object GetUpcomingJsonByStoreResponse { case class HTTP200(value: com.gilt.public.api.models.SaleList, headers: Seq[org.http4s.Header.ToRaw] = Nil) extends GetUpcomingJsonByStoreResponse case class UndocumentedResponse(response: F[org.http4s.Response[F]]) extends GetUpcomingJsonByStoreResponse } def getUpcomingJsonByStore( _req: org.http4s.Request[F], store: String, apikey: String ): F[GetUpcomingJsonByStoreResponse] 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 / "sales" / "active.json" :? ApikeyStringMatcher(apikey) if apiVersionMatch(_req) => getActiveJson(_req, apikey).flatMap { case GetActiveJsonResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetActiveJsonResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "sales" / "active.json" :? ApikeyStringMatcher(apikey) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "sales" / store / "active.json" :? ApikeyStringMatcher(apikey) if apiVersionMatch(_req) => getActiveJsonByStore(_req, store, apikey).flatMap { case GetActiveJsonByStoreResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetActiveJsonByStoreResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "sales" / store / "active.json" :? ApikeyStringMatcher(apikey) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "sales" / "upcoming.json" :? ApikeyStringMatcher(apikey) if apiVersionMatch(_req) => getUpcomingJson(_req, apikey).flatMap { case GetUpcomingJsonResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetUpcomingJsonResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "sales" / "upcoming.json" :? ApikeyStringMatcher(apikey) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") case _req @ GET -> Root / "sales" / store / "upcoming.json" :? ApikeyStringMatcher(apikey) if apiVersionMatch(_req) => getUpcomingJsonByStore(_req, store, apikey).flatMap { case GetUpcomingJsonByStoreResponse.HTTP200(value, headers) => Ok(value, headers: _*) case GetUpcomingJsonByStoreResponse.UndocumentedResponse(response) => response } case _req @ GET -> Root / "sales" / store / "upcoming.json" :? ApikeyStringMatcher(apikey) if !_req.headers.get(ApiVersion.ApiVersionMajor).isDefined => BadRequest(s"Missing required request header: ${ApiVersion.ApiVersionMajor}.") } }