in core/package/src/main/kotlin/io/klibs/core/pckg/service/PackageService.kt [21:49]
fun updateByCoordinates(packageDTO: PackageDTO): PackageDTO? {
val existingPackage = packageRepository.findByGroupIdAndArtifactIdAndVersion(
packageDTO.groupId,
packageDTO.artifactId,
packageDTO.version
) ?: return null
val updatedPackage = packageDTO.toEntity().deepCopy(id = existingPackage.id)
val existingTargetsByKey = existingPackage.targets.associateBy { it.platform to it.target }
updatedPackage.targets.clear()
packageDTO.targets.forEach { incoming ->
val key = incoming.platform to incoming.target
val reused = existingTargetsByKey[key]
if (reused != null) {
updatedPackage.addTarget(reused)
} else {
updatedPackage.addTarget(
PackageTargetEntity(
platform = incoming.platform,
target = incoming.target
)
)
}
}
return PackageDTO.fromEntity(packageRepository.save(updatedPackage))
}