package Ġtz . co . as oft Ċ Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . serialization . K Serializer Ċ Ċ open Ġclass ĠFire store Dao < T Ġ: ĠEntity >( ĊĠĠĠ Ġoverride Ġval Ġfire store : ĠFirebase Fire store , ĊĠĠĠ Ġoverride Ġval Ġcollection Name : ĠString , ĊĠĠĠ Ġoverride Ġval Ġserializer : ĠK Serializer < T > Ċ ) Ġ: ĠIF ire store Dao < T > Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate ( list : ĠCollection < T >): ĠList < T > Ġ= Ġbatch . run Ġ{ ĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġif Ġ( it . uid . isNotBlank ()) Ġcollection . doc ( it . uid ) Ġelse Ġcollection . doc () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( doc , Ġit . apply Ġ{ Ġuid Ġ= Ġdoc . id Ġ}, Ġserializer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit () ĊĠĠĠĠĠĠĠ Ġlist . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate ( t : ĠT ): ĠT Ġ= Ġcreate ( listOf ( t )). first () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġedit ( list : ĠCollection < T >): ĠList < T > Ġ= Ġbatch . run Ġ{ ĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġput ( collection . doc ( it . uid ), Ġit , Ġserializer ) Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit () ĊĠĠĠĠĠĠĠ Ġlist . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġedit ( t : ĠT ): ĠT Ġ= Ġedit ( listOf ( t )). first () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete ( list : ĠCollection < T >): ĠList < T > Ġ= Ġedit ( list . map Ġ{ ĊĠĠĠĠĠĠĠ Ġit . deleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġit ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete ( t : ĠT ): ĠT Ġ= Ġdelete ( listOf ( t )). first () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġw ipe ( list : ĠCollection < T >): ĠList < T > Ġ= Ġbatch . run Ġ{ ĊĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġdelete ( doc Ref ( it . uid )) Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit () ĊĠĠĠĠĠĠĠ Ġreturn Ġlist . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġw ipe ( t : ĠT ): ĠT Ġ= Ġw ipe ( listOf ( t )). first () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( ids : ĠCollection < Any >): ĠList < T > Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġids . toSet (). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . toString (). isNotBlank () ĊĠĠĠĠĠĠĠ Ġ}. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ Ġdoc Ref ( it . toString ()). fetch (). toObject ( serializer ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . await () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( id : ĠString ): ĠT ? Ġ= Ġload ( listOf ( id )). first OrNull () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġall () Ġ= Ġcollection . where (" deleted " Ġequals Ġfalse ). fetch (). to Objects ( serializer ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġall Deleted () Ġ= Ġcollection . where (" deleted " Ġequals Ġtrue ). fetch (). to Objects ( serializer ) ĊĊĠĠĠ Ġoverride Ġfun Ġpage Loader ( predicate : Ġ( T ) Ġ-> ĠBoolean ): ĠPage Loader < *, ĠT > Ġ= ĠFirebase Page Loader ( serializer , Ġcollection , Ġpredicate ) Ċ }