override suspend fun createOrUpdate()

in space-slack-sync/src/main/kotlin/org/jetbrains/spaceSlackSync/storage/postgres/impl/SlackTeamsStorageImpl.kt [69:105]


    override suspend fun createOrUpdate(
        teamId: String,
        domain: String,
        spaceAppClientId: String,
        accessToken: ByteArray,
        refreshToken: ByteArray,
        accessTokenExpiresAt: LocalDateTime
    ) {
        tx {
            val teamExists = DB.SlackTeams.select { DB.SlackTeams.id eq teamId }.forUpdate().any()
            if (teamExists) {
                DB.SlackTeams.update(
                    where = { DB.SlackTeams.id eq teamId },
                    body = {
                        it[DB.SlackTeams.accessToken] = ExposedBlob(accessToken)
                        it[DB.SlackTeams.accessTokenExpiresAt] = accessTokenExpiresAt
                        it[DB.SlackTeams.refreshToken] = ExposedBlob(refreshToken)
                        it[DB.SlackTeams.tokenInvalid] = false
                    }
                )
            } else {
                DB.SlackTeams.insert {
                    it[DB.SlackTeams.id] = teamId
                    it[DB.SlackTeams.domain] = domain
                    it[DB.SlackTeams.created] = LocalDateTime.now()
                    it[DB.SlackTeams.accessToken] = ExposedBlob(accessToken)
                    it[DB.SlackTeams.accessTokenExpiresAt] = accessTokenExpiresAt
                    it[DB.SlackTeams.refreshToken] = ExposedBlob(refreshToken)
                }
            }

            DB.Slack2Space.insertIgnore {
                it[slackTeamId] = teamId
                it[DB.Slack2Space.spaceAppClientId] = spaceAppClientId
            }
        }
    }