package Ġmark sync . remote . qi ita Ċ Ċ import Ġmark sync . lib . Mapper Ċ import Ġokhttp 3 . Headers . Companion . to Headers Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ Ċ /** Ċ Ġ* ĠClient Ġfor ĠQ i ita ĠAPI Ġv 2 Ċ Ġ* Ċ Ġ* Ġhttps :// qi ita . com / api / v 2 / docs Ċ Ġ*/ Ċ class ĠQ i ita ApiClient ( ĊĠĠĠ ĠaccessToken : ĠString , ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠOk HttpClient Ġ= ĠOk HttpClient () Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġendpoint Ġ= Ġ" https :// qi ita . com / api / v 2 " ĊĠĠĠ Ġprivate Ġval Ġheaders Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" Content - Type " Ġto Ġ" application / json ", ĊĠĠĠĠĠĠĠ Ġ" Authorization " Ġto Ġ" Bearer Ġ$ accessToken " ĊĠĠĠ Ġ). to Headers () ĊĊĠĠĠ Ġdata Ġclass ĠQ i ita User ( ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġitems _ count : ĠInt ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġuser . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUser ( username : ĠString ): ĠQ i ita User ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ endpoint / users /$ username ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ ĠSystem . err . println ("# Ġ${ request . method } Ġ${ request . url }") ĊĠĠĠĠĠĠĠ ĠhttpClient . new Call ( request ). execute (). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ("${ response . code } Ġ${ response . message }: Ġ${ response . body !!. string () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMapper . read Json ( response . body !!. string (), ĠQ i ita User :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġitems . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Items ( username : ĠString ): ĠList < Qi ita Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetUser ( username )?. let Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. (( user . items _ count Ġ- Ġ 1 ) Ġ/ Ġ 1 0 0 )). flatMap Ġ{ Ġget Items ( username , Ġit Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠlistOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġitems Ġper Ġpage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Items ( username : ĠString , Ġpage : ĠInt ): ĠList < Qi ita Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ endpoint / items ? query = user :$ username & page =$ page & per _ page = 1 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ ĠSystem . err . println ("# Ġ${ request . method } Ġ${ request . url }") ĊĠĠĠĠĠĠĠ ĠhttpClient . new Call ( request ). execute (). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ("${ response . code } Ġ${ response . message }: Ġ${ response . body !!. string () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMapper . read Json ( response . body !!. string (), ĠArray < Qi ita Item >:: class . java ). toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġitem . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetItem ( id : ĠString ): ĠQ i ita Item ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ("$ endpoint / items /$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ ĠSystem . err . println ("# Ġ${ request . method } Ġ${ request . url }") ĊĠĠĠĠĠĠĠ ĠhttpClient . new Call ( request ). execute (). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ("${ response . code } Ġ${ response . message }: Ġ${ response . body !!. string () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMapper . read Json ( response . body !!. string (), ĠQ i ita Item :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġitem . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Item ( item : ĠQ i ita Item ): ĠQ i ita Item ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠMapper . get Json ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body " Ġto Ġitem . getDocument Body (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" private " Ġto Ġitem .` private `, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tags " Ġto Ġitem . tags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title " Ġto Ġitem . getDocument Title () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠRequest . Builder (). headers ( headers ) ĊĠĠĠĠĠĠĠ Ġif Ġ( item . id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . url ("$ endpoint / items ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( data . toByteArray (). to RequestBody (" application / json ". to MediaType ())) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . url ("$ endpoint / items /${ item . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. patch ( data . toByteArray (). to RequestBody (" application / json ". to MediaType ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ ĠSystem . err . println ("# Ġ${ request . method } Ġ${ request . url }") ĊĠĠĠĠĠĠĠ ĠhttpClient . new Call ( request ). execute (). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ("${ response . code } Ġ${ response . message }: Ġ${ response . body !!. string () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMapper . read Json ( response . body !!. string (), ĠQ i ita Item :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ