package Ġcom . m ity ush ov n . mining quiz . database . attempt Topic Dao Ċ Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġcom . m ity ush ov n . mining quiz . database . App SQLite Contract Ċ import Ġcom . m ity ush ov n . mining quiz . models . domain . Attempt Topic Ċ import Ġcom . m ity ush ov n . mining quiz . utils . toInt For DB Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* Ġ@ author ĠNik ita ĠM ity ush ov Ġ 8 . 0 4 . 2 2 Ċ Ġ* Ġ@ since Ġ 1 . 0 Ċ Ġ* ĠImplementation Ġof ĠAttempt Topic Dao API Ġinterface . Ċ Ġ* Ġ@ see ĠAttempt Topic Ċ Ġ*/ Ċ class ĠAttempt Topic Dao Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġdb : ĠSQLite Database Ċ ) Ġ: ĠAttempt Topic Dao API Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠAttempt Topic Dao API . insert Attempt Topic ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert Attempt Topic ( attempt Topic : ĠAttempt Topic ): ĠFlow < Boolean > Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT ĠINTO Ġattempt _ topic ( topic _ id , Ġpassed _ at , Ġsuccess ) ĠVALUES Ġ(${ attempt Topic . topic Id }, Ġ${ attempt Topic . passed At . time }, Ġ${ attempt Topic . success . toInt For DB () })" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠAttempt Topic Dao API . delete All Topic Attempts ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete All Topic Attempts (): ĠFlow < Boolean > Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" delete All Ex ams ") ĊĠĠĠĠĠĠĠ ĠTim ber . d ( Thread . currentThread (). name ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec SQL ( App SQLite Contract . Attempt Topic Table . DELETE _ ALL _ TOPIC _ AT TEMP TS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠAttempt Topic Dao API . getNumberOf Topic Sol ving Attempts ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget NumberOf Topic Sol ving Attempts (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 ) Ġdb Ġquery ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdb . raw Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp SQLite Contract . Attempt Topic Table . GET _ NUMBER _ OF _ ALL _ TOP ICS _ SOL V ING _ AT TEMP TS _ QUERY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 ) Ġhandle Ġresponse ( cursor ) ĊĠĠĠĠĠĠĠ Ġreturn Ġhandle Cursor Int ( cursor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠAttempt Topic Dao API . getNumberOf Successful Topic Sol ving Attempts ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget NumberOf Successful Topic Sol ving Attempts (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 ) Ġdb Ġquery ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdb . raw Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp SQLite Contract . Attempt Topic Table . GET _ NUMBER _ OF _ SUCCESS _ TOPIC _ SOL V ING _ AT TEMP TS _ QUERY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 ) Ġhandle Ġresponse ( cursor ) ĊĠĠĠĠĠĠĠ Ġreturn Ġhandle Cursor Int ( cursor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠAttempt Topic Dao API . getNumberOf Failed Topic Sol ving Attempts ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget NumberOf Failed Topic Sol ving Attempts (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 ) Ġdb Ġquery ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdb . raw Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp SQLite Contract . Attempt Topic Table . GET _ NUMBER _ OF _ FAILED _ TOPIC _ SOL V ING _ AT TEMP TS _ QUERY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 ) Ġhandle Ġresponse ( cursor ) ĊĠĠĠĠĠĠĠ Ġreturn Ġhandle Cursor Int ( cursor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Ċ Ġ* Ġprivate Ġmethods Ċ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġexecutes Ġcommon Ġroutine : Ġreads Ġdata Ġfrom ĠCursor Ġinstance , Ġwrite Ġto ĠList Ġwith ĊĠĠĠĠ Ġ* ĠQuestion Ġinit , Ġand Ġclose Ġthe ĠCursor Ġresource . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġinline Ġfun Ġhandle Cursor Int ( ĊĠĠĠĠĠĠĠ Ġcursor : ĠCursor ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġcursor . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( cursor . count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getInt ( cursor . getColumnIndex OrThrow ( App SQLite Contract . Common . NUMBER _ OF _ AT TEMP TS )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }