package Ġru . use desk . knowledge base _ sdk . data . repository . api Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġru . use desk . common _ sdk . api . I Use desk Api Factory Ċ import Ġru . use desk . common _ sdk . api . Use desk Api Repository Ċ import Ġru . use desk . common _ sdk . entity . exceptions . Use desk Data NotFoundException Ċ import Ġru . use desk . common _ sdk . entity . exceptions . Use desk HttpException Ċ import Ġru . use desk . knowledge base _ sdk . data . repository . api . entity .* Ċ import Ġru . use desk . knowledge base _ sdk . entity .* Ċ import Ġtoo th pick . Inject Constructor Ċ import Ġjava . util .* Ċ Ċ @ Inject Constructor Ċ internal Ġclass ĠKnowledge Base Api Repository ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfiguration : ĠUse desk Knowledge Base Configuration , ĊĠĠĠĠĠĠĠ Ġapi Factory : ĠI Use desk Api Factory , ĊĠĠĠĠĠĠĠ Ġgson : ĠGson Ċ ) Ġ: ĠUse desk Api Repository < Api Ret rofit >( api Factory , Ġgson , ĠApi Ret rofit :: class . java ), ĠIK nowledge Base Api Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsections : ĠList < Use desk Section >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Sections (): ĠList < Use desk Section > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsections Ġ?: Ġload Sections (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsections Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Categories ( section Id : ĠLong ): ĠList < Use desk Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Sections (). first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id Ġ== Ġsection Id ĊĠĠĠĠĠĠĠ Ġ} ?. categories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUse desk Data NotFoundException (" Categories Ġnot Ġfound Ġby Ġsection Ġid ($ section Id )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Articles ( categoryId : ĠLong ): ĠList < Use desk Article Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Sections (). flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . categories ĊĠĠĠĠĠĠĠ Ġ}. first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . id Ġ== Ġcategory Id ĊĠĠĠĠĠĠĠ Ġ} ?. articles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUse desk Data NotFoundException (" Articles Ġnot Ġfound Ġby Ġcategory Ġid ($ categoryId )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Article ( article Id : ĠLong ): ĠUse desk Article Content Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarticle Content Response Ġ= Ġdo Request ( configuration . url Api , ĠArticle Content Response :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Article Content ( configuration . accountId , Ġarticle Id , Ġconfiguration . token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUse desk Article Content ( article Content Response . id !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Content Response . title Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Content Response . text Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Content Response . categoryId ?. to Long OrNull () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠUse desk HttpException (" Wrong Ġresponse ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Articles ( search Query Request : ĠSearch Query Request ): ĠList < Use desk Article Content > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarticles Search Response Ġ= Ġdo Request ( configuration . url Api , ĠArticles Search Response :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Articles ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . accountId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . query , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . section Ids ?. join ToString ("," ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . category Ids ?. join ToString ("," ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . article Ids ?. join ToString ("," ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . type ?. name ?. lowercase (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . sort ?. name ?. lowercase (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Query Request . order ?. name ?. lowercase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( articles Search Response . articles Ġ?: ĠarrayOf ()). map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUse desk Article Content ( it !!. id !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . title Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . categoryId ?. to Long OrNull () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Views ( article Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Request ( configuration . url Api , ĠAdd Views Response :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Views ( configuration . accountId , Ġarticle Id , Ġconfiguration . token , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend Rating ( article Id : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgood : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Request ( configuration . url Api , ĠChange Rating Response :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . change Rating ( configuration . accountId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( good ) Ġ 1 Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( good ) Ġ 0 Ġelse Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend Rating ( article Id : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Request ( configuration . url Api , ĠCreate Ticket Response :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . create Ticket ( Create Ticket Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . client Email , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . client Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Sections (): ĠList < Use desk Section > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdo Request ( configuration . url Api , ĠArray < Section Response >:: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Sections ( configuration . accountId , Ġconfiguration . token ) ĊĠĠĠĠĠĠĠ Ġ}. map NotNull Ġ{ Ġsection Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= Ġsection Response . categories ?. map NotNull Ġ{ Ġcategory Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Id Ġ= Ġcategory Response !!. id !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticles Ġ= Ġcategory Response . articles ?. map NotNull Ġ{ Ġarticle Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUse desk Article Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Response !!. id !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Response . title Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticle Response . views Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUse desk Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Response . title Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Response . description Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarticles ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUse desk Section ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Response . id !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Response . title Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Response . image , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }