-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Woo] Extract subscriptions outside of WCProductModel table #3106
Changes from 8 commits
202e100
11e901f
6e1d36a
bb0f237
31b0bc0
b2002e5
f30d1b6
5dd2a27
58e794d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package org.wordpress.android.fluxc.model.metadata | ||
|
||
import com.google.gson.JsonArray | ||
import com.google.gson.JsonNull | ||
import com.google.gson.JsonObject | ||
|
||
data class MetadataChanges( | ||
val insertedMetadata: List<WCMetaData> = emptyList(), | ||
val updatedMetadata: List<WCMetaData> = emptyList(), | ||
val deletedMetadataIds: List<Long> = emptyList(), | ||
) { | ||
Comment on lines
+7
to
+11
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I extracted this bit to a separate class, this class can now be used in other places when needed (now it's used in WCProductStore, but can be used for orders as well), while the My goal of extracting this is to not have to deal with unneeded information for the other usages (I mean |
||
init { | ||
// The ID of inserted metadata is ignored, so to ensure that there is no data loss here, | ||
// we require that all inserted metadata have an ID of 0. | ||
require(insertedMetadata.all { it.id == 0L }) { | ||
"Inserted metadata must have an ID of 0" | ||
} | ||
} | ||
|
||
internal fun toJsonArray() = JsonArray().apply { | ||
insertedMetadata.forEach { | ||
add( | ||
JsonObject().apply { | ||
addProperty(WCMetaData.KEY, it.key) | ||
add(WCMetaData.VALUE, it.value.jsonValue) | ||
} | ||
) | ||
} | ||
updatedMetadata.forEach { | ||
add(it.toJson()) | ||
} | ||
deletedMetadataIds.forEach { | ||
add( | ||
JsonObject().apply { | ||
addProperty(WCMetaData.ID, it) | ||
add(WCMetaData.VALUE, JsonNull.INSTANCE) | ||
} | ||
) | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -78,6 +78,16 @@ sealed class WCMetaDataValue { | |
} | ||
|
||
companion object { | ||
operator fun invoke(value: String?): WCMetaDataValue { | ||
if (value == null) return StringValue(null) | ||
|
||
return runCatching { JsonParser().parse(value) } | ||
.getOrElse { JsonPrimitive(value) } | ||
.let { fromJsonElement(it) } | ||
} | ||
operator fun invoke(value: Number): WCMetaDataValue = NumberValue(value) | ||
operator fun invoke(value: Boolean): WCMetaDataValue = BooleanValue(value) | ||
Comment on lines
+81
to
+89
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just a nicer way to instantiate the values instead of the |
||
|
||
internal fun fromJsonElement(element: JsonElement): WCMetaDataValue { | ||
return when { | ||
element.isJsonPrimitive -> { | ||
|
@@ -95,10 +105,5 @@ sealed class WCMetaDataValue { | |
else -> StringValue(element.toString()) | ||
} | ||
} | ||
|
||
fun fromRawString(value: String): WCMetaDataValue = | ||
runCatching { JsonParser().parse(value) } | ||
.getOrElse { JsonPrimitive(value) } | ||
.let { fromJsonElement(it) } | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well spotted as most Android versions won't support alter table -> drop column operation. It seems this was added in SQLite
3.35.0
and it was in Android API 34 when SQLite was updated to a version >3.35.0
Super minor np, typo in
across
word