Skip to content
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

Product Password using site credentials #3096

Merged
merged 3 commits into from
Sep 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ open class WellSqlConfig : DefaultWellConfig {
annotation class AddOn

override fun getDbVersion(): Int {
return 203
return 204
}

override fun getDbName(): String {
Expand Down Expand Up @@ -2024,6 +2024,35 @@ open class WellSqlConfig : DefaultWellConfig {
db.execSQL("ALTER TABLE WCProductModel ADD BUNDLE_MIN_SIZE REAL")
db.execSQL("ALTER TABLE WCProductModel ADD BUNDLE_MAX_SIZE REAL")
}

203 -> migrateAddOn(ADDON_WOOCOMMERCE, version) {
db.execSQL("DROP TABLE IF EXISTS WCProductModel")
db.execSQL("""
CREATE TABLE WCProductModel (
_id INTEGER PRIMARY KEY AUTOINCREMENT,LOCAL_SITE_ID INTEGER,
REMOTE_PRODUCT_ID INTEGER,NAME TEXT NOT NULL,SLUG TEXT NOT NULL,PERMALINK TEXT NOT NULL,
DATE_CREATED TEXT NOT NULL,DATE_MODIFIED TEXT NOT NULL,TYPE TEXT NOT NULL,STATUS TEXT NOT NULL,
FEATURED INTEGER,CATALOG_VISIBILITY TEXT NOT NULL,DESCRIPTION TEXT NOT NULL,
SHORT_DESCRIPTION TEXT NOT NULL,SKU TEXT NOT NULL,PRICE TEXT NOT NULL,REGULAR_PRICE TEXT NOT NULL,
SALE_PRICE TEXT NOT NULL,ON_SALE INTEGER,TOTAL_SALES INTEGER,PURCHASABLE INTEGER,
DATE_ON_SALE_FROM TEXT NOT NULL,DATE_ON_SALE_TO TEXT NOT NULL,DATE_ON_SALE_FROM_GMT TEXT NOT NULL,
DATE_ON_SALE_TO_GMT TEXT NOT NULL,VIRTUAL INTEGER,DOWNLOADABLE INTEGER,DOWNLOAD_LIMIT INTEGER,
DOWNLOAD_EXPIRY INTEGER,SOLD_INDIVIDUALLY INTEGER,EXTERNAL_URL TEXT NOT NULL,BUTTON_TEXT TEXT NOT NULL,
TAX_STATUS TEXT NOT NULL,TAX_CLASS TEXT NOT NULL,MANAGE_STOCK INTEGER,STOCK_QUANTITY REAL,
STOCK_STATUS TEXT NOT NULL,BACKORDERS TEXT NOT NULL,BACKORDERS_ALLOWED INTEGER,BACKORDERED INTEGER,
SHIPPING_REQUIRED INTEGER,SHIPPING_TAXABLE INTEGER,SHIPPING_CLASS TEXT NOT NULL,SHIPPING_CLASS_ID INTEGER,
REVIEWS_ALLOWED INTEGER,AVERAGE_RATING TEXT NOT NULL,RATING_COUNT INTEGER,PARENT_ID INTEGER,
PURCHASE_NOTE TEXT NOT NULL,MENU_ORDER INTEGER,CATEGORIES TEXT NOT NULL,TAGS TEXT NOT NULL,
IMAGES TEXT NOT NULL,ATTRIBUTES TEXT NOT NULL,VARIATIONS TEXT NOT NULL,DOWNLOADS TEXT NOT NULL,
RELATED_IDS TEXT NOT NULL,CROSS_SELL_IDS TEXT NOT NULL,UPSELL_IDS TEXT NOT NULL,
GROUPED_PRODUCT_IDS TEXT NOT NULL,WEIGHT TEXT NOT NULL,LENGTH TEXT NOT NULL,WIDTH TEXT NOT NULL,
HEIGHT TEXT NOT NULL,METADATA TEXT NOT NULL,BUNDLED_ITEMS TEXT NOT NULL,
COMPOSITE_COMPONENTS TEXT NOT NULL,SPECIAL_STOCK_STATUS TEXT NOT NULL,BUNDLE_MIN_SIZE REAL,
BUNDLE_MAX_SIZE REAL,MIN_ALLOWED_QUANTITY INTEGER,MAX_ALLOWED_QUANTITY INTEGER,
GROUP_OF_QUANTITY INTEGER,COMBINE_VARIATION_QUANTITIES INTEGER,PASSWORD TEXT,IS_SAMPLE_PRODUCT INTEGER
)
""".trimIndent())
Comment on lines +2028 to +2054
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, curious what is the reason of recreatiing the whole table instead of adding just the new column with something like:

db.execSQL("ALTER TABLE WCProductModel ADD PASSWORD TEXT")

Are there any other changes I'm missing?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to avoid any data loss, if we keep the previous cache, it will have the PASSWORD set to null, so if we happen to push some updates to the product, we could cause some data loss.

WDYT?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I see. I had not contemplated we could override server values with our cached values. Good point, it seems safer to clear the local db.

}
}
}
db.setTransactionSuccessful()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ data class WCProductModel(@PrimaryKey @Column private var id: Int = 0) : Identif
@Column var maxAllowedQuantity = -1
@Column var groupOfQuantity = -1
@Column var combineVariationQuantities = false
@Column var password: String? = null

@Column var isSampleProduct = false
@JvmName("setIsSampleProduct")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,6 @@ data class ProductApiResponse(
val max_quantity: String? = null,
val group_of_quantity: String? = null,
val combine_variations: String? = null,
@SerializedName("post_password")
val password: String? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ class ProductDtoMapper @Inject constructor(
// Save only the subscription data, the rest of the metadata will be saved separately
metadata = metaData.filter { it.key in WCProductModel.SubscriptionMetadataKeys.ALL_KEYS }
.let { gson.toJson(it) }

password = dto.password

isSampleProduct = dto.metadata?.any {
val metaDataEntry = WCMetaData.fromJson(it.asJsonObject)
metaDataEntry?.let { json ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1999,6 +1999,9 @@ class ProductRestClient @Inject constructor(
}
}
}
if (storedWCProductModel.password != updatedProductModel.password) {
body["post_password"] = updatedProductModel.password.orEmpty()
}

return body
}
Expand Down
Loading