From 88ef7f575ff25d22a283758c236f70a29e373e21 Mon Sep 17 00:00:00 2001 From: Neil Power Date: Mon, 27 Nov 2023 22:49:43 -0800 Subject: [PATCH] Preventing deserialization errors in the case of missing flag maintainers --- src/main/kotlin/com/procurify/flagcounter/FlagCounter.kt | 6 ++++-- src/main/kotlin/com/procurify/flagcounter/FlagReader.kt | 2 +- .../flagcounter/launchdarkly/LaunchDarklyFlagReader.kt | 2 +- .../flagcounter/launchdarkly/LaunchDarklyResponses.kt | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/com/procurify/flagcounter/FlagCounter.kt b/src/main/kotlin/com/procurify/flagcounter/FlagCounter.kt index 2c884c5..bbfb328 100644 --- a/src/main/kotlin/com/procurify/flagcounter/FlagCounter.kt +++ b/src/main/kotlin/com/procurify/flagcounter/FlagCounter.kt @@ -63,8 +63,10 @@ class FlagCounter( teamEmails: Set ): Map> = flagDetails .fold(mapOf>().toMutableMap()) { acc, flagDetail -> - val emailIdentifier = TeamIdentifier(flagDetail.owner.email) - acc[emailIdentifier] = acc[emailIdentifier].orEmpty() + flagDetail + flagDetail.owner?.let { owner -> + val emailIdentifier = TeamIdentifier(owner.email) + acc[emailIdentifier] = acc[emailIdentifier].orEmpty() + flagDetail + } acc } .filter { teamEmails.contains(it.key) } diff --git a/src/main/kotlin/com/procurify/flagcounter/FlagReader.kt b/src/main/kotlin/com/procurify/flagcounter/FlagReader.kt index f5d1dfa..012b363 100644 --- a/src/main/kotlin/com/procurify/flagcounter/FlagReader.kt +++ b/src/main/kotlin/com/procurify/flagcounter/FlagReader.kt @@ -21,7 +21,7 @@ interface FlagReader { */ data class FlagDetail( val key: String, - val owner: Owner, + val owner: Owner?, val status: Status ) diff --git a/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyFlagReader.kt b/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyFlagReader.kt index 5b11423..276404d 100644 --- a/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyFlagReader.kt +++ b/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyFlagReader.kt @@ -91,7 +91,7 @@ class LaunchDarklyFlagReader( }?.let { status -> FlagDetail( key = flag.key, - owner = Owner(flag.maintainer.firstName, flag.maintainer.email), + owner = flag.maintainer?.let { Owner(it.firstName, it.email) }, status = if (status.name in listOf(LDStatus.LAUNCHED, LDStatus.INACTIVE)) { Status.REMOVABLE } else { diff --git a/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyResponses.kt b/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyResponses.kt index 7395031..f44569b 100644 --- a/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyResponses.kt +++ b/src/main/kotlin/com/procurify/flagcounter/launchdarkly/LaunchDarklyResponses.kt @@ -16,7 +16,7 @@ data class LDFlagResponse( data class LDFlagDetail( val key: String, @JsonProperty("_maintainer") - val maintainer: LDFlagMaintainer, + val maintainer: LDFlagMaintainer?, @JsonProperty("_links") val links: LDFlagLinks )