Skip to content

Commit 939dfb8

Browse files
add Paged data source and repository
1 parent 23b5c2f commit 939dfb8

7 files changed

Lines changed: 179 additions & 94 deletions

File tree

libraries/core/src/main/java/com/smarttoolfactory/core/di/DataModule.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@ package com.smarttoolfactory.core.di
33
import com.smarttoolfactory.data.di.DatabaseModule
44
import com.smarttoolfactory.data.di.NetworkModule
55
import com.smarttoolfactory.data.mapper.PropertyDTOtoEntityListMapper
6+
import com.smarttoolfactory.data.repository.PagedPropertyRepository
7+
import com.smarttoolfactory.data.repository.PagedPropertyRepositoryImpl
68
import com.smarttoolfactory.data.repository.PropertyRepositoryCoroutines
79
import com.smarttoolfactory.data.repository.PropertyRepositoryImlRxJava3
810
import com.smarttoolfactory.data.repository.PropertyRepositoryImplCoroutines
911
import com.smarttoolfactory.data.repository.PropertyRepositoryRxJava3
1012
import com.smarttoolfactory.data.source.LocalDataSourceRxJava3Impl
13+
import com.smarttoolfactory.data.source.LocalPagedPropertyDataSource
14+
import com.smarttoolfactory.data.source.LocalPagedPropertySourceImpl
1115
import com.smarttoolfactory.data.source.LocalPropertyDataSourceCoroutines
1216
import com.smarttoolfactory.data.source.LocalPropertyDataSourceImpl
1317
import com.smarttoolfactory.data.source.LocalPropertyDataSourceRxJava3
@@ -43,6 +47,21 @@ interface DataModule {
4347
@Binds
4448
fun bindRepositoryCoroutines(repository: PropertyRepositoryImplCoroutines):
4549
PropertyRepositoryCoroutines
50+
51+
/*
52+
Coroutines + Pagination
53+
*/
54+
55+
@Singleton
56+
@Binds
57+
fun bindPagedLocalDataSource(localDataSource: LocalPagedPropertySourceImpl):
58+
LocalPagedPropertyDataSource
59+
60+
@Singleton
61+
@Binds
62+
fun bindPagedRepository(repository: PagedPropertyRepositoryImpl):
63+
PagedPropertyRepository
64+
4665
/*
4766
RxJava
4867
*/

libraries/data/src/main/java/com/smarttoolfactory/data/db/PropertyDatabase.kt

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -58,50 +58,50 @@ val MIGRATION_2_3: Migration = object : Migration(2, 3) {
5858

5959
database.execSQL(
6060
"CREATE TABLE IF NOT EXISTS `paged_property` (" +
61-
"`insert_order` INTEGER NOT NULL, " +
62-
"`id` INTEGER NOT NULL, " +
63-
"`update` INTEGER NOT NULL, " +
64-
"`category_id` INTEGER NOT NULL, " +
65-
"`title` TEXT NOT NULL, " +
66-
"`subject` TEXT NOT NULL, " +
67-
"`type` TEXT NOT NULL, " +
68-
"`type_id` INTEGER NOT NULL, " +
69-
"`thumbnail` TEXT, " +
70-
"`thumbnail_big` TEXT, " +
71-
"`image_count` INTEGER NOT NULL, " +
72-
"`price` TEXT NOT NULL, " +
73-
"`price_period` TEXT, " +
74-
"`price_period_raw` TEXT NOT NULL, " +
75-
"`price_label` TEXT, " +
76-
"`price_value` TEXT, " +
77-
"`price_value_raw` INTEGER NOT NULL, " +
78-
"`currency` TEXT NOT NULL, " +
79-
"`featured` INTEGER NOT NULL, " +
80-
"`location` TEXT NOT NULL, " +
81-
"`area` TEXT NOT NULL, " +
82-
"`poa` INTEGER NOT NULL, " +
83-
"`rera_permit` TEXT, " +
84-
"`bathrooms` TEXT NOT NULL, " +
85-
"`bedrooms` TEXT NOT NULL, " +
86-
"`date_insert` TEXT NOT NULL, " +
87-
"`date_update` TEXT NOT NULL, " +
88-
"`agent_name` TEXT NOT NULL, " +
89-
"`broker_name` TEXT NOT NULL, " +
90-
"`agent_license` TEXT, " +
91-
"`location_id` INTEGER NOT NULL, " +
92-
"`hide_location` INTEGER NOT NULL, " +
93-
"`broker` TEXT NOT NULL, " +
94-
"`amenities` TEXT NOT NULL, " +
95-
"`amenities_keys` TEXT NOT NULL, " +
96-
"`latitude` REAL NOT NULL, " +
97-
"`longitude` REAL NOT NULL, " +
98-
"`premium` INTEGER NOT NULL, " +
99-
"`livingrooms` TEXT NOT NULL, " +
100-
"`verified` INTEGER NOT NULL, " +
101-
"`gallery` TEXT, " +
102-
"`phone` TEXT NOT NULL, " +
103-
"`lead_email_receivers` TEXT NOT NULL, " +
104-
"`reference` TEXT NOT NULL, PRIMARY KEY(`insert_order`))"
61+
"`insert_order` INTEGER NOT NULL, " +
62+
"`id` INTEGER NOT NULL, " +
63+
"`update` INTEGER NOT NULL, " +
64+
"`category_id` INTEGER NOT NULL, " +
65+
"`title` TEXT NOT NULL, " +
66+
"`subject` TEXT NOT NULL, " +
67+
"`type` TEXT NOT NULL, " +
68+
"`type_id` INTEGER NOT NULL, " +
69+
"`thumbnail` TEXT, " +
70+
"`thumbnail_big` TEXT, " +
71+
"`image_count` INTEGER NOT NULL, " +
72+
"`price` TEXT NOT NULL, " +
73+
"`price_period` TEXT, " +
74+
"`price_period_raw` TEXT NOT NULL, " +
75+
"`price_label` TEXT, " +
76+
"`price_value` TEXT, " +
77+
"`price_value_raw` INTEGER NOT NULL, " +
78+
"`currency` TEXT NOT NULL, " +
79+
"`featured` INTEGER NOT NULL, " +
80+
"`location` TEXT NOT NULL, " +
81+
"`area` TEXT NOT NULL, " +
82+
"`poa` INTEGER NOT NULL, " +
83+
"`rera_permit` TEXT, " +
84+
"`bathrooms` TEXT NOT NULL, " +
85+
"`bedrooms` TEXT NOT NULL, " +
86+
"`date_insert` TEXT NOT NULL, " +
87+
"`date_update` TEXT NOT NULL, " +
88+
"`agent_name` TEXT NOT NULL, " +
89+
"`broker_name` TEXT NOT NULL, " +
90+
"`agent_license` TEXT, " +
91+
"`location_id` INTEGER NOT NULL, " +
92+
"`hide_location` INTEGER NOT NULL, " +
93+
"`broker` TEXT NOT NULL, " +
94+
"`amenities` TEXT NOT NULL, " +
95+
"`amenities_keys` TEXT NOT NULL, " +
96+
"`latitude` REAL NOT NULL, " +
97+
"`longitude` REAL NOT NULL, " +
98+
"`premium` INTEGER NOT NULL, " +
99+
"`livingrooms` TEXT NOT NULL, " +
100+
"`verified` INTEGER NOT NULL, " +
101+
"`gallery` TEXT, " +
102+
"`phone` TEXT NOT NULL, " +
103+
"`lead_email_receivers` TEXT NOT NULL, " +
104+
"`reference` TEXT NOT NULL, PRIMARY KEY(`insert_order`))"
105105
)
106106
}
107107
}

libraries/data/src/main/java/com/smarttoolfactory/data/di/DatabaseModule.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import android.app.Application
44
import androidx.room.Room
55
import com.smarttoolfactory.data.constant.DATABASE_NAME
66
import com.smarttoolfactory.data.db.MIGRATION_1_2
7+
import com.smarttoolfactory.data.db.MIGRATION_2_3
8+
import com.smarttoolfactory.data.db.PagedPropertyDao
79
import com.smarttoolfactory.data.db.PropertyDaoCoroutines
810
import com.smarttoolfactory.data.db.PropertyDaoRxJava3
911
import com.smarttoolfactory.data.db.PropertyDatabase
@@ -27,7 +29,7 @@ class DatabaseModule {
2729
PropertyDatabase::class.java,
2830
DATABASE_NAME
2931
)
30-
.addMigrations(MIGRATION_1_2)
32+
.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
3133
.build()
3234
}
3335

@@ -50,4 +52,9 @@ class DatabaseModule {
5052
@Provides
5153
fun provideSortOrderDaoRxJava3(appDatabase: PropertyDatabase): SortOrderDaoRxJava3 =
5254
appDatabase.propertySortDaoRxJava()
55+
56+
@Singleton
57+
@Provides
58+
fun providePagedPropertyDao(appDatabase: PropertyDatabase): PagedPropertyDao =
59+
appDatabase.pagedPropertyDao()
5360
}

libraries/data/src/main/java/com/smarttoolfactory/data/repository/Repository.kt

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.smarttoolfactory.data.repository
22

33
import com.smarttoolfactory.data.constant.ORDER_BY_NONE
4+
import com.smarttoolfactory.data.model.local.PagedPropertyEntity
45
import com.smarttoolfactory.data.model.local.PropertyEntity
56
import io.reactivex.rxjava3.core.Completable
67
import io.reactivex.rxjava3.core.Single
@@ -12,15 +13,8 @@ import io.reactivex.rxjava3.core.Single
1213
*/
1314
interface PropertyRepositoryCoroutines {
1415

15-
fun getCurrentPageNumber(): Int
16-
1716
suspend fun fetchEntitiesFromRemote(orderBy: String = ORDER_BY_NONE): List<PropertyEntity>
1817

19-
suspend fun fetchEntitiesFromRemoteByPage(
20-
page: Int,
21-
orderBy: String = ORDER_BY_NONE
22-
): List<PropertyEntity>
23-
2418
suspend fun getPropertyEntitiesFromLocal(): List<PropertyEntity>
2519

2620
suspend fun savePropertyEntities(propertyEntities: List<PropertyEntity>)
@@ -38,15 +32,8 @@ interface PropertyRepositoryCoroutines {
3832
*/
3933
interface PropertyRepositoryRxJava3 {
4034

41-
fun getCurrentPageNumber(): Int
42-
4335
fun fetchEntitiesFromRemote(orderBy: String = ORDER_BY_NONE): Single<List<PropertyEntity>>
4436

45-
fun fetchEntitiesFromRemoteByPage(
46-
page: Int,
47-
orderBy: String = ORDER_BY_NONE
48-
): Single<List<PropertyEntity>>
49-
5037
fun getPropertyEntitiesFromLocal(): Single<List<PropertyEntity>>
5138

5239
fun savePropertyEntities(propertyEntities: List<PropertyEntity>): Completable
@@ -56,3 +43,22 @@ interface PropertyRepositoryRxJava3 {
5643
fun saveSortOrderKey(orderBy: String): Completable
5744
fun getSortOrderKey(): Single<String>
5845
}
46+
47+
interface PagedPropertyRepository {
48+
49+
fun getCurrentPageNumber(): Int
50+
51+
suspend fun fetchEntitiesFromRemoteByPage(
52+
page: Int,
53+
orderBy: String = ORDER_BY_NONE
54+
): List<PagedPropertyEntity>
55+
56+
suspend fun getPropertyEntitiesFromLocal(): List<PagedPropertyEntity>
57+
58+
suspend fun savePropertyEntities(propertyEntities: List<PagedPropertyEntity>)
59+
60+
suspend fun deletePropertyEntities()
61+
62+
suspend fun saveSortOrderKey(orderBy: String)
63+
suspend fun getSortOrderKey(): String
64+
}

libraries/data/src/main/java/com/smarttoolfactory/data/repository/RepositoryImpl.kt

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.smarttoolfactory.data.repository
22

33
import com.smarttoolfactory.data.mapper.PropertyDTOtoEntityListMapper
4+
import com.smarttoolfactory.data.mapper.PropertyDTOtoPagedEntityListMapper
5+
import com.smarttoolfactory.data.model.local.PagedPropertyEntity
46
import com.smarttoolfactory.data.model.local.PropertyEntity
7+
import com.smarttoolfactory.data.source.LocalPagedPropertyDataSource
58
import com.smarttoolfactory.data.source.LocalPropertyDataSourceCoroutines
69
import com.smarttoolfactory.data.source.LocalPropertyDataSourceRxJava3
710
import com.smarttoolfactory.data.source.RemotePropertyDataSourceCoroutines
@@ -16,26 +19,11 @@ class PropertyRepositoryImplCoroutines @Inject constructor(
1619
private val mapper: PropertyDTOtoEntityListMapper
1720
) : PropertyRepositoryCoroutines {
1821

19-
private var currentPageNumber = 0
20-
21-
override fun getCurrentPageNumber(): Int {
22-
return currentPageNumber
23-
}
24-
2522
override suspend fun fetchEntitiesFromRemote(orderBy: String): List<PropertyEntity> {
2623
saveSortOrderKey(orderBy)
2724
return mapper.map(remoteDataSource.getPropertyDTOs(orderBy))
2825
}
2926

30-
override suspend fun fetchEntitiesFromRemoteByPage(
31-
page: Int,
32-
orderBy: String
33-
): List<PropertyEntity> {
34-
currentPageNumber = page
35-
saveSortOrderKey(orderBy)
36-
return mapper.map(remoteDataSource.getPropertyDTOsWithPagination(page, orderBy))
37-
}
38-
3927
override suspend fun getPropertyEntitiesFromLocal(): List<PropertyEntity> {
4028
return localDataSource.getPropertyEntities()
4129
}
@@ -63,12 +51,6 @@ class PropertyRepositoryImlRxJava3 @Inject constructor(
6351
private val mapper: PropertyDTOtoEntityListMapper
6452
) : PropertyRepositoryRxJava3 {
6553

66-
private var currentPageNumber = 0
67-
68-
override fun getCurrentPageNumber(): Int {
69-
return currentPageNumber
70-
}
71-
7254
override fun fetchEntitiesFromRemote(orderBy: String): Single<List<PropertyEntity>> {
7355

7456
return remoteDataSource.getPropertyDTOs(orderBy)
@@ -78,17 +60,6 @@ class PropertyRepositoryImlRxJava3 @Inject constructor(
7860
}
7961
}
8062

81-
override fun fetchEntitiesFromRemoteByPage(
82-
page: Int,
83-
orderBy: String
84-
): Single<List<PropertyEntity>> {
85-
return remoteDataSource.getPropertyDTOsWithPagination(page, orderBy).map {
86-
this.currentPageNumber = page
87-
saveSortOrderKey(orderBy)
88-
mapper.map(it)
89-
}
90-
}
91-
9263
override fun getPropertyEntitiesFromLocal(): Single<List<PropertyEntity>> {
9364
return localDataSource.getPropertyEntities()
9465
}
@@ -106,6 +77,48 @@ class PropertyRepositoryImlRxJava3 @Inject constructor(
10677
}
10778

10879
override fun getSortOrderKey(): Single<String> {
109-
return localDataSource.getOrderkey()
80+
return localDataSource.getOrderKey()
81+
}
82+
}
83+
84+
class PagedPropertyRepositoryImpl @Inject constructor(
85+
private val localDataSource: LocalPagedPropertyDataSource,
86+
private val remoteDataSource: RemotePropertyDataSourceCoroutines,
87+
private val mapper: PropertyDTOtoPagedEntityListMapper
88+
) : PagedPropertyRepository {
89+
90+
private var currentPageNumber = 0
91+
92+
override fun getCurrentPageNumber(): Int {
93+
return currentPageNumber
94+
}
95+
96+
override suspend fun fetchEntitiesFromRemoteByPage(
97+
page: Int,
98+
orderBy: String
99+
): List<PagedPropertyEntity> {
100+
currentPageNumber = page
101+
saveSortOrderKey(orderBy)
102+
return mapper.map(remoteDataSource.getPropertyDTOsWithPagination(page, orderBy))
103+
}
104+
105+
override suspend fun getPropertyEntitiesFromLocal(): List<PagedPropertyEntity> {
106+
return localDataSource.getPropertyEntities()
107+
}
108+
109+
override suspend fun savePropertyEntities(propertyEntities: List<PagedPropertyEntity>) {
110+
localDataSource.saveEntities(propertyEntities)
111+
}
112+
113+
override suspend fun deletePropertyEntities() {
114+
localDataSource.deletePropertyEntities()
115+
}
116+
117+
override suspend fun saveSortOrderKey(orderBy: String) {
118+
localDataSource.saveOrderKey(orderBy)
119+
}
120+
121+
override suspend fun getSortOrderKey(): String {
122+
return localDataSource.getOrderKey()
110123
}
111124
}

libraries/data/src/main/java/com/smarttoolfactory/data/source/PropertyDataSource.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.smarttoolfactory.data.source
22

33
import com.smarttoolfactory.data.constant.ORDER_BY_NONE
4+
import com.smarttoolfactory.data.model.local.PagedPropertyEntity
45
import com.smarttoolfactory.data.model.local.PropertyEntity
56
import com.smarttoolfactory.data.model.remote.PropertyDTO
67
import io.reactivex.rxjava3.core.Completable
@@ -27,6 +28,14 @@ interface LocalPropertyDataSourceCoroutines : PropertyDataSource {
2728
suspend fun getOrderKey(): String
2829
}
2930

31+
interface LocalPagedPropertyDataSource : PropertyDataSource {
32+
suspend fun getPropertyEntities(): List<PagedPropertyEntity>
33+
suspend fun saveEntities(properties: List<PagedPropertyEntity>): List<Long>
34+
suspend fun deletePropertyEntities()
35+
suspend fun saveOrderKey(orderBy: String)
36+
suspend fun getOrderKey(): String
37+
}
38+
3039
/*
3140
RxJava3
3241
*/
@@ -43,5 +52,5 @@ interface LocalPropertyDataSourceRxJava3 : PropertyDataSource {
4352
fun saveEntities(properties: List<PropertyEntity>): Completable
4453
fun deletePropertyEntities(): Completable
4554
fun saveOrderKey(orderBy: String): Completable
46-
fun getOrderkey(): Single<String>
55+
fun getOrderKey(): Single<String>
4756
}

0 commit comments

Comments
 (0)