feat(medusa): Adds set and delete metadata endpoints for region and orders (#131)

This commit is contained in:
Oliver Windall Juhl
2020-11-04 11:38:04 +01:00
committed by GitHub
parent b8d1bbb204
commit d67b6e6ebe
10 changed files with 244 additions and 0 deletions
@@ -137,6 +137,18 @@ export const OrderServiceMock = {
}
return Promise.resolve(undefined)
}),
setMetadata: jest.fn().mockImplementation((id, key, value) => {
if (id === IdMap.getId("test-order")) {
return Promise.resolve(orders.testOrder)
}
return Promise.resolve(undefined)
}),
deleteMetadata: jest.fn().mockImplementation((id, key, value) => {
if (id === IdMap.getId("test-order")) {
return Promise.resolve(orders.testOrder)
}
return Promise.resolve(undefined)
}),
retrieve: jest.fn().mockImplementation(orderId => {
if (orderId === IdMap.getId("test-order")) {
return Promise.resolve(orders.testOrder)
+51
View File
@@ -370,6 +370,57 @@ class RegionService extends BaseService {
const final = await this.runDecorators_(decorated)
return final
}
/**
* Dedicated method to set metadata for a region.
* To ensure that plugins does not overwrite each
* others metadata fields, setMetadata is provided.
* @param {string} regionId - the region to decorate.
* @param {string} key - key for metadata field
* @param {string} value - value for metadata field.
* @return {Promise} resolves to the updated result.
*/
async setMetadata(regionId, key, value) {
const validatedId = this.validateId_(regionId)
if (typeof key !== "string") {
throw new MedusaError(
MedusaError.Types.INVALID_ARGUMENT,
"Key type is invalid. Metadata keys must be strings"
)
}
const keyPath = `metadata.${key}`
return this.regionModel_
.updateOne({ _id: validatedId }, { $set: { [keyPath]: value } })
.catch(err => {
throw new MedusaError(MedusaError.Types.DB_ERROR, err.message)
})
}
/**
* Dedicated method to delete metadata for an region.
* @param {string} regionId - the region to delete metadata from.
* @param {string} key - key for metadata field
* @return {Promise} resolves to the updated result.
*/
async deleteMetadata(regionId, key) {
const validatedId = this.validateId_(regionId)
if (typeof key !== "string") {
throw new MedusaError(
MedusaError.Types.INVALID_ARGUMENT,
"Key type is invalid. Metadata keys must be strings"
)
}
const keyPath = `metadata.${key}`
return this.regionModel_
.updateOne({ _id: validatedId }, { $unset: { [keyPath]: "" } })
.catch(err => {
throw new MedusaError(MedusaError.Types.DB_ERROR, err.message)
})
}
}
export default RegionService