package Ġorg . ak li mov . fall _ analytics . lib . services . data Ċ Ċ import Ġcom . fasterxml . jackson . databind . node . Array Node Ċ import Ġcom . fasterxml . jackson . databind . node . Object Node Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . request .* Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġmu . K Logging Ċ import Ġorg . ak li mov . fall _ analytics . lib . services . domain . Already Loaded Info Ċ import Ġorg . ak li mov . fall _ analytics . lib . services . domain . Ticker Ċ Ċ /** Ċ Ġ* ĠMO EX ĠISS Ġallows Ġto Ġload Ġdata Ġin Ġpage d - mode , Ġno Ġmore Ġthen Ġ 1 0 0 Ġrows Ġper Ġpage . Ċ Ġ* Ċ Ġ* ĠMO EX ĠISS Ġuses Ġzero - based Ġoffset Ġconvention Ġ( start ĠURL 's Ġparam .) Ċ Ġ* Ċ Ġ* ĠMO EX ĠISS Ġallow Ġfollowing Ġnumbers Ġas Ġvalue Ġof Ġthe Ġ** limit ** Ġparameter : Ġ 1 0 0 , Ġ 5 0 , Ġ 2 0 , Ġ 1 0 , Ġ 5 , Ġ 1 Ċ Ġ* Ċ Ġ* ĠFor ĠMO EX ĠISS Ġsee Ġ[ Programming Ġinterface Ġto Ġthe ĠISS ][ https :// www . mo ex . com / a 2 9 2 0 ] Ċ Ġ*/ Ċ interface ĠHistory Loader Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġticker ĊĠĠĠĠ Ġ* Ġ@ param Ġstart Ġzero - based Ġoffset ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Array Extractor ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit Ġ 1 0 0 , Ġ 5 0 , Ġ 2 0 , Ġ 1 0 , Ġ 5 , Ġ 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġload Pages ( ĊĠĠĠĠĠĠĠ Ġticker : ĠT icker , ĊĠĠĠĠĠĠĠ Ġstart : ĠLong , ĊĠĠĠĠĠĠĠ Ġdata Array Extractor : Ġ( Object Node ) Ġ-> ĠArray Node , ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt Ġ= Ġ 1 0 0 ĊĠĠĠ Ġ): ĠFlow < Object Node > ĊĊĠĠĠ Ġsuspend Ġfun Ġreq Data For Check Loaded ( ticker : ĠT icker , Ġalready Loaded Info : ĠAlready Loaded Info ): ĠObject Node ĊĊĠĠĠ Ġsuspend Ġfun Ġload Record ( ticker : ĠT icker , Ġrec Idx : ĠLong ): ĠObject Node Ċ } Ċ Ċ class ĠMo ex IS SH istory Loader ( ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠHttpClient Ċ ) Ġ: ĠHistory Loader Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Pages ( ĊĠĠĠĠĠĠĠ Ġticker : ĠT icker , ĊĠĠĠĠĠĠĠ Ġstart : ĠLong , ĊĠĠĠĠĠĠĠ Ġdata Array Extractor : Ġ( Object Node ) Ġ-> ĠArray Node , ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt ĊĠĠĠ Ġ): ĠFlow < Object Node > Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStart ĠLoad ĠPages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġticker =$ ticker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart =$ start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit =$ limit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġwhile ( true ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ"# load Pages : Ġoffset =$ offset " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠhttpClient . get < String >( build Url ( ticker , Ġoffset , Ġlimit )). run { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . readValue ( this ) Ġas ĠObject Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( data Array Extractor ( res ). isEmpty ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġlimit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġreq Data For Check Loaded ( ticker : ĠT icker , Ġalready Loaded Info : ĠAlready Loaded Info ): Object Node { ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{" # req Data For Check Loaded : Ġticker =$ ticker Ġ| Ġalready Loaded Info =$ already Loaded Info "} ĊĠĠĠĠĠĠĠ Ġreturn Ġload Record ( ticker , Ġalready Loaded Info . last Row Num Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Record ( ticker : ĠT icker , Ġrec Idx : ĠLong ): ĠObject Node Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ"# load Records : Ġticker =$ ticker Ġ| Ġrec Idx =$ rec Idx " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠhttpClient . get < String >( build Url ( ticker , Ġrec Idx , Ġ 1 )). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . readValue ( this ) Ġas ĠObject Node ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject : ĠK Logging () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= Ġj ack son ObjectMapper () ĊĠĠĠĠĠĠĠ Ġval ĠT ICK ER _ LOAD _ URL _ TP L Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// iss . mo ex . com / iss / history / engines / stock / mark ets / shares / boards / tq br / se cur ities /% s . json ? start =% d & limit =% d & lang = en " ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild Url ( ticker : ĠT icker , Ġstart : ĠLong Ġ= Ġ 0 , Ġlimit : ĠInt Ġ= Ġ 1 0 0 ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT ICK ER _ LOAD _ URL _ TP L . format ( ticker . value , Ġstart , Ġlimit ) ĊĠĠĠ Ġ} Ċ } Ċ