package Ġio . not able . note _ inter actors Ċ Ċ import Ġio . not able . constants . Success Handling Ċ import Ġio . not able . core . domain . Data State Ċ import Ġio . not able . core . domain . ProgressBar State Ċ import Ġio . not able . core . domain . UI Component Ċ import Ġio . not able . note _ datasource . cache . Note Cache Ċ import Ġio . not able . note _ datasource . network . Note Service Ċ import Ġio . not able . note _ datasource . network . model . Note Input Ċ import Ġio . not able . note _ domain . Note Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġjava . sql . Timestamp Ċ Ċ class ĠUpdate Note ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠNote Service , ĊĠĠĠ Ġprivate Ġval Ġcache : ĠNote Cache , Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġexecute ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString , ĊĠĠĠĠĠĠĠ Ġis Network Available : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġbody : ĠString , ĊĠĠĠ Ġ): ĠFlow < Data State < Note >> Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Data State . Loading ( progress Bar State Ġ= ĠProgress Bar State . Loading )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠUpdate Ġthe Ġnote Ġlocally ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠTimestamp ( System . currentTimeMillis ()). toString (). replace (" Ġ", Ġ" T ") Ġ+ Ġ" 0 0 0 + 0 2 : 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache . update Note ( id Ġ= Ġid , Ġtitle Ġ= Ġtitle , Ġbody Ġ= Ġbody , ĠupdatedAt Ġ= Ġdate ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĠAttempt Ġto Ġupdate Ġthe Ġnote Ġon Ġthe Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Network Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote : ĠNote ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . update Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ= ĠNote Input ( title , Ġbody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠNote Service . get ErrorMessage ( e ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠServer ĠErrors Ġcould Ġbe Ġlogged , Ġbut Ġthe Ġnote Ġwill Ġbe Ġdeleted Ġon Ġnext Ġsync , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġno Ġneed Ġto Ġinform Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData State . Response < Note >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Component Ġ= ĠUI Component . None ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( note Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . insert ( note ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġthe Ġupdated Ġnote ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Ġ= Ġcache . get Note ( id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Data State . Data ( note )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData State . Response < Note >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Component Ġ= ĠUI Component . Sn ackBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠSuccess Handling . UPDATE _ SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData State . Response < Note >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Component Ġ= ĠUI Component . Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġe . message Ġ?: Ġ" Unknown Ġerror " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Data State . Loading ( progress Bar State Ġ= ĠProgress Bar State . Idle )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }