@@ -18,13 +18,15 @@ package org.scalasteward.core.coursier
1818
1919import cats .implicits .*
2020import cats .{MonadThrow , Parallel }
21- import io .circe .generic .semiauto .deriveCodec
21+ import io .circe .generic .semiauto .{ deriveCodec , deriveDecoder , deriveEncoder }
2222import io .circe .{Codec , KeyEncoder }
2323import org .scalasteward .core .coursier .VersionsCache .{Key , Value }
2424import org .scalasteward .core .data .{Dependency , Resolver , Scope , Version }
2525import org .scalasteward .core .persistence .KeyValueStore
2626import org .scalasteward .core .util .{DateTimeAlg , Timestamp }
2727import scala .concurrent .duration .FiniteDuration
28+ import io .circe .Encoder
29+ import io .circe .Decoder
2830
2931final class VersionsCache [F [_]](
3032 cacheTtl : FiniteDuration ,
@@ -53,7 +55,7 @@ final class VersionsCache[F[_]](
5355 case maybeValue =>
5456 coursierAlg.getVersions(dependency, resolver).attempt.flatMap {
5557 case Right (versions) =>
56- store.put(key, Value (now, versions, None )).as(versions)
58+ store.put(key, Value (now, versions.map(addCurrentTime) , None )).as(versions)
5759 case Left (throwable) =>
5860 val versions = maybeValue.map(_.versions).getOrElse(List .empty)
5961 store.put(key, Value (now, versions, Some (throwable.toString))).as(versions)
@@ -79,7 +81,7 @@ object VersionsCache {
7981
8082 final case class Value (
8183 updatedAt : Timestamp ,
82- versions : List [Version ],
84+ versions : List [( Version , Instant ) ],
8385 maybeError : Option [String ]
8486 ) {
8587 def maxAgeFactor : Long =
@@ -90,4 +92,18 @@ object VersionsCache {
9092 implicit val valueCodec : Codec [Value ] =
9193 deriveCodec
9294 }
95+
96+ final case class VersionWithFirstSeen (
97+ version : Version ,
98+ firstSeen : Option [Timestamp ]
99+ )
100+
101+ object VersionWithFirstSeen {
102+ implicit val valueEncoder : Encoder [VersionWithFirstSeen ] = deriveEncoder
103+ implicit val valueDecoder : Decoder [VersionWithFirstSeen ] =
104+ deriveDecoder[VersionWithFirstSeen ]
105+ .or(
106+ Decoder [Version ].map(v => VersionWithFirstSeen (v, None ))
107+ )
108+ }
93109}
0 commit comments