package Ġio . github . hor ac io come 1 . le ilo a . data . product Ċ Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . Flow Ċ Ċ class ĠProducts Repository Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠProducts Service Ġ= ĠProducts Service () Ċ ) Ġ: ĠProducts Service Interface Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠProducts Repository ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance () Ġ= Ġinstance Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ?: ĠProducts Repository (). also Ġ{ Ġinstance Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis ProductId Real Async ( ĊĠĠĠĠĠĠĠ Ġcompany Domain : ĠString , ĊĠĠĠĠĠĠĠ Ġproduct ID : ĠString ĊĠĠĠ Ġ): ĠDeferred < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġservice . is ProductId Real Async ( company Domain , Ġproduct ID ) ĊĊĠĠĠ Ġoverride Ġfun Ġis ProductId Available Async ( ĊĠĠĠĠĠĠĠ Ġcompany Domain : ĠString , ĊĠĠĠĠĠĠĠ Ġproduct ID : ĠString ĊĠĠĠ Ġ): ĠDeferred < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġservice . is ProductId Available Async ( company Domain , Ġproduct ID ) ĊĊĠĠĠ Ġoverride Ġfun Ġregister Product Async ( ĊĠĠĠĠĠĠĠ Ġcompany Domain : ĠString , ĊĠĠĠĠĠĠĠ Ġproduct : ĠProduct ĊĠĠĠ Ġ): ĠDeferred < String > Ġ= ĊĠĠĠĠĠĠĠ Ġservice . register Product Async ( company Domain , Ġproduct ) ĊĊĠĠĠ Ġoverride Ġfun Ġset Active Status Async ( ĊĠĠĠĠĠĠĠ Ġcompany Domain : ĠString , ĊĠĠĠĠĠĠĠ Ġproduct ID : ĠString , ĊĠĠĠĠĠĠĠ ĠisActive : ĠBoolean ĊĠĠĠ Ġ): ĠDeferred < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġservice . setActive Status Async ( company Domain , Ġproduct ID , ĠisActive ) ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġoverride Ġfun Ġwatch Product ( ĊĠĠĠĠĠĠĠ Ġcompany Domain : ĠString , ĊĠĠĠĠĠĠĠ Ġproduct ID : ĠString ĊĠĠĠ Ġ): ĠFlow < Product > Ġ= ĊĠĠĠĠĠĠĠ Ġservice . watch Product ( company Domain , Ġproduct ID ) Ċ }