package Ġcom . android ma est ro . users . data . repository Ċ Ċ import Ġcom . android ma est ro . users . data . model . Users Ċ import Ġcom . android ma est ro . users . data . model . Users Dao Ċ import Ġcom . android ma est ro . users . data . model . to Entity Ċ import Ġcom . android ma est ro . users . domain . entity . User Entity Ċ import Ġorg . jetbrains . ex posed . sql . or Ċ import Ġorg . jetbrains . ex posed . sql . transactions . experimental . new Sus pended Transaction Ċ Ċ class ĠUser Repository Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġinsert ( user Entity Ġ: ĠUser Entity ) Ġ: ĠUser Entity Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting User Ġ= ĠUsers Dao . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Users . userName Ġeq Ġuser Entity . userName ) Ġor Ġ( Users . email Ġeq Ġuser Entity . email ) ĊĠĠĠĠĠĠĠ Ġ}. first OrNull () ĊĠĠĠĠĠĠĠ Ġif ( existing User Ġ!= Ġnull ) Ġthrow ĠUser Exists (" User Ġalready Ġexists ") ĊĠĠĠĠĠĠĠ ĠUsers Dao . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= Ġuser Entity . userName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġuser Entity . email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġuser Entity . password ĊĠĠĠĠĠĠĠ Ġ}. to Entity () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetAll () Ġ: ĠList < User Entity > Ġ= Ġnew Sus pended Transaction Ġ{ ĊĠĠĠĠĠĠĠ ĠUsers Dao . all (). map ( Users Dao :: to Entity ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUser Exists ( override Ġval Ġmessage : ĠString ? Ġ= Ġnull ) Ġ: ĠRuntimeException ( message )