package Ġorg . fl ax o . frontend . client Ċ Ċ import Ġkotlinx . serialization . list Ċ import Ġkotlinx . serialization . map Ċ import Ġkotlinx . serialization . serializer Ċ import Ġorg . fl ax o . common . data . Course Ċ import Ġorg . fl ax o . common . data . Course Settings Ċ import Ġorg . fl ax o . common . data . Course Statistics Ċ import Ġorg . fl ax o . common . data . Github Auth Data Ċ import Ġorg . fl ax o . common . data . Pl ag iar ism Report Ċ import Ġorg . fl ax o . common . data . Solution Ċ import Ġorg . fl ax o . common . data . Solution Review Ċ import Ġorg . fl ax o . common . data . Task Ċ import Ġorg . fl ax o . common . data . User Ċ import Ġorg . fl ax o . frontend . Container Ċ import Ġorg . fl ax o . frontend . Credentials Ċ Ċ /** Ċ Ġ* ĠFl ax o Ġclient Ġimplementation Ġbased Ġon Ġthe Ġ[ HttpRequest ] Ġclient . Ċ Ġ*/ Ċ class ĠXMLHttpRequest Fl ax o Client ( private Ġval ĠbaseUrl : ĠString ) Ġ: ĠFl ax o Client Ġ{ ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCO URSE _ NAME Ġ= Ġ" course Name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTASK _ BRANCH Ġ= Ġ" task Branch " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠN ICK NAME Ġ= Ġ" nickname " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPASSWORD Ġ= Ġ" password " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDESCRIPTION Ġ= Ġ" description " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPRIVATE Ġ= Ġ" private " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLANGUAGE Ġ= Ġ" language " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTEST ING _ LANGUAGE Ġ= Ġ" testing Language " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTEST ING _ FRAME WORK Ġ= Ġ" testing Framework " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNUMBER _ OF _ TASK S Ġ= Ġ" numberOf Tasks " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCO URSE Ġ= Ġ" course " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOWNER Ġ= Ġ" owner " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDE AD LINE Ġ= Ġ" deadline " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTOKEN Ġ= Ġ" token " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFORMAT Ġ= Ġ" format " ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠContainer . json ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġregister User ( credentials : ĠCredentials ): ĠUser Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ user / register " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( N ICK NAME Ġto Ġcredentials . username , ĠPASSWORD Ġto Ġcredentials . password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( User . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" User Ġregistering Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Self ( credentials : ĠCredentials ): ĠUser Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ user " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( User . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Current Ġuser Ġretrieving Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetUser Courses ( credentials : ĠCredentials , Ġusername : ĠString ): ĠList < Course > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / all " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( N ICK NAME Ġto Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Course . serializer (). list , Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" User Ġcourses Ġretrieving Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Course ( credentials : ĠCredentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtesting Language : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtesting Framework : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Tasks : ĠInt ĊĠĠĠ Ġ): ĠCourse Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / create " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDESCRIPTION Ġto Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIVATE Ġto Ġprivate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLANGUAGE Ġto Ġlanguage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEST ING _ LANGUAGE Ġto Ġtesting Language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEST ING _ FRAME WORK Ġto Ġtesting Framework , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNUMBER _ OF _ TASK S Ġto ĠnumberOf Tasks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Course . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Course Ġcreation Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġimport Course ( credentials : ĠCredentials , Ġcourse Name : ĠString , Ġdescription : ĠString ?): ĠCourse Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / import " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDESCRIPTION Ġto Ġdescription ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Course . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Course Ġimporting Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Course Statistics ( credentials : ĠCredentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Name : ĠString ĊĠĠĠ Ġ): ĠCourse Statistics Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ statistics " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( OWNER Ġto Ġusername , ĠCO URSE Ġto Ġcourse Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Course Statistics . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Course Ġstatistics Ġretrieving Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart Course ( credentials : ĠCredentials , Ġcourse Name : ĠString ): ĠCourse Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / activate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Course . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Course Ġstarting Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Course Setting ( credentials : ĠCredentials , Ġid : ĠLong , Ġsettings : ĠCourse Settings ): ĠCourse Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course /$ id / settings " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġjson . stringify ( Course Settings . serializer (), Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Course . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Course Ġsettings Ġupdate Ġhas Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Course ( credentials : ĠCredentials , Ġcourse Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġ 2 3 . 0 3 . 1 9 : ĠDelete Ġcourse Ġbut Ġnot Ġthe Ġrepository . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġanaly se Pl ag iar ism ( credentials : ĠCredentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠString ĊĠĠĠ Ġ): ĠPl ag iar ism Report Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ pl ag iar ism / analy se " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĠTASK _ BRANCH Ġto Ġtask ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Pl ag iar ism Report . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Pl ag iar ism Ġanalysis Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsync Course ( credentials : ĠCredentials , Ġcourse Name : ĠString ): ĠCourse Statistics Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / sync " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Course Statistics . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Course Ġsynchronization Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Rules ( credentials : ĠCredentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeadline : ĠString ? ĊĠĠĠ Ġ): ĠTask Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ task / update / rules " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĠTASK _ BRANCH Ġto Ġtask , ĠDE AD LINE Ġto Ġdeadline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Task . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Task Ġrules Ġupdating Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Scores ( credentials : ĠCredentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores : ĠMap < String , ĠInt > ĊĠĠĠ Ġ): ĠList < Solution > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ task / update / scores " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĠTASK _ BRANCH Ġto Ġtask ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġjson . stringify (( String . serializer () Ġto ĠInt . serializer ()). map , Ġscores ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Solution . serializer (). list , Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Task Ġscores Ġupdating Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadd Cod acy Token ( credentials : ĠCredentials , Ġcod acy Token : ĠString ): ĠUnit Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ cod acy / token " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( TOKEN Ġto Ġcod acy Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Cod acy Ġtoken Ġaddition Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġactivate Cod acy ( credentials : ĠCredentials , Ġcourse Name : ĠString ): ĠUnit Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / activate / cod acy " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Activ ating Ġcod acy Ġfor Ġcourse Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġactivate Tr avis ( credentials : ĠCredentials , Ġcourse Name : ĠString ): ĠUnit Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / activate / travis " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Activ ating Ġtravis Ġfor Ġcourse Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġactivate Git pl ag ( credentials : ĠCredentials , Ġcourse Name : ĠString ): ĠUnit Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ course / activate / git pl ag " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Activ ating Ġgit pl ag Ġfor Ġcourse Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdownload Statistics ( credentials : ĠCredentials , Ġcourse Name : ĠString , Ġformat : ĠString ): Ġdynamic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget < Any > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ statistics / download " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĠFORMAT Ġto Ġformat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġresponse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Course Ġstatistics Ġdownloading Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. as Dynamic () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Github Auth Data ( credentials : ĠCredentials ): ĠGithub Auth Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ github / auth " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Github Auth Data . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Github Ġauth Ġdata Ġretrieving Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Solution Appro vals ( credentials : ĠCredentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappro vals : ĠMap < String , ĠSolution Review > ĊĠĠĠ Ġ): ĠList < Solution > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ task / update / appro vals " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĠTASK _ BRANCH Ġto Ġtask ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġjson . stringify (( String . serializer () Ġto ĠSolution Review . serializer ()). map , Ġappro vals ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( Solution . serializer (). list , Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Task Ġappro vals Ġupdating Ġfailed ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Pl ag iar ism Graph AccessToken ( credentials : ĠCredentials , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠString ĊĠĠĠ Ġ): ĠString Ġ= Ġpost Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Method Ġ= Ġ"/ pl ag iar ism / graph / token " ĊĠĠĠĠĠĠĠ Ġparams Ġ= Ġmap Of ( CO URSE _ NAME Ġto Ġcourse Name , ĠTASK _ BRANCH Ġto Ġtask ) ĊĠĠĠĠĠĠĠ Ġcreds Ġ= Ġcredentials ĊĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġresponse Ġ-> Ġjson . parse ( String . serializer (), Ġresponse ) Ġ} ĊĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġ" Pl ag iar ism Ġgraph Ġaccess Ġtoken Ġgeneration Ġretrieving Ġfailed ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġget ( no inline Ġblock : ĠHttpRequest < T >. () Ġ-> ĠUnit ): ĠT Ġ= Ġhttp (" GET ", Ġblock ) ĊĊĠĠĠ Ġprivate Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġpost ( no inline Ġblock : ĠHttpRequest < T >. () Ġ-> ĠUnit ): ĠT Ġ= Ġhttp (" POST ", Ġblock ) ĊĊĠĠĠ Ġprivate Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġput ( no inline Ġblock : ĠHttpRequest < T >. () Ġ-> ĠUnit ): ĠT Ġ= Ġhttp (" PUT ", Ġblock ) ĊĊĠĠĠ Ġprivate Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġhttp ( method : ĠString , Ġno inline Ġblock : ĠHttpRequest < T >. () Ġ-> ĠUnit ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwrapped Block : ĠHttpRequest < T >. () Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġif Ġ( T :: class Ġ== ĠUnit :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĠUnit Ġas ĠT Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped Block Ġ= Ġblock ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHttpRequest < T >(). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= ĠbaseUrl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Method Ġ= Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped Block () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFl ax o HttpException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFl ax o HttpException ( message Ġ= Ġe . message , Ġcause Ġ= Ġe , Ġuser Message Ġ= Ġe . user Message ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFl ax o HttpException ( cause Ġ= Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ