Merge remote-tracking branch 'origin/develop' into release/next

This commit is contained in:
Sebastian Rindom
2021-03-17 08:34:56 +01:00
6 changed files with 133 additions and 84 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "medusa-plugin-contentful",
"version": "1.1.4",
"version": "1.1.4-alpha.7+739b7b3c",
"description": "Contentful plugin for Medusa Commerce",
"main": "index.js",
"repository": {
@@ -43,5 +43,5 @@
"medusa-test-utils": "^1.1.3",
"redis": "^3.0.2"
},
"gitHead": "0646bd395a6056657cb0aa93c13699c4a9dbbcdd"
"gitHead": "739b7b3cc5ff31aa7a15637db2000e645c7597b1"
}

View File

@@ -11,6 +11,7 @@ const checkContentTypes = async (container) => {
if (!product) {
throw Error("Content type: `product` is missing in Contentful")
}
if (!variant) {
throw Error("Content type: `productVariant` is missing in Contentful")
}

View File

@@ -96,13 +96,15 @@ class ContentfulService extends BaseService {
},
})
await asset.processForAllLocales()
const finalAsset = await asset
.processForAllLocales()
.then((ast) => ast.publish())
assets.push({
sys: {
type: "Link",
linkType: "Asset",
id: asset.sys.id,
id: finalAsset.sys.id,
},
})
})
@@ -231,9 +233,9 @@ class ContentfulService extends BaseService {
fields,
})
const ignoreIds = (await this.getIgnoreIds_("product")) || []
ignoreIds.push(product.id)
this.redis_.set("product_ignore_ids", JSON.stringify(ignoreIds))
// const ignoreIds = (await this.getIgnoreIds_("product")) || []
// ignoreIds.push(product.id)
// this.redis_.set("product_ignore_ids", JSON.stringify(ignoreIds))
return result
} catch (error) {
throw error
@@ -271,38 +273,47 @@ class ContentfulService extends BaseService {
}
)
const ignoreIds = (await this.getIgnoreIds_("product_variant")) || []
ignoreIds.push(v.id)
this.redis_.set("product_variant_ignore_ids", JSON.stringify(ignoreIds))
// const ignoreIds = (await this.getIgnoreIds_("product_variant")) || []
// ignoreIds.push(v.id)
// this.redis_.set("product_variant_ignore_ids", JSON.stringify(ignoreIds))
return result
} catch (error) {
throw error
}
}
async updateProductInContentful(product) {
async updateProductInContentful(data) {
const updateFields = [
"variants",
"options",
"tags",
"title",
"tags",
"type",
"type_id",
"collection",
"collection_id",
"thumbnail",
]
const found = data.fields.find((f) => updateFields.includes(f))
if (!found) {
return
}
try {
const ignoreIds = (await this.getIgnoreIds_("product")) || []
// const ignoreIds = (await this.getIgnoreIds_("product")) || []
if (ignoreIds.includes(product.id)) {
const newIgnoreIds = ignoreIds.filter((id) => id !== product.id)
this.redis_.set("product_ignore_ids", JSON.stringify(newIgnoreIds))
return
} else {
ignoreIds.push(product.id)
this.redis_.set("product_ignore_ids", JSON.stringify(ignoreIds))
}
// if (ignoreIds.includes(product.id)) {
// const newIgnoreIds = ignoreIds.filter((id) => id !== product.id)
// this.redis_.set("product_ignore_ids", JSON.stringify(newIgnoreIds))
// return
// } else {
// ignoreIds.push(product.id)
// this.redis_.set("product_ignore_ids", JSON.stringify(ignoreIds))
// }
const environment = await this.getContentfulEnvironment_()
// check if product exists
let productEntry = undefined
try {
productEntry = await environment.getEntry(product.id)
} catch (error) {
return this.createProductInContentful(product)
}
const p = await this.productService_.retrieve(product.id, {
const p = await this.productService_.retrieve(data.id, {
relations: [
"options",
"variants",
@@ -313,6 +324,15 @@ class ContentfulService extends BaseService {
],
})
const environment = await this.getContentfulEnvironment_()
// check if product exists
let productEntry = undefined
try {
productEntry = await environment.getEntry(data.id)
} catch (error) {
return this.createProductInContentful(p)
}
const variantEntries = await this.getVariantEntries_(p.variants)
const variantLinks = this.getVariantLinks_(variantEntries)
@@ -332,7 +352,12 @@ class ContentfulService extends BaseService {
},
}
if (p.thumbnail) {
if (data.fields.includes("thumbnail") && p.thumbnail) {
let url = p.thumbnail
if (p.thumbnail.startsWith("//")) {
url = `https:${url}`
}
const thumbnailAsset = await environment.createAsset({
fields: {
title: {
@@ -344,8 +369,8 @@ class ContentfulService extends BaseService {
file: {
"en-US": {
contentType: "image/xyz",
fileName: p.thumbnail,
upload: p.thumbnail,
fileName: url,
upload: url,
},
},
},
@@ -412,20 +437,37 @@ class ContentfulService extends BaseService {
}
async updateProductVariantInContentful(variant) {
try {
const ignoreIds = (await this.getIgnoreIds_("product_variant")) || []
const updateFields = [
"title",
"prices",
"sku",
"material",
"weight",
"length",
"height",
"origin_country",
"options",
]
if (ignoreIds.includes(variant.id)) {
const newIgnoreIds = ignoreIds.filter((id) => id !== variant.id)
this.redis_.set(
"product_variant_ignore_ids",
JSON.stringify(newIgnoreIds)
)
return
} else {
ignoreIds.push(variant.id)
this.redis_.set("product_variant_ignore_ids", JSON.stringify(ignoreIds))
}
const found = variant.fields.find((f) => updateFields.includes(f))
if (!found) {
return
}
try {
// const ignoreIds = (await this.getIgnoreIds_("product_variant")) || []
//if (ignoreIds.includes(variant.id)) {
// const newIgnoreIds = ignoreIds.filter((id) => id !== variant.id)
// this.redis_.set(
// "product_variant_ignore_ids",
// JSON.stringify(newIgnoreIds)
// )
// return
//} else {
// ignoreIds.push(variant.id)
// this.redis_.set("product_variant_ignore_ids", JSON.stringify(ignoreIds))
//}
const environment = await this.getContentfulEnvironment_()
// check if product exists
@@ -476,19 +518,23 @@ class ContentfulService extends BaseService {
const environment = await this.getContentfulEnvironment_()
const productEntry = await environment.getEntry(productId)
const ignoreIds = (await this.getIgnoreIds_("product")) || []
if (ignoreIds.includes(productId)) {
const newIgnoreIds = ignoreIds.filter((id) => id !== productId)
this.redis_.set("product_ignore_ids", JSON.stringify(newIgnoreIds))
return
} else {
ignoreIds.push(productId)
this.redis_.set("product_ignore_ids", JSON.stringify(ignoreIds))
}
const product = await this.productService_.retrieve(productId)
let update = {
title:
productEntry.fields[this.getCustomField("title", "product")]["en-US"],
//const ignoreIds = (await this.getIgnoreIds_("product")) || []
//if (ignoreIds.includes(productId)) {
// const newIgnoreIds = ignoreIds.filter((id) => id !== productId)
// this.redis_.set("product_ignore_ids", JSON.stringify(newIgnoreIds))
// return
//} else {
// ignoreIds.push(productId)
// this.redis_.set("product_ignore_ids", JSON.stringify(ignoreIds))
//}
let update = {}
const title =
productEntry.fields[this.getCustomField("title", "product")]["en-US"]
if (product.title !== title) {
update.title = title
}
// Get the thumbnail, if present
@@ -497,15 +543,16 @@ class ContentfulService extends BaseService {
productEntry.fields.thumbnail["en-US"].sys.id
)
update.thumbnail = thumb.fields.file["en-US"].url
if (thumb.fields.file["en-US"].url) {
if (!product.thumbnail.includes(thumb.fields.file["en-US"].url)) {
update.thumbnail = thumb.fields.file["en-US"].url
}
}
}
const updatedProduct = await this.productService_.update(
productId,
update
)
return updatedProduct
if (!_.isEmpty(update)) {
await this.productService_.update(productId, update)
}
} catch (error) {
throw error
}
@@ -516,18 +563,18 @@ class ContentfulService extends BaseService {
const environment = await this.getContentfulEnvironment_()
const variantEntry = await environment.getEntry(variantId)
const ignoreIds = (await this.getIgnoreIds_("product_variant")) || []
if (ignoreIds.includes(variantId)) {
const newIgnoreIds = ignoreIds.filter((id) => id !== variantId)
this.redis_.set(
"product_variant_ignore_ids",
JSON.stringify(newIgnoreIds)
)
return
} else {
ignoreIds.push(variantId)
this.redis_.set("product_variant_ignore_ids", JSON.stringify(ignoreIds))
}
// const ignoreIds = (await this.getIgnoreIds_("product_variant")) || []
// if (ignoreIds.includes(variantId)) {
// const newIgnoreIds = ignoreIds.filter((id) => id !== variantId)
// this.redis_.set(
// "product_variant_ignore_ids",
// JSON.stringify(newIgnoreIds)
// )
// return
// } else {
// ignoreIds.push(variantId)
// this.redis_.set("product_variant_ignore_ids", JSON.stringify(ignoreIds))
// }
const updatedVariant = await this.productVariantService_.update(
variantId,

View File

@@ -309,7 +309,7 @@ describe("ProductVariantService", () => {
"product-variant.updated",
{
id: IdMap.getId("ironman"),
title: "new title",
fields: ["title"],
}
)
@@ -333,7 +333,7 @@ describe("ProductVariantService", () => {
"product-variant.updated",
{
id: IdMap.getId("ironman"),
title: "new title",
fields: ["title"],
}
)
@@ -370,10 +370,7 @@ describe("ProductVariantService", () => {
"product-variant.updated",
{
id: IdMap.getId("ironman"),
title: "new title",
metadata: {
testing: "this",
},
fields: ["title", "metadata"],
}
)

View File

@@ -298,7 +298,10 @@ class ProductVariantService extends BaseService {
const result = await variantRepo.save(variant)
await this.eventBus_
.withTransaction(manager)
.emit(ProductVariantService.Events.UPDATED, result)
.emit(ProductVariantService.Events.UPDATED, {
id: result.id,
fields: Object.keys(update),
})
return result
})
}

View File

@@ -444,6 +444,7 @@ class ProductService extends BaseService {
.withTransaction(manager)
.emit(ProductService.Events.UPDATED, {
id: result.id,
fields: Object.keys(update),
})
return result
})