mongo config

import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.ServerApi
import com.mongodb.ServerApiVersion
import com.mongodb.client.MongoClient
import com.mongodb.client.MongoClients
import com.mongodb.client.MongoDatabase
import java.util.concurrent.TimeUnit

class MongoDBConfig(
    connectionString: String,
    databaseName: String,
    private val poolMaxSize: Int = 50,
    private val poolMinSize: Int = 5,
    private val timeoutSeconds: Long = 5,
) : AutoCloseable {

    private val client: MongoClient = MongoClients.create(
        MongoClientSettings.builder()
            .applyConnectionString(ConnectionString(connectionString))
            .serverApi(ServerApi.builder().version(ServerApiVersion.V1).build())
            .applyToConnectionPoolSettings { pool ->
                pool.maxSize(poolMaxSize)
                pool.minSize(poolMinSize)
                pool.maxWaitTime(timeoutSeconds, TimeUnit.SECONDS)
            }
            .applyToSocketSettings { socket ->
                socket.connectTimeout(timeoutSeconds, TimeUnit.SECONDS)
                socket.readTimeout(timeoutSeconds, TimeUnit.SECONDS)
            }
            .build()
    )

    val database: MongoDatabase = client.getDatabase(databaseName)

    override fun close() = client.close()
}