Skip to content

Commit a44701e

Browse files
authored
Merge pull request #14594 from woocommerce/issue/woomob-1280-woo-poslocal-catalog-use-new-pos-specific-product-model-step-9
POS Product Migration Step 9 - final step
2 parents c65faf1 + b511ac7 commit a44701e

File tree

45 files changed

+432
-480
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+432
-480
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosGetProductById.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.woocommerce.android.ui.woopos.common.data
22

33
import com.woocommerce.android.tools.SelectedSite
4-
import com.woocommerce.android.ui.woopos.common.data.models.WCProductToWooPosProductModelMapper
5-
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
4+
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModel
5+
import com.woocommerce.android.ui.woopos.common.data.models.WooPosWCProductToWooPosProductModelMapper
66
import kotlinx.coroutines.Dispatchers.IO
77
import kotlinx.coroutines.withContext
88
import org.wordpress.android.fluxc.network.rest.wpcom.wc.product.ProductRestClient
@@ -12,9 +12,9 @@ class WooPosGetProductById @Inject constructor(
1212
private val selectedSite: SelectedSite,
1313
private val cache: WooPosProductsCache,
1414
private val productRestClient: ProductRestClient,
15-
private val productMapper: WCProductToWooPosProductModelMapper,
15+
private val productMapper: WooPosWCProductToWooPosProductModelMapper,
1616
) {
17-
suspend operator fun invoke(productId: Long): WooPosProductModelVersion2? = withContext(IO) {
17+
suspend operator fun invoke(productId: Long): WooPosProductModel? = withContext(IO) {
1818
val cachedProduct = cache.getProductById(productId)
1919
if (cachedProduct != null) {
2020
return@withContext cachedProduct

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProvider.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.woocommerce.android.ui.woopos.common.data
22

33
import com.woocommerce.android.tools.SelectedSite
4-
import com.woocommerce.android.ui.woopos.common.data.models.WCProductToWooPosProductModelMapper
5-
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
4+
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModel
5+
import com.woocommerce.android.ui.woopos.common.data.models.WooPosWCProductToWooPosProductModelMapper
66
import kotlinx.coroutines.sync.Mutex
77
import kotlinx.coroutines.sync.withLock
88
import org.wordpress.android.fluxc.store.WCProductStore
@@ -16,16 +16,16 @@ class WooPosPopularProductsProvider @Inject constructor(
1616
private val productStore: WCProductStore,
1717
private val productsCache: WooPosProductsCache,
1818
private val productsTypesFilterConfig: WooPosProductsTypesFilterConfig,
19-
private val productMapper: WCProductToWooPosProductModelMapper,
19+
private val productMapper: WooPosWCProductToWooPosProductModelMapper,
2020
) {
2121
companion object {
2222
private const val MAX_POPULAR_PRODUCTS = 10
2323
}
2424

2525
private val mutex = Mutex()
26-
private val popularProductsCache = mutableListOf<WooPosProductModelVersion2>()
26+
private val popularProductsCache = mutableListOf<WooPosProductModel>()
2727

28-
suspend fun getPopularProducts(): List<WooPosProductModelVersion2> = mutex.withLock { popularProductsCache }
28+
suspend fun getPopularProducts(): List<WooPosProductModel> = mutex.withLock { popularProductsCache }
2929

3030
suspend fun addPopularItemsToCache() = mutex.withLock {
3131
productsCache.addAll(popularProductsCache)

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosProductsCache.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package com.woocommerce.android.ui.woopos.common.data
22

3-
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
3+
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModel
44

55
interface WooPosProductsCache {
66
companion object {
77
const val MAX_CACHE_SIZE = 2_000
88
}
99

10-
suspend fun addAll(products: List<WooPosProductModelVersion2>)
10+
suspend fun addAll(products: List<WooPosProductModel>)
1111

12-
suspend fun getAll(): List<WooPosProductModelVersion2>
12+
suspend fun getAll(): List<WooPosProductModel>
1313

14-
suspend fun getProductById(productId: Long): WooPosProductModelVersion2?
14+
suspend fun getProductById(productId: Long): WooPosProductModel?
1515

16-
suspend fun getProductByGlobalUniqueIdentifier(globalUniqueIdentifier: String): WooPosProductModelVersion2?
16+
suspend fun getProductByGlobalUniqueIdentifier(globalUniqueIdentifier: String): WooPosProductModel?
1717

18-
suspend fun updateProduct(product: WooPosProductModelVersion2)
18+
suspend fun updateProduct(product: WooPosProductModel)
1919

2020
suspend fun deleteProduct(productId: Long)
2121

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosProductsInMemoryCache.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.woocommerce.android.ui.woopos.common.data
22

33
import com.woocommerce.android.ui.woopos.common.data.WooPosProductsCache.Companion.MAX_CACHE_SIZE
4-
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
4+
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModel
55
import kotlinx.coroutines.sync.Mutex
66
import kotlinx.coroutines.sync.withLock
77
import javax.inject.Inject
@@ -16,13 +16,13 @@ class WooPosProductsInMemoryCache @Inject constructor() : WooPosProductsCache {
1616
private const val LOAD_FACTOR = 0.75f
1717
}
1818

19-
private val productsCache = LinkedHashMap<Long, WooPosProductModelVersion2>(INITIAL_CAPACITY, LOAD_FACTOR, true)
19+
private val productsCache = LinkedHashMap<Long, WooPosProductModel>(INITIAL_CAPACITY, LOAD_FACTOR, true)
2020

21-
override suspend fun addAll(products: List<WooPosProductModelVersion2>) = mutex.withLock {
21+
override suspend fun addAll(products: List<WooPosProductModel>) = mutex.withLock {
2222
addAllInternal(products)
2323
}
2424

25-
override suspend fun updateProduct(product: WooPosProductModelVersion2) = mutex.withLock {
25+
override suspend fun updateProduct(product: WooPosProductModel) = mutex.withLock {
2626
productsCache[product.remoteId] = product
2727
}
2828

@@ -32,11 +32,11 @@ class WooPosProductsInMemoryCache @Inject constructor() : WooPosProductsCache {
3232
}
3333
}
3434

35-
override suspend fun getAll(): List<WooPosProductModelVersion2> = mutex.withLock {
35+
override suspend fun getAll(): List<WooPosProductModel> = mutex.withLock {
3636
return productsCache.values.toList()
3737
}
3838

39-
override suspend fun getProductById(productId: Long): WooPosProductModelVersion2? = mutex.withLock {
39+
override suspend fun getProductById(productId: Long): WooPosProductModel? = mutex.withLock {
4040
return productsCache[productId]
4141
}
4242

@@ -47,7 +47,7 @@ class WooPosProductsInMemoryCache @Inject constructor() : WooPosProductsCache {
4747
productsCache.clear()
4848
}
4949

50-
private fun addAllInternal(products: List<WooPosProductModelVersion2>) {
50+
private fun addAllInternal(products: List<WooPosProductModel>) {
5151
products.forEach { product ->
5252
productsCache[product.remoteId] = product
5353
if (productsCache.size > MAX_CACHE_SIZE) {

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosVariationMapper.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.google.gson.JsonSyntaxException
55
import com.google.gson.reflect.TypeToken
66
import com.woocommerce.android.R
77
import com.woocommerce.android.model.ProductVariation
8-
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModelVersion2
8+
import com.woocommerce.android.ui.woopos.common.data.models.WooPosProductModel
99
import com.woocommerce.android.util.WooLog
1010
import com.woocommerce.android.viewmodel.ResourceProvider
1111
import org.wordpress.android.fluxc.model.WCProductVariationModel
@@ -91,7 +91,7 @@ class WooPosVariationMapper @Inject constructor(
9191

9292
fun getNameForPOS(
9393
variation: WooPosVariation,
94-
parentProduct: WooPosProductModelVersion2? = null,
94+
parentProduct: WooPosProductModel? = null,
9595
resourceProvider: ResourceProvider,
9696
): String {
9797
return parentProduct?.variationEnabledAttributes?.joinToString(", ") { attribute ->
@@ -117,7 +117,7 @@ class WooPosVariationMapper @Inject constructor(
117117
}
118118
}
119119

120-
fun getName(variation: WooPosVariation, parentProduct: WooPosProductModelVersion2? = null): String {
120+
fun getName(variation: WooPosVariation, parentProduct: WooPosProductModel? = null): String {
121121
return parentProduct?.variationEnabledAttributes?.joinToString(" - ") { attribute ->
122122
val option = variation.attributes.firstOrNull { it.name == attribute.name }
123123
option?.option ?: "Any ${attribute.name}"
@@ -167,9 +167,9 @@ fun WCPosVariationModel.toWooPosVariation(mapper: WooPosVariationMapper): WooPos
167167

168168
fun WooPosVariation.getNameForPOS(
169169
mapper: WooPosVariationMapper,
170-
parentProduct: WooPosProductModelVersion2? = null,
170+
parentProduct: WooPosProductModel? = null,
171171
resourceProvider: ResourceProvider,
172172
): String = mapper.getNameForPOS(this, parentProduct, resourceProvider)
173173

174-
fun WooPosVariation.getName(mapper: WooPosVariationMapper, parentProduct: WooPosProductModelVersion2? = null): String =
174+
fun WooPosVariation.getName(mapper: WooPosVariationMapper, parentProduct: WooPosProductModel? = null): String =
175175
mapper.getName(this, parentProduct)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import java.math.BigDecimal
1111
* and the view layer, ensuring all required data is present and properly typed.
1212
*/
1313
@Parcelize
14-
data class WooPosProductModelVersion2(
14+
data class WooPosProductModel(
1515
val remoteId: Long,
1616
val parentId: Long?,
1717
val name: String,
Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import javax.inject.Inject
1616
* The mapper ensures clean data handling:
1717
*/
1818
@Reusable
19-
class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLogWrapper) {
19+
class WooPosProductModelMapper @Inject constructor(val logger: WooPosLogWrapper) {
2020
private val gson = Gson()
21-
fun fromEntity(entity: WCPosProductEntity): WooPosProductModelVersion2 {
22-
return WooPosProductModelVersion2(
21+
fun fromEntity(entity: WCPosProductEntity): WooPosProductModel {
22+
return WooPosProductModel(
2323
remoteId = entity.remoteId.value,
2424
parentId = entity.parentId,
2525
name = entity.name,
@@ -45,7 +45,7 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
4545
)
4646
}
4747

48-
fun fromEntities(entities: List<WCPosProductEntity>): List<WooPosProductModelVersion2> {
48+
fun fromEntities(entities: List<WCPosProductEntity>): List<WooPosProductModel> {
4949
return entities.map { fromEntity(it) }
5050
}
5151

@@ -62,7 +62,7 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
6262
}
6363
}
6464

65-
fun parseImages(imagesJson: String): List<WooPosProductModelVersion2.WooPosProductImage> {
65+
fun parseImages(imagesJson: String): List<WooPosProductModel.WooPosProductImage> {
6666
return try {
6767
if (imagesJson.isBlank()) {
6868
emptyList()
@@ -79,7 +79,7 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
7979
}
8080
}
8181

82-
private fun parseImage(imageMap: Map<String, Any?>): WooPosProductModelVersion2.WooPosProductImage? {
82+
private fun parseImage(imageMap: Map<String, Any?>): WooPosProductModel.WooPosProductImage? {
8383
val id = when (val idValue = imageMap["id"]) {
8484
is Double -> idValue.toLong()
8585
is Int -> idValue.toLong()
@@ -94,10 +94,10 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
9494
logger.w("Failed to parse images JSON, id or url is null: $id, $url")
9595
return null
9696
}
97-
return WooPosProductModelVersion2.WooPosProductImage(id, url, name, alt)
97+
return WooPosProductModel.WooPosProductImage(id, url, name, alt)
9898
}
9999

100-
fun parseAttributes(attributesJson: String): List<WooPosProductModelVersion2.WooPosProductAttribute> {
100+
fun parseAttributes(attributesJson: String): List<WooPosProductModel.WooPosProductAttribute> {
101101
return try {
102102
if (attributesJson.isBlank()) {
103103
emptyList()
@@ -114,7 +114,7 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
114114
}
115115
}
116116

117-
private fun parseAttribute(attrMap: Map<String, Any?>): WooPosProductModelVersion2.WooPosProductAttribute? {
117+
private fun parseAttribute(attrMap: Map<String, Any?>): WooPosProductModel.WooPosProductAttribute? {
118118
val id = when (val idValue = attrMap["id"]) {
119119
is Double -> idValue.toLong()
120120
is Int -> idValue.toLong()
@@ -130,10 +130,10 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
130130
}
131131
val isVisible = attrMap["visible"] as? Boolean ?: true
132132
val isVariation = attrMap["variation"] as? Boolean ?: false
133-
return WooPosProductModelVersion2.WooPosProductAttribute(id, name, options, isVisible, isVariation)
133+
return WooPosProductModel.WooPosProductAttribute(id, name, options, isVisible, isVariation)
134134
}
135135

136-
fun parseCategories(categoriesJson: String): List<WooPosProductModelVersion2.WooPosProductCategory> {
136+
fun parseCategories(categoriesJson: String): List<WooPosProductModel.WooPosProductCategory> {
137137
return try {
138138
if (categoriesJson.isBlank()) {
139139
emptyList()
@@ -150,7 +150,7 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
150150
}
151151
}
152152

153-
private fun parseCategory(catMap: Map<String, Any?>): WooPosProductModelVersion2.WooPosProductCategory? {
153+
private fun parseCategory(catMap: Map<String, Any?>): WooPosProductModel.WooPosProductCategory? {
154154
val id = when (val idValue = catMap["id"]) {
155155
is Double -> idValue.toLong()
156156
is Int -> idValue.toLong()
@@ -164,10 +164,10 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
164164
logger.w("Failed to parse category JSON, id or name is null: $id, $name")
165165
return null
166166
}
167-
return WooPosProductModelVersion2.WooPosProductCategory(id, name, slug)
167+
return WooPosProductModel.WooPosProductCategory(id, name, slug)
168168
}
169169

170-
fun parseTags(tagsJson: String): List<WooPosProductModelVersion2.WooPosProductTag> {
170+
fun parseTags(tagsJson: String): List<WooPosProductModel.WooPosProductTag> {
171171
return try {
172172
if (tagsJson.isBlank()) {
173173
emptyList()
@@ -184,7 +184,7 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
184184
}
185185
}
186186

187-
private fun parseTag(tagMap: Map<String, Any?>): WooPosProductModelVersion2.WooPosProductTag? {
187+
private fun parseTag(tagMap: Map<String, Any?>): WooPosProductModel.WooPosProductTag? {
188188
val id = when (val idValue = tagMap["id"]) {
189189
is Double -> idValue.toLong()
190190
is Int -> idValue.toLong()
@@ -198,7 +198,7 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
198198
logger.w("Failed to parse tag JSON, id or name is null: $id, $name")
199199
return null
200200
}
201-
return WooPosProductModelVersion2.WooPosProductTag(id, name, slug)
201+
return WooPosProductModel.WooPosProductTag(id, name, slug)
202202
}
203203

204204
private fun parseVariationIds(variationsJson: String): List<Long> {
@@ -229,51 +229,51 @@ class WooPosProductModelVersion2Mapper @Inject constructor(val logger: WooPosLog
229229
regularPrice: BigDecimal?,
230230
salePrice: BigDecimal?,
231231
isOnSale: Boolean
232-
): WooPosProductModelVersion2.WooPosPricing {
232+
): WooPosProductModel.WooPosPricing {
233233
return when {
234234
isOnSale && salePrice != null && regularPrice != null -> {
235-
WooPosProductModelVersion2.WooPosPricing.SalePricing(regularPrice, salePrice)
235+
WooPosProductModel.WooPosPricing.SalePricing(regularPrice, salePrice)
236236
}
237237

238238
isOnSale && salePrice != null && price != null -> {
239-
WooPosProductModelVersion2.WooPosPricing.SalePricing(price, salePrice)
239+
WooPosProductModel.WooPosPricing.SalePricing(price, salePrice)
240240
}
241241

242242
regularPrice != null -> {
243-
WooPosProductModelVersion2.WooPosPricing.RegularPricing(regularPrice)
243+
WooPosProductModel.WooPosPricing.RegularPricing(regularPrice)
244244
}
245245

246246
price != null -> {
247-
WooPosProductModelVersion2.WooPosPricing.RegularPricing(price)
247+
WooPosProductModel.WooPosPricing.RegularPricing(price)
248248
}
249249

250-
else -> WooPosProductModelVersion2.WooPosPricing.NoPricing
250+
else -> WooPosProductModel.WooPosPricing.NoPricing
251251
}
252252
}
253253

254-
fun mapProductType(type: String): WooPosProductModelVersion2.WooPosProductType {
254+
fun mapProductType(type: String): WooPosProductModel.WooPosProductType {
255255
return when (type.lowercase()) {
256-
"simple" -> WooPosProductModelVersion2.WooPosProductType.SIMPLE
257-
"variable" -> WooPosProductModelVersion2.WooPosProductType.VARIABLE
258-
"grouped" -> WooPosProductModelVersion2.WooPosProductType.GROUPED
259-
"external" -> WooPosProductModelVersion2.WooPosProductType.EXTERNAL
260-
"variation" -> WooPosProductModelVersion2.WooPosProductType.VARIATION
261-
"subscription" -> WooPosProductModelVersion2.WooPosProductType.SUBSCRIPTION
262-
"variable-subscription" -> WooPosProductModelVersion2.WooPosProductType.VARIABLE_SUBSCRIPTION
263-
"bundle" -> WooPosProductModelVersion2.WooPosProductType.BUNDLE
264-
"composite" -> WooPosProductModelVersion2.WooPosProductType.COMPOSITE
265-
else -> WooPosProductModelVersion2.WooPosProductType.CUSTOM
256+
"simple" -> WooPosProductModel.WooPosProductType.SIMPLE
257+
"variable" -> WooPosProductModel.WooPosProductType.VARIABLE
258+
"grouped" -> WooPosProductModel.WooPosProductType.GROUPED
259+
"external" -> WooPosProductModel.WooPosProductType.EXTERNAL
260+
"variation" -> WooPosProductModel.WooPosProductType.VARIATION
261+
"subscription" -> WooPosProductModel.WooPosProductType.SUBSCRIPTION
262+
"variable-subscription" -> WooPosProductModel.WooPosProductType.VARIABLE_SUBSCRIPTION
263+
"bundle" -> WooPosProductModel.WooPosProductType.BUNDLE
264+
"composite" -> WooPosProductModel.WooPosProductType.COMPOSITE
265+
else -> WooPosProductModel.WooPosProductType.CUSTOM
266266
}
267267
}
268268

269-
fun mapProductStatus(status: String): WooPosProductModelVersion2.WooPosProductStatus {
269+
fun mapProductStatus(status: String): WooPosProductModel.WooPosProductStatus {
270270
return when (status.lowercase()) {
271-
"publish" -> WooPosProductModelVersion2.WooPosProductStatus.PUBLISH
272-
"draft" -> WooPosProductModelVersion2.WooPosProductStatus.DRAFT
273-
"pending" -> WooPosProductModelVersion2.WooPosProductStatus.PENDING
274-
"private" -> WooPosProductModelVersion2.WooPosProductStatus.PRIVATE
275-
"trash" -> WooPosProductModelVersion2.WooPosProductStatus.TRASH
276-
else -> WooPosProductModelVersion2.WooPosProductStatus.UNKNOWN
271+
"publish" -> WooPosProductModel.WooPosProductStatus.PUBLISH
272+
"draft" -> WooPosProductModel.WooPosProductStatus.DRAFT
273+
"pending" -> WooPosProductModel.WooPosProductStatus.PENDING
274+
"private" -> WooPosProductModel.WooPosProductStatus.PRIVATE
275+
"trash" -> WooPosProductModel.WooPosProductStatus.TRASH
276+
else -> WooPosProductModel.WooPosProductStatus.UNKNOWN
277277
}
278278
}
279279
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import java.math.BigDecimal
77
import javax.inject.Inject
88

99
@Reusable
10-
class WCProductToWooPosProductModelMapper @Inject constructor(
11-
private val wooPosProductModelMapper: WooPosProductModelVersion2Mapper,
10+
class WooPosWCProductToWooPosProductModelMapper @Inject constructor(
11+
private val wooPosProductModelMapper: WooPosProductModelMapper,
1212
private val logger: WooPosLogWrapper
1313
) {
14-
fun map(wcProduct: WCProductModel): WooPosProductModelVersion2 {
15-
return WooPosProductModelVersion2(
14+
fun map(wcProduct: WCProductModel): WooPosProductModel {
15+
return WooPosProductModel(
1616
remoteId = wcProduct.remoteProductId,
1717
parentId = wcProduct.parentId.takeIf { it != 0L },
1818
name = wcProduct.name,

0 commit comments

Comments
 (0)