From 63a2f126c52562817a455e7de6eeb345e9c6eb33 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Thu, 2 Jul 2020 18:04:33 +0200 Subject: [PATCH] Adds default shipping profile --- .../routes/admin/products/create-product.js | 6 +++++ .../create-shipping-option.js | 7 ++++++ packages/medusa/src/loaders/defaults.js | 7 ++++++ packages/medusa/src/loaders/index.js | 6 ++--- packages/medusa/src/loaders/store.js | 7 ------ .../services/__mocks__/shipping-profile.js | 3 +++ .../medusa/src/services/shipping-profile.js | 23 ++++++++++++++++++- 7 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 packages/medusa/src/loaders/defaults.js delete mode 100644 packages/medusa/src/loaders/store.js diff --git a/packages/medusa/src/api/routes/admin/products/create-product.js b/packages/medusa/src/api/routes/admin/products/create-product.js index 5c5db62821..0c1400fd00 100644 --- a/packages/medusa/src/api/routes/admin/products/create-product.js +++ b/packages/medusa/src/api/routes/admin/products/create-product.js @@ -43,6 +43,8 @@ export default async (req, res) => { delete value.variants const productService = req.scope.resolve("productService") + const shippingProfileService = req.scope.resolve("shippingProfileService") + let newProduct = await productService.createDraft(value) if (variants) { @@ -64,6 +66,10 @@ export default async (req, res) => { ) } + // Add to default shipping profile + const { _id } = await shippingProfileService.retrieveDefault() + await shippingProfileService.addProduct(_id, newProduct._id) + newProduct = await productService.decorate(newProduct, [ "title", "description", diff --git a/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.js b/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.js index ba8ad80466..1e3e3f0d3e 100644 --- a/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.js +++ b/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.js @@ -27,10 +27,17 @@ export default async (req, res) => { try { const optionService = req.scope.resolve("shippingOptionService") + const shippingProfileService = req.scope.resolve("shippingProfileService") + const data = await optionService.create(value) + // Add to default shipping profile + const { _id } = await shippingProfileService.retrieveDefault() + await shippingProfileService.addProduct(_id, data._id) + res.status(200).json({ shipping_option: data }) } catch (err) { + console.log(err) throw err } } diff --git a/packages/medusa/src/loaders/defaults.js b/packages/medusa/src/loaders/defaults.js new file mode 100644 index 0000000000..b0a8b0e399 --- /dev/null +++ b/packages/medusa/src/loaders/defaults.js @@ -0,0 +1,7 @@ +export default async ({ container }) => { + const storeService = container.resolve("storeService") + const profileService = container.resolve("shippingProfileService") + + await storeService.create() + await profileService.createDefault() +} diff --git a/packages/medusa/src/loaders/index.js b/packages/medusa/src/loaders/index.js index 419bf74ba2..e00ffbdce1 100644 --- a/packages/medusa/src/loaders/index.js +++ b/packages/medusa/src/loaders/index.js @@ -6,7 +6,7 @@ import modelsLoader from "./models" import servicesLoader from "./services" import passportLoader from "./passport" import pluginsLoader from "./plugins" -import storeLoader from "./store" +import defaultsLoader from "./defaults" import Logger from "./logger" export default async ({ directory: rootDirectory, expressApp }) => { @@ -58,8 +58,8 @@ export default async ({ directory: rootDirectory, expressApp }) => { await apiLoader({ container, rootDirectory, app: expressApp }) Logger.info("API initialized") - await storeLoader({ container }) - Logger.info("Store initialized") + await defaultsLoader({ container }) + Logger.info("Defaults initialized") return { container, dbConnection, app: expressApp } } diff --git a/packages/medusa/src/loaders/store.js b/packages/medusa/src/loaders/store.js deleted file mode 100644 index 86a4993905..0000000000 --- a/packages/medusa/src/loaders/store.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Registers all services in the services directory - */ -export default ({ container }) => { - const storeService = container.resolve("storeService") - return storeService.create() -} diff --git a/packages/medusa/src/services/__mocks__/shipping-profile.js b/packages/medusa/src/services/__mocks__/shipping-profile.js index 1751b6dff1..c94b917535 100644 --- a/packages/medusa/src/services/__mocks__/shipping-profile.js +++ b/packages/medusa/src/services/__mocks__/shipping-profile.js @@ -31,6 +31,9 @@ export const ShippingProfileServiceMock = { } return Promise.resolve() }), + retrieveDefault: jest.fn().mockImplementation(data => { + return Promise.resolve({ _id: IdMap.getId("default_shipping_profile") }) + }), list: jest.fn().mockImplementation(selector => { if (!selector) { return Promise.resolve([]) diff --git a/packages/medusa/src/services/shipping-profile.js b/packages/medusa/src/services/shipping-profile.js index 5581e946de..66c37b9954 100644 --- a/packages/medusa/src/services/shipping-profile.js +++ b/packages/medusa/src/services/shipping-profile.js @@ -33,7 +33,7 @@ class ShippingProfileService extends BaseService { */ validateId_(rawId) { const schema = Validator.objectId() - const { value, error } = schema.validate(rawId) + const { value, error } = schema.validate(rawId.toString()) if (error) { throw new MedusaError( MedusaError.Types.INVALID_ARGUMENT, @@ -76,6 +76,27 @@ class ShippingProfileService extends BaseService { return profile } + async retrieveDefault() { + return await this.profileModel_ + .findOne({ name: "default_shipping_profile" }) + .catch(err => { + throw new MedusaError(MedusaError.Types.DB_ERROR, err.message) + }) + } + + /** + * Creates a default shipping profile, if this does not already exist. + * @return {Promise} the shipping profile + */ + async createDefault() { + const profile = await this.retrieveDefault() + if (!profile) { + return this.profileModel_.create({ name: "default_shipping_profile" }) + } + + return profile + } + /** * Creates a new shipping profile. * @param {ShippingProfile} profile - the shipping profile to create from