UpdateModels.kt

package com.depanalyzer.update

import com.depanalyzer.parser.Ecosystem
import java.nio.charset.StandardCharsets
import java.security.MessageDigest

data class UpdateSuggestion(
    val groupId: String,
    val artifactId: String,
    val currentVersion: String,
    val newVersion: String,
    val reason: UpdateReason,
    val targetType: UpdateTargetType = UpdateTargetType.DIRECT,
    val viaDirectCoordinate: String? = null,
    val ecosystem: Ecosystem = Ecosystem.MAVEN
) {
    val coordinate: String
        get() = "$groupId:$artifactId"

    val suggestionId: String
        get() {
            val raw = listOf(
                ecosystem.name,
                groupId,
                artifactId,
                currentVersion,
                newVersion,
                reason.name,
                targetType.name,
                viaDirectCoordinate.orEmpty()
            ).joinToString("|")
            return MessageDigest.getInstance("SHA-256")
                .digest(raw.toByteArray(StandardCharsets.UTF_8))
                .take(8)
                .joinToString("") { "%02x".format(it) }
        }
}

enum class UpdateTargetType {
    DIRECT,
    TRANSITIVE_OVERRIDE;

    fun label(): String = when (this) {
        DIRECT -> "directa"
        TRANSITIVE_OVERRIDE -> "override"
    }
}

enum class UpdateReason {
    OUTDATED,
    CVE;

    fun label(): String {
        return when (this) {
            OUTDATED -> "outdated"
            CVE -> "CVE"
        }
    }
}

data class UpdateResult(
    val suggestion: UpdateSuggestion,
    val applied: Boolean,
    val note: String
)