package Ġnet . ad opt openjdk . api . v 3 . data Sources . pers it ence . mongo Ċ Ċ import Ġorg . lit ote . km ongo . coroutine . Coroutine Client Ċ import Ġorg . lit ote . km ongo . coroutine . Coroutine Database Ċ import Ġorg . lit ote . km ongo . coroutine . coroutine Ċ import Ġorg . lit ote . km ongo . reactiv est ream s . K Mongo Ċ import Ġorg . slf 4 j . LoggerFactory ĊĊ Ċ object ĠMongo Client Factory Ġ{ ĊĠĠĠ Ġ// ĠCurrent Ġdefault Ġimpl Ġis Ġmongo Ġimpl ĊĠĠĠ Ġprivate Ġvar Ġimpl : ĠMongo Client ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget (): ĠMongo Client Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( impl Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimpl Ġ= ĠMongo Client () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġimpl !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ( impl : ĠMongo Client ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠMongo Client Factory . impl Ġ= Ġimpl ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMongo Client Ġ{ ĊĠĠĠ Ġval Ġdatabase : ĠCor outine Database ĊĠĠĠ Ġval Ġclient : ĠCor outine Client ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb Name Ġ= ĠSystem . getenv (" MONGO DB _ DB NAME ") Ġ?: Ġ" api - data " ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= ĠSystem . getenv (" MONGO DB _ USER ") ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= ĠSystem . getenv (" MONGO DB _ PASSWORD ") ĊĠĠĠĠĠĠĠ Ġval Ġhost Ġ= ĠSystem . getenv (" MONGO DB _ HOST ") Ġ?: Ġ" localhost " ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= ĠSystem . getenv (" MONGO DB _ PORT ") Ġ?: Ġ" 2 7 0 1 7 " ĊĊĠĠĠĠĠĠĠ ĠLOGGER . info (" Connecting Ġto Ġmongodb ://${ username }: a - password @ ${ host }:${ port }/${ dbName }") ĊĠĠĠĠĠĠĠ Ġvar Ġuri Ġ= Ġif Ġ( username Ġ!= Ġnull Ġ&& Ġpassword Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mongodb ://${ username }:${ password }@ ${ host }:${ port }/${ dbName }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mongodb ://${ host }:${ port }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( System . getProperty (" MONGO _ DB ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= ĠSystem . getProperty (" MONGO _ DB ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠK Mongo . create Client ( uri ). coroutine ĊĠĠĠĠĠĠĠ Ġdatabase Ġ= Ġclient . get Database ( dbName ) ĊĠĠĠ Ġ} Ċ Ċ }