fix prismic integration
parent
04fa3bf5e4
commit
c4ffec6703
|
@ -99,6 +99,7 @@ prismic {
|
|||
}
|
||||
blog {
|
||||
prismic = ${prismic}
|
||||
collection = blog
|
||||
last_post_cache.ttl = 5 minutes
|
||||
}
|
||||
chat {
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue