Skip to content

Instantly share code, notes, and snippets.

@vigneshwaranr
Last active February 14, 2021 08:14
Show Gist options
  • Save vigneshwaranr/ce75246f8b9e8a23c057bb5f6d3362e1 to your computer and use it in GitHub Desktop.
Save vigneshwaranr/ce75246f8b9e8a23c057bb5f6d3362e1 to your computer and use it in GitHub Desktop.

Revisions

  1. @vigneshwaran-raveendran vigneshwaran-raveendran revised this gist Feb 14, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion almost-good-api.scala
    Original file line number Diff line number Diff line change
    @@ -21,7 +21,7 @@ class API(cacheService: CacheService, processor: Processor) {
    for {
    dedupedRequest <- cacheService.isDuplicateRequest(request)
    response <- processor.process(dedupedRequest)
    _ <- cacheService.setCacheForDeduplication(dedupedRequest)
    _ <- cacheService.setCacheForDeduplication(dedupedRequest) // what's wrong here?
    } yield response
    }
    }
  2. @vigneshwaran-raveendran vigneshwaran-raveendran revised this gist Feb 14, 2021. 1 changed file with 7 additions and 5 deletions.
    12 changes: 7 additions & 5 deletions almost-good-api.scala
    Original file line number Diff line number Diff line change
    @@ -1,16 +1,18 @@
    import scala.concurrent.ExecutionContext.Implicits.global
    import scala.concurrent.Future
    import scala.concurrent.{ExecutionContext, Future}

    trait Request

    trait Response

    trait CacheService {
    def isDuplicateRequest(request: Request): Future[Option[Request]]
    def setCacheForDeduplication(dedupedReq: Option[Request]): Future[Boolean]
    def isDuplicateRequest(request: Request)(implicit ec: ExecutionContext): Future[Option[Request]]

    def setCacheForDeduplication(dedupedReq: Option[Request])(implicit ec: ExecutionContext): Future[Boolean]
    }

    trait Processor {
    def process(request: Option[Request]): Future[Response]
    def process(request: Option[Request])(implicit ec: ExecutionContext): Future[Response]
    }

    class API(cacheService: CacheService, processor: Processor) {
    @@ -19,7 +21,7 @@ class API(cacheService: CacheService, processor: Processor) {
    for {
    dedupedRequest <- cacheService.isDuplicateRequest(request)
    response <- processor.process(dedupedRequest)
    _ <- cacheService.setCacheForDeduplication(dedupedRequest) // what's wrong here?
    _ <- cacheService.setCacheForDeduplication(dedupedRequest)
    } yield response
    }
    }
  3. @vigneshwaran-raveendran vigneshwaran-raveendran created this gist Feb 14, 2021.
    25 changes: 25 additions & 0 deletions almost-good-api.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,25 @@
    import scala.concurrent.ExecutionContext.Implicits.global
    import scala.concurrent.Future

    trait Request
    trait Response

    trait CacheService {
    def isDuplicateRequest(request: Request): Future[Option[Request]]
    def setCacheForDeduplication(dedupedReq: Option[Request]): Future[Boolean]
    }

    trait Processor {
    def process(request: Option[Request]): Future[Response]
    }

    class API(cacheService: CacheService, processor: Processor) {

    def process(request: Request): Future[Response] = {
    for {
    dedupedRequest <- cacheService.isDuplicateRequest(request)
    response <- processor.process(dedupedRequest)
    _ <- cacheService.setCacheForDeduplication(dedupedRequest) // what's wrong here?
    } yield response
    }
    }