override fun upsert()

in core/scm-owner/src/main/java/io/klibs/core/owner/ScmOwnerRepositoryJdbc.kt [12:71]


    override fun upsert(entity: ScmOwnerEntity): ScmOwnerEntity {
        val sql = """
            INSERT INTO scm_owner (login,
                                   id_native,
                                   type,
                                   name,
                                   description,
                                   homepage,
                                   twitter_handle,
                                   email,
                                   location,
                                   company,
                                   followers,
                                   updated_at)
            VALUES (:login,
                    :idGh,
                    :type,
                    :name,
                    :description,
                    :homepage,
                    :twitterHandle,
                    :email,
                    :location,
                    :company,
                    :followers,
                    current_timestamp)
            ON CONFLICT (id_native) DO UPDATE
                SET login          = :login,
                    type           = :type,
                    name           = :name,
                    description    = :description,
                    homepage       = :homepage,
                    twitter_handle = :twitterHandle,
                    email          = :email,
                    location       = :location,
                    company        = :company,
                    followers      = :followers,
                    updated_at     = current_timestamp
            RETURNING id;
        """.trimIndent()

        val id = jdbcClient.sql(sql)
            .param("idGh", entity.nativeId)
            .param("login", entity.login)
            .param("type", entity.type.serializableName)
            .param("name", entity.name)
            .param("description", entity.description)
            .param("homepage", entity.homepage)
            .param("twitterHandle", entity.twitterHandle)
            .param("email", entity.email)
            .param("location", entity.location)
            .param("company", entity.company)
            .param("followers", entity.followers)
            .query(Int::class.java)
            .single()

        return requireNotNull(findById(id)) {
            "Unable to find a freshly persisted scm owner"
        }
    }