@@ -18,16 +18,28 @@ open class RealmRepository(private val databaseService: DatabaseService) {
1818 protected suspend fun <T : RealmObject > queryList (
1919 clazz : Class <T >,
2020 builder : RealmQuery <T >.() -> Unit = {},
21+ ): List <T > = queryList(clazz, false , builder)
22+
23+ protected suspend fun <T : RealmObject > queryList (
24+ clazz : Class <T >,
25+ ensureLatest : Boolean ,
26+ builder : RealmQuery <T >.() -> Unit = {},
2127 ): List <T > =
22- databaseService.withRealmAsync { realm ->
28+ withRealm(ensureLatest) { realm ->
2329 realm.queryList(clazz, builder)
2430 }
2531
2632 protected suspend fun <T : RealmObject > count (
2733 clazz : Class <T >,
2834 builder : RealmQuery <T >.() -> Unit = {},
35+ ): Long = count(clazz, false , builder)
36+
37+ protected suspend fun <T : RealmObject > count (
38+ clazz : Class <T >,
39+ ensureLatest : Boolean ,
40+ builder : RealmQuery <T >.() -> Unit = {},
2941 ): Long =
30- databaseService.withRealmAsync { realm ->
42+ withRealm(ensureLatest) { realm ->
3143 realm.where(clazz).apply (builder).count()
3244 }
3345
@@ -54,8 +66,15 @@ open class RealmRepository(private val databaseService: DatabaseService) {
5466 clazz : Class <T >,
5567 fieldName : String ,
5668 value : V ,
69+ ): T ? = findByField(clazz, fieldName, value, false )
70+
71+ protected suspend fun <T : RealmObject , V : Any > findByField (
72+ clazz : Class <T >,
73+ fieldName : String ,
74+ value : V ,
75+ ensureLatest : Boolean ,
5776 ): T ? =
58- databaseService.withRealmAsync { realm ->
77+ withRealm(ensureLatest) { realm ->
5978 realm.findCopyByField(clazz, fieldName, value)
6079 }
6180
@@ -90,8 +109,20 @@ open class RealmRepository(private val databaseService: DatabaseService) {
90109 }
91110 }
92111
112+ protected suspend fun <T > withRealm (
113+ ensureLatest : Boolean = false,
114+ operation : (Realm ) -> T ,
115+ ): T {
116+ return databaseService.withRealmAsync { realm ->
117+ if (ensureLatest) {
118+ realm.refresh()
119+ }
120+ operation(realm)
121+ }
122+ }
123+
93124 protected suspend fun <T > withRealmAsync (operation : (Realm ) -> T ): T {
94- return databaseService.withRealmAsync( operation)
125+ return withRealm( false , operation)
95126 }
96127
97128 protected fun <T > withRealmFlow (
0 commit comments