diff --git a/packages/medusa-core-utils/.gitignore b/packages/medusa-core-utils/.gitignore index 849ddff3b7..1eae0cf670 100644 --- a/packages/medusa-core-utils/.gitignore +++ b/packages/medusa-core-utils/.gitignore @@ -1 +1,2 @@ dist/ +node_modules/ diff --git a/packages/medusa-core-utils/package.json b/packages/medusa-core-utils/package.json index 10275901a3..1ec4f62a90 100644 --- a/packages/medusa-core-utils/package.json +++ b/packages/medusa-core-utils/package.json @@ -21,7 +21,6 @@ "@babel/plugin-proposal-class-properties": "^7.7.4", "@babel/plugin-transform-runtime": "^7.7.6", "@babel/preset-env": "^7.7.5", - "client-sessions": "^0.8.0", "cross-env": "^5.2.1" }, "dependencies": { diff --git a/packages/medusa-interfaces/.babelrc b/packages/medusa-interfaces/.babelrc new file mode 100644 index 0000000000..b48db12268 --- /dev/null +++ b/packages/medusa-interfaces/.babelrc @@ -0,0 +1,9 @@ +{ + "plugins": ["@babel/plugin-proposal-class-properties"], + "presets": ["@babel/preset-env"], + "env": { + "test": { + "plugins": ["@babel/plugin-transform-runtime"] + } + } +} diff --git a/packages/medusa-interfaces/.gitignore b/packages/medusa-interfaces/.gitignore new file mode 100644 index 0000000000..aacc207d2e --- /dev/null +++ b/packages/medusa-interfaces/.gitignore @@ -0,0 +1,7 @@ +dist/ +node_modules/ +.DS_store +.env* +/*.js +!index.js +yarn.lock diff --git a/packages/medusa-interfaces/package.json b/packages/medusa-interfaces/package.json new file mode 100644 index 0000000000..fb958c3589 --- /dev/null +++ b/packages/medusa-interfaces/package.json @@ -0,0 +1,29 @@ +{ + "name": "medusa-interfaces", + "version": "1.0.0", + "description": "Core interfaces for Medusa", + "main": "dist/index.js", + "repository": { + "type": "git", + "url": "https://github.com/srindom/medusa", + "directory": "packages/medusa-interfaces" + }, + "scripts": { + "build": "babel src --out-dir dist/ --ignore **/__tests__", + "prepare": "cross-env NODE_ENV=production npm run build", + "watch": "babel -w src --out-dir dist/ --ignore **/__tests__" + }, + "author": "Sebastian Rindom", + "license": "AGPL-3.0-or-later", + "devDependencies": { + "@babel/cli": "^7.7.5", + "@babel/core": "^7.7.5", + "@babel/plugin-proposal-class-properties": "^7.7.4", + "@babel/plugin-transform-runtime": "^7.7.6", + "@babel/preset-env": "^7.7.5", + "cross-env": "^5.2.1" + }, + "dependencies": { + "mongoose": "^5.8.0" + } +} diff --git a/packages/medusa/src/interfaces/base-model.js b/packages/medusa-interfaces/src/base-model.js similarity index 100% rename from packages/medusa/src/interfaces/base-model.js rename to packages/medusa-interfaces/src/base-model.js diff --git a/packages/medusa/src/interfaces/base-service.js b/packages/medusa-interfaces/src/base-service.js similarity index 100% rename from packages/medusa/src/interfaces/base-service.js rename to packages/medusa-interfaces/src/base-service.js diff --git a/packages/medusa/src/interfaces/index.js b/packages/medusa-interfaces/src/index.js similarity index 63% rename from packages/medusa/src/interfaces/index.js rename to packages/medusa-interfaces/src/index.js index cd914e4644..2da630d5c2 100644 --- a/packages/medusa/src/interfaces/index.js +++ b/packages/medusa-interfaces/src/index.js @@ -1,2 +1,3 @@ export { default as BaseService } from "./base-service" export { default as BaseModel } from "./base-model" +export { default as PaymentService } from "./payment-service" diff --git a/packages/medusa/src/interfaces/payment-service.js b/packages/medusa-interfaces/src/payment-service.js similarity index 100% rename from packages/medusa/src/interfaces/payment-service.js rename to packages/medusa-interfaces/src/payment-service.js diff --git a/packages/medusa-payment-stripe/package.json b/packages/medusa-payment-stripe/package.json index 2f4a8e5c8f..bc73884575 100644 --- a/packages/medusa-payment-stripe/package.json +++ b/packages/medusa-payment-stripe/package.json @@ -25,6 +25,7 @@ "watch": "babel -w src --out-dir . --ignore **/__tests__" }, "dependencies": { - "@babel/runtime": "^7.7.6" + "@babel/runtime": "^7.7.6", + "medusa-interfaces": "^1.0.0" } } diff --git a/packages/medusa-payment-stripe/src/services/stripe-provider.js b/packages/medusa-payment-stripe/src/services/stripe-provider.js index c1c6b3f479..b28309a7a3 100644 --- a/packages/medusa-payment-stripe/src/services/stripe-provider.js +++ b/packages/medusa-payment-stripe/src/services/stripe-provider.js @@ -1,5 +1,5 @@ import _ from "lodash" -import PaymentService from "../../../src/interfaces/payment-service" +import { PaymentService } from "medusa-interfaces" class StripeProviderService extends PaymentService { static identifier = "stripe" diff --git a/packages/medusa/package.json b/packages/medusa/package.json index 6ec2ece220..007f3e285a 100644 --- a/packages/medusa/package.json +++ b/packages/medusa/package.json @@ -49,6 +49,7 @@ "joi-objectid": "^3.0.1", "jsonwebtoken": "^8.5.1", "medusa-core-utils": "^1.0.0", + "medusa-interfaces": "^1.0.0", "mongoose": "^5.8.0", "morgan": "^1.9.1", "passport": "^0.4.0", diff --git a/packages/medusa/src/loaders/plugins.js b/packages/medusa/src/loaders/plugins.js index 0192d2f863..6d03051820 100644 --- a/packages/medusa/src/loaders/plugins.js +++ b/packages/medusa/src/loaders/plugins.js @@ -1,13 +1,11 @@ import glob from "glob" +import { BaseModel, BaseService, PaymentService } from "medusa-interfaces" import _ from "lodash" import path from "path" import fs from "fs" import { asFunction } from "awilix" import { sync as existsSync } from "fs-exists-cached" import { plugins } from "../../medusa-config.js" -import PaymentService from "../interfaces/payment-service" -import BaseModel from "../interfaces/base-model" -import BaseService from "../interfaces/base-service" /** * Registers all services in the services directory diff --git a/packages/medusa/src/models/cart.js b/packages/medusa/src/models/cart.js index 6cda42bd2d..719cf18c8d 100644 --- a/packages/medusa/src/models/cart.js +++ b/packages/medusa/src/models/cart.js @@ -1,11 +1,12 @@ /******************************************************************************* - * models/product-variant.js * ******************************************************************************/ import mongoose from "mongoose" -import { BaseModel } from "../interfaces" +import { BaseModel } from "medusa-interfaces" import LineItemSchema from "./schemas/line-item" +import PaymentMethodSchema from "./schemas/payment-method" +import ShippingMethodSchema from "./schemas/shipping-method" import AddressSchema from "./schemas/address" class CartModel extends BaseModel { @@ -13,12 +14,15 @@ class CartModel extends BaseModel { static schema = { email: { type: String }, - billingAddress: { type: AddressSchema }, - shippingAddress: { type: AddressSchema }, - items: { type: [LinetItemSchema], default: [] }, + billing_address: { type: AddressSchema }, + shipping_address: { type: AddressSchema }, + items: { type: [LineItemSchema], default: [] }, region: { type: String, required: true }, - discounts: { type: [String], default: true }, + discounts: { type: [String], default: [] }, customer_id: { type: String }, + payment_method: { type: PaymentMethodSchema }, + shipping_methods: { type: [ShippingMethodSchema] }, + metadata: { type: mongoose.Schema.Types.Mixed, default: {} }, } } diff --git a/packages/medusa/src/models/customer.js b/packages/medusa/src/models/customer.js new file mode 100644 index 0000000000..349d836c7d --- /dev/null +++ b/packages/medusa/src/models/customer.js @@ -0,0 +1,22 @@ +/******************************************************************************* + * + ******************************************************************************/ +import mongoose from "mongoose" +import { BaseModel } from "medusa-interfaces" + +import AddressSchema from "./schemas/address" + +class CustomerModel extends BaseModel { + static modelName = "Customer" + + static schema = { + email: { type: String, required: true, unique: true }, + first_name: { type: String, required: true }, + last_name: { type: String, required: true }, + billingAddress: { type: AddressSchema }, + password_hash: { type: String }, + metadata: { type: mongoose.Schema.Types.Mixed, default: {} }, + } +} + +export default CustomerModel diff --git a/packages/medusa/src/models/order.js b/packages/medusa/src/models/order.js new file mode 100644 index 0000000000..e12bb22ceb --- /dev/null +++ b/packages/medusa/src/models/order.js @@ -0,0 +1,31 @@ +/******************************************************************************* + * + ******************************************************************************/ +import mongoose from "mongoose" +import { BaseModel } from "medusa-interfaces" + +import LineItemSchema from "./schemas/line-item" +import PaymentMethodSchema from "./schemas/payment-method" +import ShippingMethodSchema from "./schemas/shipping-method" +import AddressSchema from "./schemas/address" + +class OrderModel extends BaseModel { + static modelName = "Order" + + static schema = { + canceled: { type: Boolean, default: false }, + archived: { type: Boolean, default: false }, + email: { type: String, required: true }, + billing_address: { type: AddressSchema, required: true }, + shipping_address: { type: AddressSchema, required: true }, + items: { type: [LineItemSchema], required: true }, + region: { type: String, required: true }, + discounts: { type: [String], default: [] }, + customer_id: { type: String, required: true }, + payment_method: { type: PaymentMethodSchema, required: true }, + shipping_methods: { type: [ShippingMethodSchema], required: true }, + metadata: { type: mongoose.Schema.Types.Mixed, default: {} }, + } +} + +export default OrderModel diff --git a/packages/medusa/src/models/product-variant.js b/packages/medusa/src/models/product-variant.js index 5a1f1cfe28..a18561bd07 100644 --- a/packages/medusa/src/models/product-variant.js +++ b/packages/medusa/src/models/product-variant.js @@ -3,7 +3,7 @@ * ******************************************************************************/ import mongoose from "mongoose" -import { BaseModel } from "../interfaces" +import { BaseModel } from "medusa-interfaces" import MoneyAmountSchema from "./schemas/money-amount" import OptionValueSchema from "./schemas/option-value" diff --git a/packages/medusa/src/models/product.js b/packages/medusa/src/models/product.js index 568cb9b095..cc1cf31a64 100644 --- a/packages/medusa/src/models/product.js +++ b/packages/medusa/src/models/product.js @@ -3,7 +3,7 @@ * ******************************************************************************/ import mongoose from "mongoose" -import { BaseModel } from "../interfaces" +import { BaseModel } from "medusa-interfaces" import OptionSchema from "./schemas/option" diff --git a/packages/medusa/src/models/schemas/line-item.js b/packages/medusa/src/models/schemas/line-item.js index d9ca9be0eb..124426659a 100644 --- a/packages/medusa/src/models/schemas/line-item.js +++ b/packages/medusa/src/models/schemas/line-item.js @@ -11,6 +11,7 @@ export default new mongoose.Schema({ // mongoose doesn't allow multi-type validation but this field allows both // an object containing: // { + // unit_price: (MoneyAmount), // variant: (ProductVariantSchema), // product: (ProductSchema) // } @@ -18,11 +19,17 @@ export default new mongoose.Schema({ // and and array containing: // [ // { + // unit_price: (MoneyAmount), // variant: (ProductVariantSchema), // product: (ProductSchema) // } // ] // validation is done in the cart service. + // + // The unit_price field can be used to override the default pricing mechanism. + // By default the price will be set based on the variant(s) in content, + // however, to allow line items with variable pricing e.g. limited sales, gift + // cards etc. the unit_price field is provided to give more granular control. content: { type: mongoose.Schema.Types.Mixed, required: true }, quantity: { type: Number, required: true }, metadata: { type: mongoose.Schema.Types.Mixed, default: {} }, diff --git a/packages/medusa/src/models/schemas/payment-method.js b/packages/medusa/src/models/schemas/payment-method.js new file mode 100644 index 0000000000..92963b831b --- /dev/null +++ b/packages/medusa/src/models/schemas/payment-method.js @@ -0,0 +1,9 @@ +/******************************************************************************* + * + ******************************************************************************/ +import mongoose from "mongoose" + +export default new mongoose.Schema({ + provider_id: { type: String, required: true }, + data: { type: mongoose.Schema.Types.Mixed, default: {} }, +}) diff --git a/packages/medusa/src/models/schemas/shipping-method.js b/packages/medusa/src/models/schemas/shipping-method.js new file mode 100644 index 0000000000..92963b831b --- /dev/null +++ b/packages/medusa/src/models/schemas/shipping-method.js @@ -0,0 +1,9 @@ +/******************************************************************************* + * + ******************************************************************************/ +import mongoose from "mongoose" + +export default new mongoose.Schema({ + provider_id: { type: String, required: true }, + data: { type: mongoose.Schema.Types.Mixed, default: {} }, +}) diff --git a/packages/medusa/src/models/user.js b/packages/medusa/src/models/user.js index a951ae9386..12ad7d1b6f 100644 --- a/packages/medusa/src/models/user.js +++ b/packages/medusa/src/models/user.js @@ -2,7 +2,7 @@ * models/user.js * ******************************************************************************/ -import { BaseModel } from "../interfaces" +import { BaseModel } from "medusa-interfaces" class UserModel extends BaseModel { static modelName = "User" diff --git a/packages/medusa/src/services/auth.js b/packages/medusa/src/services/auth.js index 01f67656df..68c3eac135 100644 --- a/packages/medusa/src/services/auth.js +++ b/packages/medusa/src/services/auth.js @@ -1,5 +1,5 @@ import bcrypt from "bcrypt" -import { BaseService } from "../interfaces" +import { BaseService } from "medusa-interfaces" /** * Can authenticate a user based on email password combination diff --git a/packages/medusa/src/services/cart.js b/packages/medusa/src/services/cart.js index 8163527d05..830bef1df4 100644 --- a/packages/medusa/src/services/cart.js +++ b/packages/medusa/src/services/cart.js @@ -1,7 +1,7 @@ import mongoose from "mongoose" import _ from "lodash" import { Validator, MedusaError } from "medusa-core-utils" -import { BaseService } from "../interfaces" +import { BaseService } from "medusa-interfaces" /** * Provides layer to manipulate carts. diff --git a/packages/medusa/src/services/product-variant.js b/packages/medusa/src/services/product-variant.js index a34c5d57a3..fb1dc77f85 100644 --- a/packages/medusa/src/services/product-variant.js +++ b/packages/medusa/src/services/product-variant.js @@ -1,5 +1,5 @@ import _ from "lodash" -import { BaseService } from "../interfaces" +import { BaseService } from "medusa-interfaces" import { Validator, MedusaError } from "medusa-core-utils" /** diff --git a/packages/medusa/src/services/product.js b/packages/medusa/src/services/product.js index e5ec539b3b..c59ac5063b 100644 --- a/packages/medusa/src/services/product.js +++ b/packages/medusa/src/services/product.js @@ -1,7 +1,7 @@ import mongoose from "mongoose" import _ from "lodash" import { Validator, MedusaError } from "medusa-core-utils" -import { BaseService } from "../interfaces" +import { BaseService } from "medusa-interfaces" /** * Provides layer to manipulate products.