fix prismic integration

leak-master
Thibault Duplessis 2019-12-19 21:34:38 -06:00
parent 04fa3bf5e4
commit c4ffec6703
5 changed files with 15 additions and 20 deletions

View File

@ -99,6 +99,7 @@ prismic {
}
blog {
prismic = ${prismic}
collection = blog
last_post_cache.ttl = 5 minutes
}
chat {

View File

@ -10,10 +10,11 @@ import lila.common.paginator._
final class BlogApi(
asyncCache: lila.memo.AsyncCache.Builder,
prismicUrl: String,
collection: String
config: BlogConfig
)(implicit ec: scala.concurrent.ExecutionContext, ws: WSClient) {
private def collection = config.collection
def recent(
api: Api,
page: Int,
@ -27,9 +28,8 @@ final class BlogApi(
.pageSize(maxPerPage.value)
.page(page)
.submit()
.fold(_ => none, some _) dmap2 {
PrismicPaginator(_, page, maxPerPage)
}
.fold(_ => none, some _)
.dmap2 { PrismicPaginator(_, page, maxPerPage) }
def recent(
prismic: BlogApi.Context,
page: Int,
@ -81,7 +81,7 @@ final class BlogApi(
private val prismicApiCache = asyncCache.single[Api](
name = "blogApi.fetchPrismicApi",
f = Api.get(prismicUrl),
f = Api.get(config.apiUrl),
expireAfter = _.ExpireAfterWrite(15 seconds)
)

View File

@ -5,9 +5,9 @@ import io.methvin.play.autoconfig._
import play.api.Configuration
import scala.concurrent.duration.FiniteDuration
@Module
private class BlogConfig(
@ConfigName("prismic.api_url") val apiUrl: String,
val collection: String,
@ConfigName("last_post_cache.ttl") val lastPostTtl: FiniteDuration
)
@ -24,11 +24,7 @@ final class Env(
private val config = appConfig.get[BlogConfig]("blog")(AutoConfig.loader)
lazy val api = new BlogApi(
prismicUrl = config.apiUrl,
asyncCache = asyncCache,
collection = "blog"
)
lazy val api = wire[BlogApi]
private lazy val notifier = wire[Notifier]

View File

@ -1,14 +1,11 @@
package lila.blog
import scala.concurrent.duration._
import lila.memo.Syncache
final class LastPostCache(
api: BlogApi,
notifier: Notifier,
ttl: FiniteDuration,
collection: String
config: BlogConfig
)(implicit ec: scala.concurrent.ExecutionContext, system: akka.actor.ActorSystem) {
private val cache = new Syncache[Boolean, List[MiniPost]](
@ -16,7 +13,7 @@ final class LastPostCache(
initialCapacity = 1,
compute = _ => fetch,
default = _ => Nil,
expireAfter = Syncache.ExpireAfterWrite(ttl),
expireAfter = Syncache.ExpireAfterWrite(config.lastPostTtl),
strategy = Syncache.NeverWait,
logger = logger
)
@ -25,7 +22,7 @@ final class LastPostCache(
api.prismicApi flatMap { prismic =>
api.recent(prismic, page = 1, lila.common.config.MaxPerPage(3), none) map {
_ ?? {
_.currentPageResults.toList flatMap MiniPost.fromDocument(collection)
_.currentPageResults.toList flatMap MiniPost.fromDocument(config.collection)
}
}
}
@ -39,5 +36,5 @@ final class LastPostCache(
lastNotifiedId = last.id.some
}
def apply = cache sync true
def apply: List[MiniPost] = cache sync true
}

View File

@ -13,11 +13,12 @@ case class MiniPost(
object MiniPost {
def fromDocument(coll: String, imgSize: String = "icon")(doc: io.prismic.Document): Option[MiniPost] =
def fromDocument(coll: String, imgSize: String = "icon")(doc: io.prismic.Document): Option[MiniPost] = {
for {
title <- doc getText s"$coll.title"
shortlede = ~(doc getText s"$coll.shortlede")
date <- doc getDate s"$coll.date" map (_.value)
image <- doc.getImage(s"$coll.image", imgSize).map(_.url)
} yield MiniPost(doc.id, doc.slug, title, shortlede, date.toDateTimeAtStartOfDay, image)
}
}