From f9b232da54e5292617f2a6694ce65e29733c8578 Mon Sep 17 00:00:00 2001 From: Sebastian Rindom Date: Mon, 6 Jul 2020 11:52:16 +0200 Subject: [PATCH] Defaults --- .../src/fulfillment-service.js | 5 ++++- .../medusa-interfaces/src/payment-service.js | 4 ++++ .../create-shipping-option.js | 2 +- .../shipping-options/list-shipping-options.js | 7 +++++-- packages/medusa/src/loaders/defaults.js | 21 ++++++++++++++++++- packages/medusa/src/models/store.js | 2 ++ packages/medusa/src/services/region.js | 2 +- .../medusa/src/services/shipping-option.js | 8 ++++++- packages/medusa/src/services/store.js | 8 ++++--- 9 files changed, 49 insertions(+), 10 deletions(-) diff --git a/packages/medusa-interfaces/src/fulfillment-service.js b/packages/medusa-interfaces/src/fulfillment-service.js index 9081a86f49..9de1b03357 100644 --- a/packages/medusa-interfaces/src/fulfillment-service.js +++ b/packages/medusa-interfaces/src/fulfillment-service.js @@ -11,9 +11,12 @@ class BaseFulfillmentService extends BaseService { super() } - getFulfillmentOptions() { + getIdentifier() { + return this.constructor.identifier } + getFulfillmentOptions() {} + validateFulfillmentData(data, cart) { throw Error("validateFulfillmentData must be overridden by the child class") } diff --git a/packages/medusa-interfaces/src/payment-service.js b/packages/medusa-interfaces/src/payment-service.js index e998d02d22..01a39eb2ad 100644 --- a/packages/medusa-interfaces/src/payment-service.js +++ b/packages/medusa-interfaces/src/payment-service.js @@ -11,6 +11,10 @@ class BasePaymentService extends BaseService { super() } + getIdentifier() { + return this.constructor.identifier + } + /** * Used to create a payment to be processed with the service's payment gateway. * @param cart {object} - the cart that the payment should cover. 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 fa5fb1123a..53ffd51d81 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 @@ -5,7 +5,7 @@ export default async (req, res) => { name: Validator.string().required(), region_id: Validator.string().required(), provider_id: Validator.string().required(), - profile_id: Validator.string().required(), + profile_id: Validator.string(), data: Validator.object().required(), price: Validator.object() .keys({ diff --git a/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.js b/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.js index ccfc54c440..51f1e455ba 100644 --- a/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.js +++ b/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.js @@ -1,8 +1,11 @@ +import _ from "lodash" + export default async (req, res) => { - const { optionId } = req.params try { + const query = _.pick(req.query, ["region_id", "region_id[]"]) + const optionService = req.scope.resolve("shippingOptionService") - const data = await optionService.list() + const data = await optionService.list(query) res.status(200).json({ shipping_options: data }) } catch (err) { diff --git a/packages/medusa/src/loaders/defaults.js b/packages/medusa/src/loaders/defaults.js index b0a8b0e399..e5c3f5badf 100644 --- a/packages/medusa/src/loaders/defaults.js +++ b/packages/medusa/src/loaders/defaults.js @@ -2,6 +2,25 @@ export default async ({ container }) => { const storeService = container.resolve("storeService") const profileService = container.resolve("shippingProfileService") - await storeService.create() + let payIds + try { + const payProviders = container.resolve("paymentProviders") + payIds = payProviders.map(p => p.getIdentifier()) + } catch (e) { + payIds = [] + } + + let fulfilIds + try { + const fulfilProviders = container.resolve("fulfillmentProviders") + fulfilIds = fulfilProviders.map(p => p.getIdentifier()) + } catch (e) { + fulfilIds = [] + } + + await storeService.create({ + fulfillment_providers: fulfilIds, + payment_providers: payIds, + }) await profileService.createDefault() } diff --git a/packages/medusa/src/models/store.js b/packages/medusa/src/models/store.js index 28fe5b40a1..07a4ca0b5c 100644 --- a/packages/medusa/src/models/store.js +++ b/packages/medusa/src/models/store.js @@ -7,6 +7,8 @@ class StoreModel extends BaseModel { name: { type: String, required: true, default: "Medusa Store" }, default_currency: { type: String, required: true, default: "USD" }, currencies: { type: [String], default: [] }, + payment_providers: { type: [String], default: [] }, + fulfillment_providers: { type: [String], default: [] }, metadata: { type: mongoose.Schema.Types.Mixed, default: {} }, } } diff --git a/packages/medusa/src/services/region.js b/packages/medusa/src/services/region.js index 49d6eebe71..db33c437c3 100644 --- a/packages/medusa/src/services/region.js +++ b/packages/medusa/src/services/region.js @@ -154,7 +154,7 @@ class RegionService extends BaseService { } const existing = await this.regionModel_.findOne({ countries: countryCode }) - if (existing && existing._id !== id) { + if (existing && !existing._id.equals(id)) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, `${country.name} already exists in ${existing.name}, delete it in that region before adding it` diff --git a/packages/medusa/src/services/shipping-option.js b/packages/medusa/src/services/shipping-option.js index 443f40c7be..ec41f85e9c 100644 --- a/packages/medusa/src/services/shipping-option.js +++ b/packages/medusa/src/services/shipping-option.js @@ -79,7 +79,13 @@ class ShippingOptionService extends BaseService { * @return {Promise} the result of the find operation */ list(selector) { - return this.optionModel_.find(selector) + const query = {} + + if (selector.region_id !== undefined) { + query.region_id = selector.region_id + } + + return this.optionModel_.find(query) } /** diff --git a/packages/medusa/src/services/store.js b/packages/medusa/src/services/store.js index 5bf7860860..9f63185dfe 100644 --- a/packages/medusa/src/services/store.js +++ b/packages/medusa/src/services/store.js @@ -43,10 +43,12 @@ class StoreService extends BaseService { * Creates a store if it doesn't already exist. * @return {Promise} the store. */ - async create() { - const store = await this.retrieve() + async create(providers) { + let store = await this.retrieve() if (!store) { - return this.storeModel_.create({}) + return this.storeModel_.create(providers) + } else { + store = await this.update(providers) } return store