package Ġcom . rar ible . protocol . nft order . core . repository Ċ Ċ import Ġcom . mongodb . client . result . Delete Result Ċ import Ġcom . rar ible . protocol . nft order . core . data . Item Sell Stats Ċ import Ġcom . rar ible . protocol . nft order . core . model . ItemId Ċ import Ġcom . rar ible . protocol . nft order . core . model . Ownership Ċ import Ġcom . rar ible . protocol . nft order . core . model . Ownership Id Ċ import Ġcom . rar ible . protocol . nft order . core . model . Short Order Ċ import Ġkotlinx . coroutines . reactive . await First Ċ import Ġkotlinx . coroutines . reactive . await First OrElse Ċ import Ġkotlinx . coroutines . reactive . await First OrNull Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . bson . Document Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . data . domain . Sort Ċ import Ġorg . springframework . data . mongodb . core . Reactive Mongo Template Ċ import Ġorg . springframework . data . mongodb . core . findById Ċ import Ġorg . springframework . data . mongodb . core . index . Index Ċ import Ġorg . springframework . data . mongodb . core . query .* Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . math . BigInteger Ċ Ċ @ Component Ċ class ĠOwn ership Repository ( ĊĠĠĠ Ġprivate Ġval Ġtemplate : ĠReactive Mongo Template Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Ownership Repository :: class . java ) ĊĊĠĠĠ Ġval Ġcollection : ĠString Ġ= Ġtemplate . get Collection Name ( Ownership :: class . java ) ĊĊĠĠĠ Ġsuspend Ġfun Ġsave ( ownership : ĠOwn ership ): ĠOwn ership Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . save ( ownership ). await First () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget ( id : ĠOwn ership Id ): ĠOwn ership ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . findById < Ownership >( id ). await First OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠfindAll ( ids : ĠList < Ownership Id >): ĠList < Ownership > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . find < Ownership >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuery ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOwn ership :: id Ġin Values Ġids ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOwn ership :: class . java ĊĠĠĠĠĠĠĠ Ġ). collect List (). await First () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete ( ownership Id : ĠOwn ership Id ): ĠDelete Result ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= ĠCriteria ("_ id "). isEqualTo ( ownership Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . remove ( Query ( criteria ), Ġcollection ). await First OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetItem Sell Stats ( itemId : ĠItem Id ): ĠItem Sell Stats Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbest Sell Order Field Ġ= ĠOwn ership :: best Sell Order . name ĊĠĠĠĠĠĠĠ Ġval Ġmake Stock Field Ġ= ĠShort Order :: make Stock . name ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠQuery ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCriteria (). and Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOwn ership :: contract Ġis EqualTo ĠitemId . token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOwn ership :: tokenId Ġis EqualTo ĠitemId . tokenId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOwn ership :: best Sell Order Ġexists Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġquery . fields (). include ("$ best Sell Order Field .$ make Stock Field ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠBigInteger Ġstored Ġas ĠString , Ġso Ġwe Ġhave Ġto Ġretrieve Ġit Ġand Ġcast Ġto ĠNumber Ġmanually ĊĠĠĠĠĠĠĠ Ġval Ġmapping Ġ= Ġtemplate . find ( query , ĠDocument :: class . java , Ġcollection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġeach Ġrecord Ġmeans Ġ 1 Ġunique Ġownership ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ 1 Ġto ĠBigInteger ( it . get ( best Sell Order Field , ĠDocument :: class . java ). getString ( make Stock Field )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġn 1 , Ġn 2 Ġ-> ĠPair ( n 1 . first Ġ+ Ġn 2 . first , Ġn 1 . second . plus ( n 2 . second )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. await First OrElse Ġ{ ĠPair ( 0 , ĠBigInteger . ZERO ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠItem Sell Stats ( mapping . first , Ġmapping . second ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcreate Indices () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ ĠInd ices . ALL . forEach Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Ensure Ġindex Ġ'{}' Ġfor Ġcollection Ġ'{} '", Ġindex , Ġcollection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate . index Ops ( collection ). ensure Index ( index ). await First () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠInd ices Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠOWNER SHIP _ CONTRACT _ TOKEN ID : ĠIndex Ġ= ĠIndex () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( Ownership :: contract . name , ĠSort . Direction . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( Ownership :: tokenId . name , ĠSort . Direction . ASC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background () ĊĊĠĠĠĠĠĠĠ Ġval ĠALL Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOWNER SHIP _ CONTRACT _ TOKEN ID ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }