From 44c7177e43b4c21dfbaa73e398414b1c8f3f9c8a Mon Sep 17 00:00:00 2001 From: Sebastian Rindom Date: Tue, 14 Jul 2020 08:10:09 +0200 Subject: [PATCH] Automatic stripe customers; address --- .../src/services/stripe-provider.js | 2 +- .../medusa/src/api/routes/store/carts/create-cart.js | 3 +++ .../medusa/src/api/routes/store/carts/get-cart.js | 6 +++++- packages/medusa/src/models/schemas/address.js | 12 ++++++------ packages/medusa/src/services/cart.js | 6 +----- packages/medusa/src/services/customer.js | 2 +- packages/medusa/src/subscribers/order.js | 11 +++++++---- 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/packages/medusa-payment-stripe/src/services/stripe-provider.js b/packages/medusa-payment-stripe/src/services/stripe-provider.js index 3ef693116d..c4e575c1a1 100644 --- a/packages/medusa-payment-stripe/src/services/stripe-provider.js +++ b/packages/medusa-payment-stripe/src/services/stripe-provider.js @@ -119,7 +119,7 @@ class StripeProviderService extends PaymentService { customer: stripeCustomerId, amount: amount * 100, // Stripe amount is in cents currency: currency_code, - setup_future_usage: "on-session", + setup_future_usage: "on_session", capture_method: "manual", metadata: { cart_id: `${cart._id}` }, }) diff --git a/packages/medusa/src/api/routes/store/carts/create-cart.js b/packages/medusa/src/api/routes/store/carts/create-cart.js index 46c263367f..faced103d9 100644 --- a/packages/medusa/src/api/routes/store/carts/create-cart.js +++ b/packages/medusa/src/api/routes/store/carts/create-cart.js @@ -29,15 +29,18 @@ export default async (req, res) => { } let customerId = "" + let email = "" if (req.user && req.user.customer_id) { const customerService = req.scope.resolve("customerService") const customer = await customerService.retrieve(req.user.customer_id) customerId = customer._id + email = customer.email } let cart = await cartService.create({ region_id: regionId, customer_id: customerId, + email, }) if (value.items) { diff --git a/packages/medusa/src/api/routes/store/carts/get-cart.js b/packages/medusa/src/api/routes/store/carts/get-cart.js index 639cee6efc..e91092db20 100644 --- a/packages/medusa/src/api/routes/store/carts/get-cart.js +++ b/packages/medusa/src/api/routes/store/carts/get-cart.js @@ -6,7 +6,11 @@ export default async (req, res) => { // If there is a logged in user add the user to the cart if (req.user && req.user.customer_id) { - if (!cart.customer_id || cart.customer_id !== req.user.customer_id) { + if ( + !cart.customer_id || + !cart.email || + cart.customer_id !== req.user.customer_id + ) { const customerService = req.scope.resolve("customerService") const customer = await customerService.retrieve(req.user.customer_id) diff --git a/packages/medusa/src/models/schemas/address.js b/packages/medusa/src/models/schemas/address.js index c79625c696..1d804bc816 100644 --- a/packages/medusa/src/models/schemas/address.js +++ b/packages/medusa/src/models/schemas/address.js @@ -4,14 +4,14 @@ import mongoose from "mongoose" export default new mongoose.Schema({ - first_name: { type: String, required: true }, - last_name: { type: String, required: true }, - address_1: { type: String, required: true }, + first_name: { type: String }, + last_name: { type: String }, + address_1: { type: String }, address_2: { type: String }, - city: { type: String, required: true }, - country_code: { type: String, required: true }, + city: { type: String }, + country_code: { type: String }, province: { type: String }, - postal_code: { type: String, required: true }, + postal_code: { type: String }, phone: { type: String }, metadata: { type: mongoose.Schema.Types.Mixed, default: {} }, }) diff --git a/packages/medusa/src/services/cart.js b/packages/medusa/src/services/cart.js index a716ef11b7..c4917ec8c1 100644 --- a/packages/medusa/src/services/cart.js +++ b/packages/medusa/src/services/cart.js @@ -211,11 +211,7 @@ class CartService extends BaseService { if (region.countries.length === 1) { // Preselect the country if the region only has 1 data.shipping_address = { - country_code: countries[0], - } - - data.billing_address = { - country_code: countries[0], + country_code: region.countries[0], } } diff --git a/packages/medusa/src/services/customer.js b/packages/medusa/src/services/customer.js index 158841cf54..8ed4bb70f3 100644 --- a/packages/medusa/src/services/customer.js +++ b/packages/medusa/src/services/customer.js @@ -259,7 +259,7 @@ class CustomerService extends BaseService { const customer = await this.retrieve(customerId) this.validateBillingAddress_(address) - let shouldAdd = !!customer.shipping_addresses.find( + let shouldAdd = !customer.shipping_addresses.find( a => a.country_code === address.country_code && a.address_1 === address.address_1 && diff --git a/packages/medusa/src/subscribers/order.js b/packages/medusa/src/subscribers/order.js index 5349207d0b..f9689029b3 100644 --- a/packages/medusa/src/subscribers/order.js +++ b/packages/medusa/src/subscribers/order.js @@ -21,10 +21,13 @@ class OrderSubscriber { this.eventBus_.subscribe("order.placed", async order => { await this.customerService_.addOrder(order.customer_id, order._id) - await this.customerService_.addAddress( - order.customer_id, - order.shipping_address - ) + + const address = { + ...order.shipping_address, + } + delete address._id + + await this.customerService_.addAddress(order.customer_id, address) }) this.eventBus_.subscribe("order.placed", async order => {