override fun upsert()

in core/scm-repository/src/main/kotlin/io/klibs/core/scm/repository/ScmRepositoryRepositoryJdbc.kt [16:97]


    override fun upsert(entity: ScmRepositoryEntity): ScmRepositoryEntity {
        val sql = """
            INSERT INTO scm_repo (id_native,
                                  name,
                                  description,
                                  default_branch,
                                  created_ts,
                                  owner_id,
                                  homepage,
                                  has_gh_pages,
                                  has_issues,
                                  has_wiki,
                                  has_readme,
                                  license_key,
                                  license_name,
                                  stars,
                                  open_issues,
                                  last_activity_ts,
                                  updated_at,
                                  minimized_readme)
            VALUES (:idGh,
                    :name,
                    :description,
                    :defaultBranch,
                    :createdTs,
                    :ownerId,
                    :homepage,
                    :hasGhPages,
                    :hasIssues,
                    :hasWiki,
                    :hasReadme,
                    :licenseKey,
                    :licenseName,
                    :stars,
                    :openIssues,
                    :lastActivityTs,
                    current_timestamp,
                    :minimizedReadme)
            ON CONFLICT (id_native) DO UPDATE SET name             = :name,
                                                  description      = :description,
                                                  default_branch   = :defaultBranch,
                                                  owner_id         = :ownerId,
                                                  homepage         = :homepage,
                                                  has_gh_pages     = :hasGhPages,
                                                  has_issues       = :hasIssues,
                                                  has_wiki         = :hasWiki,
                                                  has_readme       = :hasReadme,
                                                  license_key      = :licenseKey,
                                                  license_name     = :licenseName,
                                                  stars            = :stars,
                                                  open_issues      = :openIssues,
                                                  last_activity_ts = :lastActivityTs,
                                                  updated_at       = current_timestamp,
                                                  minimized_readme  = :minimizedReadme
            RETURNING id;
        """.trimIndent()

        val id = jdbcClient.sql(sql)
            .param("idGh", entity.nativeId)
            .param("name", entity.name)
            .param("description", entity.description)
            .param("defaultBranch", entity.defaultBranch)
            .param("createdTs", Timestamp.from(entity.createdTs))
            .param("ownerId", entity.ownerId)
            .param("homepage", entity.homepage)
            .param("hasGhPages", entity.hasGhPages)
            .param("hasIssues", entity.hasIssues)
            .param("hasWiki", entity.hasWiki)
            .param("hasReadme", entity.hasReadme)
            .param("licenseKey", entity.licenseKey)
            .param("licenseName", entity.licenseName)
            .param("stars", entity.stars)
            .param("openIssues", entity.openIssues)
            .param("lastActivityTs", Timestamp.from(entity.lastActivityTs))
            .param("minimizedReadme", entity.minimizedReadme)
            .query(Int::class.java)
            .single()

        return requireNotNull(findById(id)) {
            "Unable to find a freshly upserted scm repository"
        }
    }