package Ġit . uni par then ope . par then op ed dit . api Ċ Ċ import Ġandroid . util . Log Ċ import Ġit . uni par then ope . par then op ed dit . model .* Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠMock Api Data Ġ{ ĊĠĠĠ Ġfun Ġlogin ( ĊĠĠĠĠĠĠĠ Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( user : ĠUser ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Post ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġpost Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( post : ĠPost ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Post ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( post List : ĠList < Post > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( Mock Database . instance . posts _ table , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpublish New Post ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġbody : ĠString , ĊĠĠĠĠĠĠĠ Ġboard Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( post : ĠPost ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Post With Comments ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġpost Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( post : ĠPost ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( post Ġin ĠMock Database . instance . posts _ table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( post . id Ġ== Ġpost Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( post , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , Ġ" no Ġpost Ġwith Ġid Ġ$ post Id ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Group Post ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġid _ group : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( post List : ĠList < Post > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Database . instance . posts _ table . filter Ġ{ Ġit . posted _ to _ board ?. id Ġ== Ġid _ group Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Group Info ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġid _ group : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( name : ĠString ?, Ġnum _ members : ĠInt ?, Ġcreated : ĠString ?, Ġmembers : ĠArrayList < Group Member > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġgroup Ġ: ĠGroup Ġ= ĠMock Database . instance . group _ table . filter Ġ{ Ġit . id Ġ== Ġid _ group Ġ}. single () ĊĠĠĠĠĠĠĠ Ġif ( group Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . members _ num , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . created _ on , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . members , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , null , null , null ," Grup po Ġnon Ġtro v ato ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Comment ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcomment Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( comment : ĠComment ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Comment ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( comment List : ĠList < Comment > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Database . instance . comments _ table . filter Ġ{ Ġit . author ?. id Ġ== ĠuserId Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Comment With Comments ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcomment Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( comment : ĠComment ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpublish Comment To Post ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġpost Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġbody : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( comment : ĠComment ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpublish Comment To Comment ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcomment Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġbody : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( comment : ĠComment ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Review ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( review List : ĠList < Review > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( Mock Database . instance . reviews _ table , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Course Info ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcourse Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( course Rating : ĠFloat , Ġcourse Difficulty : ĠFloat , Ġnum Reviews : ĠInt , Ġcourse Name : ĠString ?, Ġis Follow ed : ĠBoolean , Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Follow ed : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( course Ġin ĠMock Database . instance . course _ table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( course . id Ġ== Ġcourse Id ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( ĠMock Database . instance . users _ table . filter { Ġit . id Ġ== Ġ" user 1 "} . single (). follow ed _ courses ?. filter Ġ{ Ġit . id Ġ== Ġcourse Id Ġ} Ġ!= Ġnull Ġ){ Ġis Follow ed = true Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( course . average _ lik ing _ score !!. toFloat (), Ġcourse . average _ difficulty _ score !!. toFloat (), Ġcourse . reviews _ count !! , Ġcourse . name , Ġis Follow ed , null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( 0 F , Ġ 0 F , Ġ 0 ," no Ġcourse Ġwith Ġid Ġ$ course Id ", Ġfalse ," no Ġcourse Ġwith Ġid Ġ$ course Id ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Course Reviews ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġcourse Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( review List : ĠList < Review > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor ( course Ġin ĠMock Database . instance . course _ table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( course . id Ġ== Ġcourse Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( course . reviews , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , Ġ" course Ġnot Ġfound ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Chat ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ ĠuserId : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( chat : ĠArrayList < Users Chat > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġuser _ ch ats Ġ: ĠArrayList < Users Chat >? Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor ( chat Ġin ĠMock Database . instance . ch ats _ table ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( chat . of _ user _ id Ġ== Ġ" user 1 "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser _ ch ats ?. add ( chat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( user _ ch ats ?. isEmpty () !! ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , Ġ" L ' utente Ġnon Ġha Ġchat ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( user _ ch ats , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Group Chat ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ ĠuserId : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( chat : ĠArrayList < Group Chat > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġgroup _ ch ats Ġ: ĠArrayList < Group Chat >? Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= ĠMock Database . instance . users _ table . filter Ġ{ Ġit . id ==" user 1 " Ġ}. single () ĊĠĠĠĠĠĠĠ Ġfor ( chat Ġin ĠMock Database . instance . group _ ch ats _ table ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user . groups !!. any Ġ{ Ġit . id Ġ== Ġchat . of _ group _ id Ġ} ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup _ ch ats ?. add ( chat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( group _ ch ats ?. isEmpty () !! ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , Ġ" L ' utente Ġnon Ġha Ġchat Ġdi Ġgrup po ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( group _ ch ats , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Chat Messages ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġuser 1 Id : ĠString , ĊĠĠĠĠĠĠĠ Ġuser 2 Id : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( user Chat : ĠUsers Chat , Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġchat User 1 : ĠUsers Chat ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġother User Chat Ġ: ĠUsers Chat ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġusers Chat Ġin ĠMock Database . instance . ch ats _ table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( users Chat . of _ user _ id Ġ== Ġuser 1 Id Ġ&& Ġusers Chat . other _ user _ chat !!. of _ user _ id Ġ== Ġuser 2 Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat User 1 Ġ= Ġusers Chat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother User Chat Ġ= Ġusers Chat . other _ user _ chat !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( chat User 1 , Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Group Chat Messages ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( group Chat Log : ĠGroup Chat ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġgroup Chat : ĠGroup Chat ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġgroup _ chat Ġin ĠMock Database . instance . group _ ch ats _ table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( group _ chat . id Ġ== Ġgroup _ id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Chat Ġ= Ġgroup _ chat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlog Mess aggi Ġ: ĠArrayList < Message Log > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġfor ( Ġmessage Ġin ĠMock Database . instance . group _ messages _ table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġmessage . sender _ id Ġ== Ġ" user 1 " Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Mess aggi . add ( ĠMessage Log ( Ġmessage , Ġtrue , Ġtrue ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Mess aggi . add ( ĠMessage Log ( Ġmessage , Ġtrue , Ġtrue ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar ĠGroup Chat Log Ġ= ĠGroup Chat Log ( Ġlog Mess aggi , Ġgroup Chat . of _ group !! Ġ) ĊĠĠĠĠĠĠĠ Ġ// completion . invoke ( it . uni par then ope . par then op ed dit . model . Group Chat Log , Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnew Message ( ĊĠĠĠĠĠĠĠ Ġsender : ĠString , ĊĠĠĠĠĠĠĠ Ġreceiver : ĠString , ĊĠĠĠĠĠĠĠ Ġbody : ĠString , ĊĠĠĠĠĠĠĠ Ġtimestamp : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( message Log : ĠMessage , Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġsender User : ĠUser ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceiver User : ĠUser ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġuser Ġin ĠMock Database . instance . users _ table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user . id Ġ== Ġsender ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender User Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( user . id Ġ== Ġreceiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver User Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġsender User Chat : ĠUsers Chat ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceiver User Chat Ġ: ĠUsers Chat ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġusers Chat Ġin ĠMock Database . instance . ch ats _ table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( users Chat . of _ user _ id Ġ== Ġsender Ġ&& Ġusers Chat . other _ user _ chat !!. of _ user _ id Ġ== Ġreceiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender User Chat Ġ= Ġusers Chat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver User Chat Ġ= Ġusers Chat . other _ user _ chat !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Message Ġ= ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠMock Database . instance . messages _ table . size Ġ+ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġbody , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender _ id Ġ= Ġsender , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender _ user Ġ= Ġsender User , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver _ chat Ġ= Ġreceiver User Chat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver _ id Ġ= Ġreceiver User Chat . id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠMock Database . instance . messages _ table . add ( new Message ) ĊĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( Message Log ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġnew Message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinv i ato Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlet to Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ), Ġnull ) ĊĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnew Group Message ( ĊĠĠĠĠĠĠĠ Ġsender : ĠString , ĊĠĠĠĠĠĠĠ Ġreceiver : ĠString , ĊĠĠĠĠĠĠĠ Ġbody : ĠString , ĊĠĠĠĠĠĠĠ Ġtimestamp : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( message Log : ĠMessage , Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ Ċ /* ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġsender User : ĠUser ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceiver Group : ĠGroup ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġuser Ġin ĠMock Database . instance . users _ table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user . id Ġ== Ġsender ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender User Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( user . id Ġ== Ġreceiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// receiver User Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġsender User Chat : ĠGroup Chat ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġreceiver User Chat Ġ: ĠGroup Chat ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġusers Chat Ġin ĠMock Database . instance . ch ats _ table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( users Chat . of _ user _ id Ġ== Ġsender Ġ&& Ġusers Chat . other _ user _ chat !!. of _ user _ id Ġ== Ġreceiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// sender User Chat Ġ= Ġusers Chat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// receiver User Chat Ġ= Ġusers Chat . other _ user _ chat !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Message Ġ= ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠMock Database . instance . messages _ table . size Ġ+ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġbody , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġtimestamp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender _ id Ġ= Ġsender , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender _ user Ġ= Ġsender User , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver _ chat Ġ= Ġreceiver User Chat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver _ id Ġ= Ġreceiver User Chat . id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠMock Database . instance . messages _ table . add ( new Message ) ĊĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( Message Log ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġnew Message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinv i ato Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlet to Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ), Ġnull ) ĊĊ Ġ*/ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Groups ( ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( group Membership s : ĠArrayList < Group Member >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Group ( ĊĠĠĠĠĠĠĠ Ġgroup _ name : ĠString , ĊĠĠĠĠĠĠĠ Ġinv ited Users Ids : ĠArrayList < String >, ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( groupId : ĠInt , Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġgroup _ id : ĠInt Ġ= ĠMock Database . instance . board _ table . max By { Ġit . id Ġ} !!. id Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ ĠLog . d (" DEBUG ", Ġ" new Ġid Ġis Ġ${ group _ id }") ĊĠĠĠĠĠĠĠ Ġvar Ġgroup _ users : ĠArrayList < Group Member > Ġ= ĠArrayList < Group Member >() ĊĊĠĠĠĠĠĠĠ Ġval Ġc : ĠCalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Date : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . get ( Calendar . DATE ). toString () Ġ+ Ġ"/" Ġ+ Ġc . get ( Calendar . MONTH ). toString () Ġ+ Ġ"/" Ġ+ Ġc . get ( Calendar . YEAR ). toString () ĊĊĠĠĠĠĠĠĠ Ġ/* REQ UIRES ĠO RE O ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= Ġ ĠDateTime Formatter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. of Pattern (" dd - MM - yyyy ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Zone ( Zone Offset . UTC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. format ( Instant . now ()) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġvar Ġnew Group : ĠGroup Ġ= ĠGroup ( group _ id , Ġgroup _ name , ĠArrayList < Post >(), Ġ 0 , Ġcurrent Date , ĠArrayList < Group Member >(), Ġnull , ĠArrayList < Group Invite >(), Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġfor ( username Ġin Ġinv ited Users Ids ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmember : ĠUser Ġ= ĠMock Database . instance . users _ table . filter Ġ{ Ġit . id Ġ== Ġusername Ġ}. single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmember . groups ?. add ( new Group ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( username Ġ== Ġ" user 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup _ users . add ( Group Member ( member . id , Ġgroup _ id , Ġcurrent Date , Ġnull , Ġtrue , Ġmember , Ġnew Group )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup _ users . add ( Group Member ( member . id , Ġgroup _ id , Ġcurrent Date , Ġnull , Ġfalse , Ġmember , Ġnew Group )) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnew Group . members Ġ= Ġgroup _ users ĊĠĠĠĠĠĠĠ Ġnew Group . members _ num Ġ= Ġnew Group . members !!. size ĊĠĠĠĠĠĠĠ Ġvar Ġchar Ġ= ĠGroup Chat ( group _ id , ĠArrayList < Message >(), Ġnull , Ġgroup _ id , Ġnew Group ) ĊĠĠĠĠĠĠĠ Ġnew Group . chat Ġ= Ġchar ĊĊĠĠĠĠĠĠĠ ĠMock Database . instance . group _ table . add ( new Group ) ĊĠĠĠĠĠĠĠ ĠMock Database . instance . board _ table . add ( new Group ) ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( group _ id , null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Inv ites To Group ( ĊĠĠĠĠĠĠĠ Ġid _ user : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( user Group Inv ites : ĠArrayList < Group Invite >, Ġerror : ĠString ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMock Database . instance . users _ table . filter Ġ{ Ġit . id Ġ== Ġid _ user Ġ}. single (). group _ inv ites ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Database . instance . users _ table . filter Ġ{ Ġit . id Ġ== Ġid _ user Ġ}. single (). group _ inv ites !! , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Group ( ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( group : ĠGroup ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinvite Users To Group ( ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ Ġinv ited Users Ids : ĠList < String >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( inv ites : ĠArrayList < Group Invite >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Group Inv ites ( ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( inv ites : ĠArrayList < Group Invite >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġanswer Group Invite ( ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ Ġaccept : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġon Decl ine : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Accept : Ġ( membership : ĠGroup Member ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġleave Group ( ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon New Owner Prom oted : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Group Dis b anded : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Group Members ( ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( new Owners : ĠArrayList < Group Member >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Board ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( boards : ĠArrayList < Board > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcourses Ġ: ĠArrayList < Course >? Ġ= ĠMock Database . instance . users _ table . filter { it . id Ġ== ĠuserId }. single (). follow ed _ courses ĊĠĠĠĠĠĠĠ Ġvar Ġgroups Ġ: ĠArrayList < Group >? Ġ= ĠMock Database . instance . users _ table . filter { it . id Ġ== ĠuserId }. single (). groups ĊĠĠĠĠĠĠĠ Ġvar Ġboards Ġ: ĠArrayList < Board >? Ġ= ĠArrayList < Board >() ĊĠĠĠĠĠĠĠ Ġif Ġ( courses Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboards ?. addAll ( courses ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( groups Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboards ?. addAll ( groups ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( boards ?. isNotEmpty () !! ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( boards , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , Ġ" L ' utente Ġnon Ġseg ue Ġcors i Ġo Ġgrup pi ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmake Members Owners ( ĊĠĠĠĠĠĠĠ Ġgroup _ id : ĠInt , ĊĠĠĠĠĠĠĠ Ġinv ited Users Ids : ĠList < String >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ( new _ owners : ĠArrayList < Group Member >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġon Fail : Ġ( error : ĠString ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Course ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( course : ĠArrayList < Course > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcourses Ġ: ĠArrayList < Course >? Ġ= ĠMock Database . instance . users _ table . filter { it . id Ġ== ĠuserId }. single (). follow ed _ courses ĊĠĠĠĠĠĠĠ Ġif Ġ( courses Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( courses , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , Ġ" L ' utente Ġnon Ġseg ue Ġcors i ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser Group ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( course : ĠArrayList < Group > ?, Ġerror : ĠString ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġgroup Ġ: ĠArrayList < Group >? Ġ= ĠMock Database . instance . users _ table . filter { it . id Ġ== ĠuserId }. single (). groups ĊĠĠĠĠĠĠĠ Ġif Ġ( group Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( group , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( null , Ġ" L ' utente Ġnon ĠÃ¨ Ġis crit to Ġa Ġgrup pi ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis User In Group ( ĊĠĠĠĠĠĠĠ Ġuser _ id : ĠString , ĊĠĠĠĠĠĠĠ Ġgroup : ĠGroup , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ( result : ĠBoolean ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor ( group user Ġin Ġgroup . members !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user _ id Ġ== Ġgroup user . user _ id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion . invoke ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcompletion . invoke ( false ) ĊĠĠĠ Ġ} Ċ Ċ }