package Ġcom . ick . kal amb ury . net . api Ċ Ċ import Ġcom . ick . kal amb ury . net . api . dto . Table Config Dto Ċ import Ġcom . ick . kal amb ury . net . api . dto . Table Id Dto Ċ import Ġcom . ick . kal amb ury . net . api . dto . Tables Dto Ċ import Ġcom . ick . kal amb ury . net . api . exceptions .* Ċ import Ġcom . ick . kal amb ury . util . Scheduler Provider Ċ import Ġcom . jak ew h art on . ret rofit 2 . converter . kotlin x . serialization . as Converter Factory Ċ import Ġio . reactivex . rx java 3 . core . Comp letable Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . Multipart Body Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . RequestBody Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġretrofit 2 . HttpException Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 3 . Rx Java 3 Call Adapter Factory Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . IOException Ċ import Ġretrofit 2 . adapter . rx java 3 . Result Ġas ĠRet rofit Result Ċ Ċ class ĠRest Api Manager ( ĊĠĠĠ Ġclient : ĠOk HttpClient , ĊĠĠĠ ĠbaseUrl : ĠString , ĊĠĠĠ Ġprivate Ġval Ġs chedulers : ĠScheduler Provider , Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġapi : ĠRest Api Interface Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠ Ġ. baseUrl ( baseUrl ) ĊĠĠĠĠĠĠĠ Ġ. client ( client ) ĊĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Json . as Converter Factory (" application / json ". to MediaType ())) ĊĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 3 Call Adapter Factory . create ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ. create ( RestApi Interface :: class . java ) ĊĊĠĠĠ Ġfun Ġget Tables (): ĠSingle < Result < Tables Dto >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapi . get Tables () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: handle Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Table ( ĊĠĠĠĠĠĠĠ Ġuuid : ĠString , ĊĠĠĠĠĠĠĠ Ġnickname : ĠString , ĊĠĠĠĠĠĠĠ Ġconfig : ĠTable Config Dto ĊĠĠĠ Ġ): ĠSingle < Result < Table Id Dto >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapi . createTable ( uuid , Ġnickname , Ġconfig ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: handle Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Words Set ( setId : ĠString ): ĠSingle < Result < ByteArray >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapi . get Words Set ( setId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isError ) Ġreturn @ map ĠResult . failure ( get Exception ( it . error () !! )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbody : ĠResponse Body ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . response () !!. let Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġ== Ġnull ) Ġreturn @ map ĠResult . failure ( Network FailureException (" No Ġresponse Ġbody ! ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody !!. byte Stream (). copy To ( out ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠResult . success ( out . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠResult . failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNon Successful Response Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . code (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠResult . failure ( Network FailureException ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Submit ( file : ĠMultip art Body . Part , Ġbody : ĠRequest Body ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapi . submit Logs ( file , Ġbody ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( schedul ers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ ĠComp letable . error Ġ{ Ġget Exception ( it ) Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġhandle Result ( ret rofit Result : ĠRet rofit Result < T >): ĠResult < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ret rofit Result . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( get Exception ( ret rofit Result . error () !! )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( ret rofit Result . response () !!. body () !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Exception ( throwable : ĠThrowable ): ĠThrowable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( throwable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIOException Ġ-> ĠNetwork FailureException ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Exception Ġ-> Ġconvert HttpException ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrowable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert HttpException ( exception : ĠHttp Exception ): ĠThrowable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( exception . code ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 0 Ġ-> ĠBadRequest Exception ( exception . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 1 Ġ-> ĠAuthorization FailedException ( exception . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 4 Ġ-> ĠNotFound Exception ( exception . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 9 Ġ-> ĠConflict Exception ( exception . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 2 9 Ġ-> ĠToo Many Requests Exception ( exception . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNon Successful Response Exception ( exception . code (), Ġexception . message ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }