package Ġorg . en ode framework . mongo Ċ Ċ import ĠFind Published Version Handler Ċ import Ġcom . mongodb . client . model . Filters Ċ import Ġcom . mongodb . client . model . Updates Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġio . vertx . ext . mongo . Mongo Client Ċ import Ġorg . en ode framework . configurations . Event Store Configuration Ċ import Ġorg . en ode framework . event ing . IP ub lished Version Store Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ /** Ċ Ġ* Ġ@ author Ġan ru ence @ gmail . com Ċ Ġ*/ Ċ class ĠMongo Published Version Store Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmongo Client : ĠMongo Client , ĊĠĠĠ Ġprivate Ġval Ġconfiguration : ĠEvent Store Configuration Ġ= ĠEvent Store Configuration . mongo () Ċ ) Ġ: ĠIP ub lished Version Store Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġupdate Published Version Async ( ĊĠĠĠĠĠĠĠ Ġprocessor Name : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root TypeName : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root Id : ĠString , ĊĠĠĠĠĠĠĠ Ġpublished Version : ĠInt ĊĠĠĠ Ġ): ĠCompletableFuture < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinsert Ġ= Ġpublished Version Ġ== Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( insert ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinsert Async ( processor Name , Ġaggregate Root TypeName , Ġaggregate Root Id , Ġpublished Version ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġupdate Async ( processor Name , Ġaggregate Root TypeName , Ġaggregate Root Id , Ġpublished Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert Async ( ĊĠĠĠĠĠĠĠ Ġprocessor Name : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root TypeName : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root Id : ĠString , ĊĠĠĠĠĠĠĠ Ġpublished Version : ĠInt ĊĠĠĠ Ġ): ĠCompletableFuture < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġdocument . put (" processor Name ", Ġprocessor Name ) ĊĠĠĠĠĠĠĠ Ġdocument . put (" aggregate Root TypeName ", Ġaggregate Root TypeName ) ĊĠĠĠĠĠĠĠ Ġdocument . put (" aggregate Root Id ", Ġaggregate Root Id ) ĊĠĠĠĠĠĠĠ Ġdocument . put (" version ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġdocument . put (" gmt Create ", ĠDate (). to Instant ()) ĊĠĠĠĠĠĠĠ Ġval Ġpublished Version Handler Ġ= ĠAdd Published Version Handler ( configuration ) ĊĠĠĠĠĠĠĠ Ġmongo Client . insert ( configuration . published TableName , Ġdocument , Ġpublished Version Handler ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpublished Version Handler . future ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Async ( ĊĠĠĠĠĠĠĠ Ġprocessor Name : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root TypeName : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root Id : ĠString , ĊĠĠĠĠĠĠĠ Ġpublished Version : ĠInt ĊĠĠĠ Ġ): ĠCompletableFuture < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠFilters . and ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilters . eq (" version ", Ġpublished Version Ġ- Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilters . eq (" processor Name ", Ġprocessor Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilters . eq (" aggregate Root Id ", Ġaggregate Root Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= ĠUpdates . combine ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdates . set (" version ", Ġpublished Version ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdates . set (" gmt Create ", ĠDate (). to Instant ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġquery Json Ġ= ĠJsonObject ( filter . to B son Document (). toJson ()) ĊĠĠĠĠĠĠĠ Ġval Ġupdate Json Ġ= ĠJsonObject ( update . to B son Document (). toJson ()) ĊĠĠĠĠĠĠĠ Ġval Ġpublish Handle Ġ= ĠChange Published Version Handler () ĊĠĠĠĠĠĠĠ Ġmongo Client . update Collection ( configuration . published TableName , Ġquery Json , Ġupdate Json , Ġpublish Handle ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpublish Handle . future ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Published Version Async ( ĊĠĠĠĠĠĠĠ Ġprocessor Name : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root TypeName : ĠString , ĊĠĠĠĠĠĠĠ Ġaggregate Root Id : ĠString ĊĠĠĠ Ġ): ĠCompletableFuture < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdate Filter Ġ= ĠFilters . and ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilters . eq (" processor Name ", Ġprocessor Name ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilters . eq (" aggregate Root Id ", Ġaggregate Root Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġquery Json Ġ= ĠJsonObject ( update Filter . to B son Document (). toJson ()) ĊĠĠĠĠĠĠĠ Ġval Ġquery Version Handler Ġ= ĠFind Published Version Handler () ĊĠĠĠĠĠĠĠ Ġmongo Client . findOne ( configuration . published TableName , Ġquery Json , Ġnull , Ġquery Version Handler ) ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Version Handler . future ĊĠĠĠ Ġ} Ċ }