package Ġcom . rar ible . protocol . nft . core . repository . history Ċ Ċ import Ġcom . rar ible . ethereum . domain . Eth UInt 2 5 6 Ċ import Ġcom . rar ible . ethereum . listener . log . domain . Log Event Ċ import Ġcom . rar ible . protocol . nft . core . misc . div Ċ import Ġcom . rar ible . protocol . nft . core . model . History Log Ċ import Ġcom . rar ible . protocol . nft . core . model . Item History Ċ import Ġcom . rar ible . protocol . nft . core . model . ItemId Ċ import Ġcom . rar ible . protocol . nft . core . model . Item Transfer Ċ import Ġcom . rar ible . protocol . nft . core . repository . history . N ft Item History Repository Indexes . ALL _ INDEX ES Ċ import Ġkotlinx . coroutines . reactive . await First Ċ import Ġkotlinx . coroutines . reactive . await First OrNull Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . data . domain . Sort Ċ import Ġorg . springframework . data . mongodb . core . Reactive Mongo Operations Ċ import Ġorg . springframework . data . mongodb . core . query . Criteria Ċ import Ġorg . springframework . data . mongodb . core . query . Query Ċ import Ġorg . springframework . data . mongodb . core . query . gt Ċ import Ġorg . springframework . data . mongodb . core . query . isEqualTo Ċ import Ġreactor . core . publisher . Flux Ċ import Ġreactor . core . publisher . Mono Ċ import Ġscale ther . domain . Address Ċ Ċ class ĠN ft Item History Repository ( ĊĠĠĠ Ġprivate Ġval Ġmongo : ĠReactive Mongo Operations Ċ ) Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġdrop Indexes () Ġ{ ĊĠĠĠĠĠĠĠ Ġdrop Indexes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data . from _ 1 _ data . date _- 1 _ id _- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data . owner _ 1 _ data . date _- 1 _ id _- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data . token _ 1 _ data . date _- 1 _ id _- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data . type _ 1 _ data . date _- 1 _ id _- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data . type _ 1 _ status _ 1 _ data . from _ 1 _ data . date _- 1 _ id _- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data . type _ 1 _ status _ 1 _ data . owner _ 1 _ data . date _- 1 _ id _- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data . type _ 1 _ status _ 1 _ data . token _ 1 _ data . date _- 1 _ id _- 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Same Parameter Value ") ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdrop Indexes ( var arg Ġnames : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Ġ= Ġmongo . index Ops ( COLLECTION ). index Info . map Ġ{ Ġit . name Ġ}. collect List (). await First () ĊĠĠĠĠĠĠĠ Ġfor Ġ( name Ġin Ġnames ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing . contains ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" dro pping Ġindex Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmongo . index Ops ( COLLECTION ). drop Index ( name ). await First OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" sk ipping Ġdrop Ġindex Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcreate Indexes () Ġ{ ĊĠĠĠĠĠĠĠ ĠALL _ INDEX ES . forEach Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmongo . index Ops ( COLLECTION ). ensure Index ( index ). await First () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ( event : ĠLog Event ): ĠMono < Log Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmongo . save ( event , ĠCOL LECTION ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( event : ĠLog Event ): ĠMono < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmongo . remove ( event , ĠCOL LECTION ). map Ġ{ Ġit . was Ack nowled ged () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠfindAll Items History (): ĠFlux < History Log > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Items History ( null , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Items History ( token : ĠAddress ? Ġ= Ġnull , Ġtoken Id : ĠE th UInt 2 5 6 ? Ġ= Ġnull , Ġfrom : ĠItem Id ? Ġ= Ġnull ): ĠFlux < History Log > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġtoken Criteria ( token , Ġtoken Id , Ġfrom ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmongo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find ( Query ( c ). with ( LOG _ SORT _ ASC ), ĠLog Event :: class . java , ĠCOL LECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠHistory Log ( it . data Ġas ĠItem History , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoken Criteria ( token : ĠAddress ?, Ġtoken Id : ĠE th UInt 2 5 6 ?, Ġfrom : ĠItem Id ? Ġ= Ġnull ): ĠCriteria Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ!= Ġnull Ġ&& Ġtoken Id Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCriteria (). and Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: token Ġis EqualTo Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: tokenId Ġis EqualTo Ġtoken Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ!= Ġnull Ġ&& Ġfrom Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCriteria (). and Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: token Ġis EqualTo Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: tokenId Ġgt Ġfrom . tokenId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: token Ġis EqualTo Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCriteria (). or Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCriteria (). and Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: token Ġis EqualTo Ġfrom . token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: tokenId Ġgt Ġfrom . tokenId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: data Ġ/ ĠItem History :: token Ġgt Ġfrom . token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCriteria () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsearch ( query : ĠQuery ): ĠList < Log Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmongo . find ( query , ĠLog Event :: class . java , ĠCOL LECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. await First () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Activity ( filter : ĠActivity Item History Filter ): ĠFlux < Log Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhint Ġ= Ġfilter . hint ĊĠĠĠĠĠĠĠ Ġval Ġsort Ġ= Ġfilter . sort ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= Ġfilter . getC riteria () ĊĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery ( criteria ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( hint Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . with Hint ( hint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġquery . with ( sort . sort ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmongo . find ( query , ĠLog Event :: class . java , ĠCOL LECTION ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOL LECTION Ġ= Ġ" nft _ item _ history " ĊĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( N ft Item History Repository :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval ĠLOG _ SORT _ ASC : ĠSort Ġ= ĠSort . by ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Log Event :: data . name }.${ Item Transfer :: token . name }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Log Event :: data . name }.${ Item Transfer :: tokenId . name }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: block Number . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Event :: log Index . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }