fun updateByCoordinates()

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))
    }