fix: creates restock functionality
This commit is contained in:
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": [
|
|
||||||
"@babel/plugin-proposal-class-properties",
|
|
||||||
"@babel/plugin-transform-instanceof",
|
|
||||||
"@babel/plugin-transform-classes"
|
|
||||||
],
|
|
||||||
"presets": ["@babel/preset-env"],
|
|
||||||
"env": {
|
|
||||||
"test": {
|
|
||||||
"plugins": ["@babel/plugin-transform-runtime"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
# Change Log
|
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
||||||
|
|
||||||
## [1.1.6](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.1.5...medusa-plugin-twilio-sms@1.1.6) (2021-03-17)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.1.5](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.1.3...medusa-plugin-twilio-sms@1.1.5) (2021-03-17)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.1.4](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.1.3...medusa-plugin-twilio-sms@1.1.4) (2021-03-17)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.1.3](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.1.2...medusa-plugin-twilio-sms@1.1.3) (2021-02-17)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.1.2](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.1.1...medusa-plugin-twilio-sms@1.1.2) (2021-02-03)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.1.1](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.1.0...medusa-plugin-twilio-sms@1.1.1) (2021-01-27)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [1.1.0](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.0.12...medusa-plugin-twilio-sms@1.1.0) (2021-01-26)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.0.12](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.0.11...medusa-plugin-twilio-sms@1.0.12) (2020-12-17)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.0.11](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.0.10...medusa-plugin-twilio-sms@1.0.11) (2020-11-24)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.0.10](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.0.9...medusa-plugin-twilio-sms@1.0.10) (2020-10-19)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.0.9](https://github.com/medusajs/medusa/compare/medusa-plugin-twilio-sms@1.0.8...medusa-plugin-twilio-sms@1.0.9) (2020-09-09)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package medusa-plugin-twilio-sms
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 1.0.8 (2020-09-09)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **plugins:** Adds Twilio SMS plugin ([35a91ae](https://github.com/medusajs/medusa/commit/35a91ae6a179e750b77df97f46a6b88d6b45819d))
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# medusa-plugin-sendgrid
|
# medusa-plugin-restock-notification
|
||||||
|
|
||||||
Twilio SMS / Messaging plugin.
|
Twilio SMS / Messaging plugin.
|
||||||
|
|
||||||
|
|||||||
+86
@@ -0,0 +1,86 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.restockNotification1617703530229 = void 0;
|
||||||
|
|
||||||
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
||||||
|
|
||||||
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
||||||
|
|
||||||
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
||||||
|
|
||||||
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
||||||
|
|
||||||
|
var restockNotification1617703530229 = /*#__PURE__*/function () {
|
||||||
|
function restockNotification1617703530229() {
|
||||||
|
(0, _classCallCheck2["default"])(this, restockNotification1617703530229);
|
||||||
|
this.name = "restockNotification1617703530229";
|
||||||
|
}
|
||||||
|
|
||||||
|
(0, _createClass2["default"])(restockNotification1617703530229, [{
|
||||||
|
key: "up",
|
||||||
|
value: function () {
|
||||||
|
var _up = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(queryRunner) {
|
||||||
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
||||||
|
while (1) {
|
||||||
|
switch (_context.prev = _context.next) {
|
||||||
|
case 0:
|
||||||
|
_context.next = 2;
|
||||||
|
return queryRunner.query("CREATE TABLE \"restock_notification\" (\"variant_id\" character varying NOT NULL, \"emails\" jsonb NOT NULL, \"created_at\" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), \"updated_at\" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), CONSTRAINT \"PK_49181ca04caac807fcec321705a\" PRIMARY KEY (\"variant_id\"))");
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
_context.next = 4;
|
||||||
|
return queryRunner.query("ALTER TABLE \"restock_notification\" ADD CONSTRAINT \"FK_49181ca04caac807fcec321705a\" FOREIGN KEY (\"variant_id\") REFERENCES \"product_variant\"(\"id\") ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
case "end":
|
||||||
|
return _context.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, _callee);
|
||||||
|
}));
|
||||||
|
|
||||||
|
function up(_x) {
|
||||||
|
return _up.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
return up;
|
||||||
|
}()
|
||||||
|
}, {
|
||||||
|
key: "down",
|
||||||
|
value: function () {
|
||||||
|
var _down = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(queryRunner) {
|
||||||
|
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
||||||
|
while (1) {
|
||||||
|
switch (_context2.prev = _context2.next) {
|
||||||
|
case 0:
|
||||||
|
_context2.next = 2;
|
||||||
|
return queryRunner.query("ALTER TABLE \"restock_notification\" DROP CONSTRAINT \"FK_49181ca04caac807fcec321705a\"");
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
_context2.next = 4;
|
||||||
|
return queryRunner.query("DROP TABLE \"restock_notification\"");
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
case "end":
|
||||||
|
return _context2.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, _callee2);
|
||||||
|
}));
|
||||||
|
|
||||||
|
function down(_x2) {
|
||||||
|
return _down.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
return down;
|
||||||
|
}()
|
||||||
|
}]);
|
||||||
|
return restockNotification1617703530229;
|
||||||
|
}();
|
||||||
|
|
||||||
|
exports.restockNotification1617703530229 = restockNotification1617703530229;
|
||||||
@@ -18,25 +18,28 @@
|
|||||||
"@babel/plugin-transform-instanceof": "^7.8.3",
|
"@babel/plugin-transform-instanceof": "^7.8.3",
|
||||||
"@babel/plugin-transform-runtime": "^7.7.6",
|
"@babel/plugin-transform-runtime": "^7.7.6",
|
||||||
"@babel/preset-env": "^7.7.5",
|
"@babel/preset-env": "^7.7.5",
|
||||||
|
"@babel/preset-typescript": "^7.13.0",
|
||||||
"@babel/register": "^7.7.4",
|
"@babel/register": "^7.7.4",
|
||||||
"@babel/runtime": "^7.9.6",
|
"@babel/runtime": "^7.9.6",
|
||||||
|
"babel-preset-medusa-package": "^1.1.0",
|
||||||
"cross-env": "^5.2.1",
|
"cross-env": "^5.2.1",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^6.8.0",
|
||||||
"jest": "^25.5.2",
|
"jest": "^25.5.2",
|
||||||
"medusa-test-utils": "^1.1.6",
|
"medusa-test-utils": "^1.1.6",
|
||||||
|
"pg": "^8.5.1",
|
||||||
"ulid": "^2.3.0"
|
"ulid": "^2.3.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "babel src -d .",
|
"build": "babel src -d . --ignore **/__tests__ --extensions \".ts,.js\"",
|
||||||
"prepare": "cross-env NODE_ENV=production npm run build",
|
"prepare": "cross-env NODE_ENV=production npm run build",
|
||||||
"watch": "babel -w src --out-dir . --ignore **/__tests__",
|
"watch": "babel -w src --out-dir . --ignore **/__tests__",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@medusajs/medusa": "1.x",
|
|
||||||
"medusa-interfaces": "1.x"
|
"medusa-interfaces": "1.x"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@medusajs/medusa": "^1.1.17",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"medusa-core-utils": "^1.1.3"
|
"medusa-core-utils": "^1.1.3"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import { Router } from "express"
|
||||||
|
import routes from "./routes"
|
||||||
|
|
||||||
|
export default (container) => {
|
||||||
|
const app = Router()
|
||||||
|
|
||||||
|
routes(app)
|
||||||
|
|
||||||
|
return app
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default (fn) => (...args) => fn(...args).catch(args[2])
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import { default as wrap } from "./await-middleware"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
wrap,
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import { Validator, MedusaError } from "medusa-core-utils"
|
||||||
|
|
||||||
|
export default async (req, res) => {
|
||||||
|
const { variant_id } = req.parmas
|
||||||
|
|
||||||
|
const schema = Validator.object().keys({
|
||||||
|
email: Validator.string().required(),
|
||||||
|
})
|
||||||
|
|
||||||
|
const { value, error } = schema.validate(req.body)
|
||||||
|
if (error) {
|
||||||
|
throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details)
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const restockNotificationService = req.scope.resolve(
|
||||||
|
"restockNotificationService"
|
||||||
|
)
|
||||||
|
await restockNotificationService.addEmail(variant_id, value.email)
|
||||||
|
res.sendStatus(200)
|
||||||
|
} catch (err) {
|
||||||
|
res.sendStatus(400).json({ message: err.message })
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { Router } from "express"
|
||||||
|
import bodyParser from "body-parser"
|
||||||
|
import middlewares from "../middleware"
|
||||||
|
|
||||||
|
const route = Router()
|
||||||
|
|
||||||
|
export default (app) => {
|
||||||
|
app.use("/restock-notifications", route)
|
||||||
|
|
||||||
|
route.post(
|
||||||
|
"/variants/:variant_id",
|
||||||
|
bodyParser.raw({ type: "application/json" }),
|
||||||
|
middlewares.wrap(require("./add-email").default)
|
||||||
|
)
|
||||||
|
return app
|
||||||
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||||
|
|
||||||
|
export class restockNotification1617703530229 implements MigrationInterface {
|
||||||
|
name = "restockNotification1617703530229"
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`CREATE TABLE "restock_notification" ("variant_id" character varying NOT NULL, "emails" jsonb NOT NULL, "created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), CONSTRAINT "PK_49181ca04caac807fcec321705a" PRIMARY KEY ("variant_id"))`
|
||||||
|
)
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "restock_notification" ADD CONSTRAINT "FK_49181ca04caac807fcec321705a" FOREIGN KEY ("variant_id") REFERENCES "product_variant"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(
|
||||||
|
`ALTER TABLE "restock_notification" DROP CONSTRAINT "FK_49181ca04caac807fcec321705a"`
|
||||||
|
)
|
||||||
|
await queryRunner.query(`DROP TABLE "restock_notification"`)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,10 @@
|
|||||||
import { MedusaError } from "medusa-core-utils"
|
import { MedusaError } from "medusa-core-utils"
|
||||||
import { BaseService } from "medusa-interfaces"
|
import { BaseService } from "medusa-interfaces"
|
||||||
|
|
||||||
|
import { RestockNotification } from "../models/restock-notification"
|
||||||
|
|
||||||
class RestockNotificationService extends BaseService {
|
class RestockNotificationService extends BaseService {
|
||||||
constructor(
|
constructor({ manager, eventBusService, productVariantService }, options) {
|
||||||
{
|
|
||||||
manager,
|
|
||||||
eventBusService,
|
|
||||||
productVariantService,
|
|
||||||
restockNotificationRepository,
|
|
||||||
},
|
|
||||||
options
|
|
||||||
) {
|
|
||||||
super()
|
super()
|
||||||
|
|
||||||
this.manager_ = manager
|
this.manager_ = manager
|
||||||
@@ -19,23 +13,17 @@ class RestockNotificationService extends BaseService {
|
|||||||
|
|
||||||
this.productVariantService_ = productVariantService
|
this.productVariantService_ = productVariantService
|
||||||
|
|
||||||
this.restockNotificationRepo_ = restockNotificationRepository
|
|
||||||
|
|
||||||
this.eventBus_ = eventBusService
|
this.eventBus_ = eventBusService
|
||||||
}
|
}
|
||||||
|
|
||||||
async retrieve(variantId) {
|
async retrieve(variantId) {
|
||||||
const restockRepo = this.manager_.getCustomRepository(
|
const restockRepo = this.manager_.getRepository(RestockNotification)
|
||||||
this.restockNotificationRepo_
|
|
||||||
)
|
|
||||||
return await restockRepo.findOne({ where: { variant_id: variantId } })
|
return await restockRepo.findOne({ where: { variant_id: variantId } })
|
||||||
}
|
}
|
||||||
|
|
||||||
async addEmail(variantId, email) {
|
async addEmail(variantId, email) {
|
||||||
return this.atomicPhase_(async (manager) => {
|
return this.atomicPhase_(async (manager) => {
|
||||||
const restockRepo = manager.getCustomRepository(
|
const restockRepo = manager.getRepository(RestockNotification)
|
||||||
this.restockNotificationRepo_
|
|
||||||
)
|
|
||||||
const existing = await this.retrieve(variantId)
|
const existing = await this.retrieve(variantId)
|
||||||
|
|
||||||
if (existing) {
|
if (existing) {
|
||||||
@@ -66,6 +54,13 @@ class RestockNotificationService extends BaseService {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async delete(variantId) {
|
||||||
|
return this.atomicPhase_(async (manager) => {
|
||||||
|
const restockRepo = manager.getRepository(RestockNotification)
|
||||||
|
return restockRepo.delete(variantId)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
async triggerRestock(variantId) {
|
async triggerRestock(variantId) {
|
||||||
return this.atomicPhase_(async (manager) => {
|
return this.atomicPhase_(async (manager) => {
|
||||||
const existing = await this.retrieve(variantId)
|
const existing = await this.retrieve(variantId)
|
||||||
@@ -73,7 +68,13 @@ class RestockNotificationService extends BaseService {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const variant = await this.productVariantService_.retrieve(variantId)
|
||||||
|
if (variant.inventory_quantity > 0) {
|
||||||
|
await eventBus_
|
||||||
|
.withTransaction(manager)
|
||||||
|
.emit("restock_notification.restocked")
|
||||||
|
await this.delete(variantId)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,81 +1,19 @@
|
|||||||
class VariantSubscriber {
|
class VariantSubscriber {
|
||||||
constructor({
|
constructor({ eventBusService, restockNotificationService }) {
|
||||||
eventBusService,
|
|
||||||
restockNotificationService,
|
|
||||||
productVariantService,
|
|
||||||
}) {
|
|
||||||
this.restockNotificationService_ = restockNotificationService
|
this.restockNotificationService_ = restockNotificationService
|
||||||
|
|
||||||
eventBusService.subscribe("product_variant.updated", this.handleVariantUpdate)
|
eventBusService.subscribe(
|
||||||
|
"product_variant.updated",
|
||||||
|
this.handleVariantUpdate
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
registerClaim = async (data) => {
|
handleVariantUpdate = async (data) => {
|
||||||
const { id } = data
|
const { id, fields } = data
|
||||||
const fromClaim = await this.claimService_.retrieve(id, {
|
if (fields.includes("inventory_quantity")) {
|
||||||
relations: [
|
return this.restockNotificationService_.triggerRestock(id)
|
||||||
"order",
|
|
||||||
"order.payments",
|
|
||||||
"order.region",
|
|
||||||
"order.claims",
|
|
||||||
"order.discounts",
|
|
||||||
"claim_items",
|
|
||||||
"return_order",
|
|
||||||
"return_order.items",
|
|
||||||
"return_order.shipping_method",
|
|
||||||
"additional_items",
|
|
||||||
"shipping_address",
|
|
||||||
"shipping_methods",
|
|
||||||
],
|
|
||||||
})
|
|
||||||
|
|
||||||
const fromOrder = fromClaim.order
|
|
||||||
|
|
||||||
if (fromClaim.type === "replace") {
|
|
||||||
await this.brightpearlService_.createClaim(fromOrder, fromClaim)
|
|
||||||
} else if (fromClaim.type === "refund") {
|
|
||||||
await this.brightpearlService_.createClaimCredit(fromOrder, fromClaim)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerShipment = async (data) => {
|
|
||||||
const { fulfillment_id } = data
|
|
||||||
const shipment = await this.fulfillmentService_.retrieve(fulfillment_id)
|
|
||||||
const noteId = shipment.metadata.goods_out_note
|
|
||||||
if (noteId) {
|
|
||||||
await this.brightpearlService_.registerGoodsOutTrackingNumber(
|
|
||||||
noteId,
|
|
||||||
shipment
|
|
||||||
)
|
|
||||||
await this.brightpearlService_.registerGoodsOutShipped(noteId, shipment)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registerReturn = async (data) => {
|
|
||||||
const { id, return_id } = data
|
|
||||||
|
|
||||||
const order = await this.orderService_.retrieve(id, {
|
|
||||||
relations: ["region", "payments"],
|
|
||||||
})
|
|
||||||
|
|
||||||
const fromReturn = await this.returnService_.retrieve(return_id, {
|
|
||||||
relations: ["items"],
|
|
||||||
})
|
|
||||||
|
|
||||||
return this.brightpearlService_
|
|
||||||
.createSalesCredit(order, fromReturn)
|
|
||||||
.catch((err) => console.log(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
registerRefund = async (data) => {
|
|
||||||
const { id, refund_id } = data
|
|
||||||
const order = await this.orderService_.retrieve(id, {
|
|
||||||
relations: ["region", "payments"],
|
|
||||||
})
|
|
||||||
const refund = await this.paymentProviderService_.retrieveRefund(refund_id)
|
|
||||||
return this.brightpearlService_
|
|
||||||
.createRefundCredit(order, refund)
|
|
||||||
.catch((err) => console.log(err))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default OrderSubscriber
|
export default VariantSubscriber
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,6 @@
|
|||||||
class OrderSubscriber {
|
class OrderSubscriber {
|
||||||
constructor({
|
constructor({ notificationService }) {
|
||||||
totalsService,
|
|
||||||
orderService,
|
|
||||||
sendgridService,
|
|
||||||
notificationService,
|
|
||||||
fulfillmentService,
|
|
||||||
}) {
|
|
||||||
this.orderService_ = orderService
|
|
||||||
this.totalsService_ = totalsService
|
|
||||||
this.sendgridService_ = sendgridService
|
|
||||||
this.notificationService_ = notificationService
|
this.notificationService_ = notificationService
|
||||||
this.fulfillmentService_ = fulfillmentService
|
|
||||||
|
|
||||||
this.notificationService_.subscribe("order.shipment_created", "sendgrid")
|
this.notificationService_.subscribe("order.shipment_created", "sendgrid")
|
||||||
this.notificationService_.subscribe("order.gift_card_created", "sendgrid")
|
this.notificationService_.subscribe("order.gift_card_created", "sendgrid")
|
||||||
@@ -23,6 +13,10 @@ class OrderSubscriber {
|
|||||||
this.notificationService_.subscribe("swap.created", "sendgrid")
|
this.notificationService_.subscribe("swap.created", "sendgrid")
|
||||||
this.notificationService_.subscribe("order.items_returned", "sendgrid")
|
this.notificationService_.subscribe("order.items_returned", "sendgrid")
|
||||||
this.notificationService_.subscribe("order.return_requested", "sendgrid")
|
this.notificationService_.subscribe("order.return_requested", "sendgrid")
|
||||||
|
this.notificationService_.subscribe(
|
||||||
|
"restock_notification.restocked",
|
||||||
|
"sendgrid"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import glob from "glob"
|
import glob from "glob"
|
||||||
|
import { EntitySchema } from "typeorm"
|
||||||
import {
|
import {
|
||||||
BaseModel,
|
BaseModel,
|
||||||
BaseService,
|
BaseService,
|
||||||
@@ -48,7 +49,8 @@ export default async ({ rootDirectory, container, app }) => {
|
|||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
resolved.map(async pluginDetails => {
|
resolved.map(async pluginDetails => {
|
||||||
registerModels(pluginDetails, container)
|
// registerModels(pluginDetails, container)
|
||||||
|
registerRepositories(pluginDetails, container)
|
||||||
await registerServices(pluginDetails, container)
|
await registerServices(pluginDetails, container)
|
||||||
registerMedusaApi(pluginDetails, container)
|
registerMedusaApi(pluginDetails, container)
|
||||||
registerApi(pluginDetails, app, rootDirectory, container)
|
registerApi(pluginDetails, app, rootDirectory, container)
|
||||||
@@ -288,6 +290,34 @@ function registerSubscribers(pluginDetails, container) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a plugin's models at the right location in our container. Models
|
||||||
|
* must inherit from BaseModel. Models are registered directly in the container.
|
||||||
|
* Names are camelCase formatted and namespaced by the folder i.e:
|
||||||
|
* models/example-person -> examplePersonModel
|
||||||
|
* @param {object} pluginDetails - the plugin details including plugin options,
|
||||||
|
* version, id, resolved path, etc. See resolvePlugin
|
||||||
|
* @param {object} container - the container where the services will be
|
||||||
|
* registered
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
function registerRepositories(pluginDetails, container) {
|
||||||
|
const files = glob.sync(`${pluginDetails.resolve}/repositories/*.js`, {})
|
||||||
|
files.forEach(fn => {
|
||||||
|
const loaded = require(fn)
|
||||||
|
|
||||||
|
Object.entries(loaded).map(([key, val]) => {
|
||||||
|
if (typeof val === "function") {
|
||||||
|
const name = formatRegistrationName(fn)
|
||||||
|
console.log(name)
|
||||||
|
container.register({
|
||||||
|
[name]: asClass(val),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a plugin's models at the right location in our container. Models
|
* Registers a plugin's models at the right location in our container. Models
|
||||||
* must inherit from BaseModel. Models are registered directly in the container.
|
* must inherit from BaseModel. Models are registered directly in the container.
|
||||||
@@ -302,20 +332,19 @@ function registerSubscribers(pluginDetails, container) {
|
|||||||
function registerModels(pluginDetails, container) {
|
function registerModels(pluginDetails, container) {
|
||||||
const files = glob.sync(`${pluginDetails.resolve}/models/*.js`, {})
|
const files = glob.sync(`${pluginDetails.resolve}/models/*.js`, {})
|
||||||
files.forEach(fn => {
|
files.forEach(fn => {
|
||||||
const loaded = require(fn).default
|
const loaded = require(fn)
|
||||||
|
|
||||||
if (!(loaded.prototype instanceof BaseModel)) {
|
Object.entries(loaded).map(([key, val]) => {
|
||||||
const logger = container.resolve("logger")
|
if (typeof val === "function" || val instanceof EntitySchema) {
|
||||||
const message = `Models must inherit from BaseModel, please check ${fn}`
|
if (config.register) {
|
||||||
logger.error(message)
|
const name = formatRegistrationName(fn)
|
||||||
throw new Error(message)
|
container.register({
|
||||||
}
|
[name]: asClass(val),
|
||||||
|
})
|
||||||
|
|
||||||
const name = formatRegistrationName(fn)
|
container.registerAdd("db_entities", asValue(val))
|
||||||
container.register({
|
}
|
||||||
[name]: asFunction(
|
}
|
||||||
cradle => new loaded(cradle, pluginDetails.options)
|
|
||||||
).singleton(),
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user