Skip to content

Commit ead3d1a

Browse files
committed
Add VersionWithFirstSeen
1 parent c342785 commit ead3d1a

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

modules/core/src/main/scala/org/scalasteward/core/coursier/VersionsCache.scala

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ package org.scalasteward.core.coursier
1818

1919
import cats.implicits.*
2020
import cats.{MonadThrow, Parallel}
21-
import io.circe.generic.semiauto.deriveCodec
21+
import io.circe.generic.semiauto.{deriveCodec, deriveDecoder, deriveEncoder}
2222
import io.circe.{Codec, KeyEncoder}
2323
import org.scalasteward.core.coursier.VersionsCache.{Key, Value}
2424
import org.scalasteward.core.data.{Dependency, Resolver, Scope, Version}
2525
import org.scalasteward.core.persistence.KeyValueStore
2626
import org.scalasteward.core.util.{DateTimeAlg, Timestamp}
2727
import scala.concurrent.duration.FiniteDuration
28+
import io.circe.Encoder
29+
import io.circe.Decoder
2830

2931
final 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
}

modules/core/src/main/scala/org/scalasteward/core/data/Version.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import cats.implicits.*
2121
import cats.parse.{Numbers, Parser, Rfc5234}
2222
import io.circe.{Decoder, Encoder}
2323
import org.scalasteward.core.data.Version.startsWithDate
24+
import java.time.Instant
2425

2526
final case class Version(value: String) {
2627
override def toString: String = value

0 commit comments

Comments
 (0)