Refactored checkFresh

This commit is contained in:
2026-09-17 15:08:38 +03:00
parent 621fcf90fa
commit e144a7f3c0
2 changed files with 9 additions and 9 deletions
+6 -6
View File
@@ -9,18 +9,18 @@ trait Etagable[A]:
extension (a: A) def etag: String
extension [A, R[X] <: Request[X], E: Etagable](request: R[A]) {
def checkFreshAsync(entity: E)(onStale: => Future[Result])(using ec: ExecutionContext): Future[Result] = {
compareEtag(entity).fold(onStale)(
trait CheckFresh {
protected def checkFreshAsync[A, E: Etagable](entity: E)(onStale: => Future[Result])(using request: Request[A], ec: ExecutionContext): Future[Result] = {
compareEtag(request, entity).fold(onStale)(
etag => Future.successful(NotModified.withHeaders("ETag" -> etag))
)
}
def checkFresh(entity: E)(onStale: => Result): Result = {
compareEtag(entity).fold(onStale)(
protected def checkFresh[A, E: Etagable](entity: E)(onStale: => Result)(using request: Request[A]): Result = {
compareEtag(request, entity).fold(onStale)(
etag => NotModified.withHeaders("ETag" -> etag)
)
}
private def compareEtag(entity: E) = request.headers.get("If-None-Match").filter(e => e == entity.etag)
private def compareEtag[A, E: Etagable](request: Request[A], entity: E) = request.headers.get("If-None-Match").filter(e => e == entity.etag)
}