@lodashventure/medusa-booking-for-pickup 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/.medusa/server/src/admin/index.js +1648 -0
  2. package/.medusa/server/src/admin/index.mjs +1647 -0
  3. package/.medusa/server/src/api/admin/pickup-date/[id]/route.js +42 -0
  4. package/.medusa/server/src/api/admin/plugin/route.js +7 -0
  5. package/.medusa/server/src/api/middlewares.js +37 -0
  6. package/.medusa/server/src/api/store/carts/[id]/pickup-date/route.js +54 -0
  7. package/.medusa/server/src/api/store/orders/[id]/pickup-date/route.js +73 -0
  8. package/.medusa/server/src/links/cart-pickup-date.js +16 -0
  9. package/.medusa/server/src/links/order-pickup-date.js +15 -0
  10. package/.medusa/server/src/links/shipping-option-pickup-availability.js +16 -0
  11. package/.medusa/server/src/modules/pickup-datetime/index.js +14 -0
  12. package/.medusa/server/src/modules/pickup-datetime/migrations/Migration20250426021722.js +18 -0
  13. package/.medusa/server/src/modules/pickup-datetime/migrations/Migration20250427042133.js +15 -0
  14. package/.medusa/server/src/modules/pickup-datetime/migrations/Migration20250428021350.js +14 -0
  15. package/.medusa/server/src/modules/pickup-datetime/migrations/Migration20250503003504.js +25 -0
  16. package/.medusa/server/src/modules/pickup-datetime/models/pickup-availability.js +13 -0
  17. package/.medusa/server/src/modules/pickup-datetime/models/pickup-date.js +11 -0
  18. package/.medusa/server/src/modules/pickup-datetime/service.js +15 -0
  19. package/.medusa/server/src/modules/pickup-datetime/types/shippingOptionPickupAvailability.js +25 -0
  20. package/.medusa/server/src/subscribers/order-placed.js +20 -0
  21. package/.medusa/server/src/workflows/pickup-availablity/deletePickupAvailabilityWorkflow.js +36 -0
  22. package/.medusa/server/src/workflows/pickup-availablity/pickup/cancelOrderPickup.js +49 -0
  23. package/.medusa/server/src/workflows/pickup-availablity/pickup/createOrderPickupDate.js +93 -0
  24. package/.medusa/server/src/workflows/pickup-availablity/pickup/steps/validatePickupDateStep.js +51 -0
  25. package/.medusa/server/src/workflows/pickup-availablity/pickup/updateCartPickupDate.js +73 -0
  26. package/.medusa/server/src/workflows/pickup-availablity/pickup/updateOrderPickupDate.js +50 -0
  27. package/.medusa/server/src/workflows/pickup-availablity/steps/validateOverlapsPickupStep.js +45 -0
  28. package/.medusa/server/src/workflows/pickup-availablity/updatePickupAvailabilityWorkflow.js +79 -0
  29. package/README.md +28 -0
  30. package/package.json +82 -0
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const framework_1 = require("@medusajs/framework");
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const pickup_datetime_1 = require("../../../modules/pickup-datetime");
7
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
8
+ const createOrderPickupDateStep = (0, workflows_sdk_1.createStep)("create-order-pickup-date-step", async (input) => {
9
+ const { order_id } = input;
10
+ const link = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.LINK);
11
+ const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
12
+ const { data: [order], } = await query.graph({
13
+ entity: "order",
14
+ fields: ["id", "cart.*", "cart.pickup_date.*", "shipping_methods.*"],
15
+ filters: {
16
+ id: order_id,
17
+ },
18
+ });
19
+ const shippingOptionId = order.shipping_methods[0].shipping_option_id;
20
+ const { data: [shippingOption], } = await query.graph({
21
+ entity: "shipping_option",
22
+ fields: ["id", "pickup_datetime", "service_zone.fulfillment_set.type"],
23
+ filters: {
24
+ id: shippingOptionId,
25
+ },
26
+ });
27
+ const isPickup = shippingOption.service_zone.fulfillment_set.type === "pickup";
28
+ if (!isPickup) {
29
+ return new workflows_sdk_1.StepResponse(null, null);
30
+ }
31
+ const pickupDatetimeModuleService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
32
+ const pickupDate = order.cart.pickup_date;
33
+ if (!pickupDate) {
34
+ return new workflows_sdk_1.StepResponse(null, null);
35
+ }
36
+ const [updatedPickupDate] = await pickupDatetimeModuleService.updatePickupDates([
37
+ {
38
+ selector: {
39
+ id: pickupDate.id,
40
+ cart_id: pickupDate.cart_id,
41
+ },
42
+ data: {
43
+ order_id: order.id,
44
+ },
45
+ },
46
+ ]);
47
+ try {
48
+ await link.create({
49
+ [utils_1.Modules.ORDER]: {
50
+ order_id: order.id,
51
+ },
52
+ [pickup_datetime_1.PICKUP_DATETIME_MODULE]: {
53
+ pickup_date_id: pickupDate.id,
54
+ },
55
+ });
56
+ }
57
+ catch (error) {
58
+ console.error(error);
59
+ // revert the pickup date link order
60
+ await pickupDatetimeModuleService.updatePickupDates([
61
+ {
62
+ selector: {
63
+ id: pickupDate.id,
64
+ cart_id: pickupDate.cart_id,
65
+ },
66
+ data: {
67
+ order_id: null,
68
+ },
69
+ },
70
+ ]);
71
+ }
72
+ return new workflows_sdk_1.StepResponse(updatedPickupDate, updatedPickupDate);
73
+ });
74
+ const createOrderPickupDateWorkflow = (0, workflows_sdk_1.createWorkflow)("create-order-pickup-date-workflow", (input) => {
75
+ const data = createOrderPickupDateStep(input);
76
+ const pickupDateId = (0, workflows_sdk_1.transform)(data, (data) => {
77
+ return data?.id;
78
+ });
79
+ (0, workflows_sdk_1.when)(pickupDateId, (pickupDateId) => Boolean(pickupDateId)).then(() => {
80
+ (0, core_flows_1.emitEventStep)({
81
+ eventName: "order.pickup_date.created",
82
+ data: {
83
+ order_id: input.order_id,
84
+ pickup_date_id: pickupDateId,
85
+ },
86
+ });
87
+ });
88
+ return new workflows_sdk_1.WorkflowResponse({
89
+ pickupDate: data,
90
+ });
91
+ });
92
+ exports.default = createOrderPickupDateWorkflow;
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlT3JkZXJQaWNrdXBEYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9waWNrdXAtYXZhaWxhYmxpdHkvcGlja3VwL2NyZWF0ZU9yZGVyUGlja3VwRGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1EQUFnRDtBQUNoRCxxREFBK0U7QUFDL0UscUVBTzJDO0FBQzNDLHNFQUEwRTtBQUUxRSw0REFBNEQ7QUFNNUQsTUFBTSx5QkFBeUIsR0FBRyxJQUFBLDBCQUFVLEVBQzFDLCtCQUErQixFQUMvQixLQUFLLEVBQUUsS0FBeUMsRUFBRSxFQUFFO0lBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFM0IsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsTUFBTSxLQUFLLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakUsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQztRQUNwRSxPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsUUFBUTtTQUNiO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7SUFDdEUsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUN2QixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsaUJBQWlCO1FBQ3pC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
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validatePickupDateStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/workflows-sdk");
5
+ const framework_1 = require("@medusajs/framework");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const pickup_datetime_1 = require("../../../../modules/pickup-datetime");
8
+ const convertDateToMinutes = (date) => {
9
+ const hours = date.getHours();
10
+ const minutes = date.getMinutes();
11
+ return hours * 60 + minutes;
12
+ };
13
+ exports.validatePickupDateStep = (0, workflows_sdk_1.createStep)("validate-pickup-date-step", async (input) => {
14
+ const { shipping_option_id, pickup_datetime: rawPickupDatetime } = input;
15
+ if (!shipping_option_id) {
16
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shipping option id is required");
17
+ }
18
+ // cancel pickup date
19
+ if (!rawPickupDatetime) {
20
+ return new workflows_sdk_1.StepResponse(null, null);
21
+ }
22
+ const pickup_datetime = new Date(rawPickupDatetime);
23
+ if (pickup_datetime.getTime() < new Date().getTime()) {
24
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Pickup date must not be in the past");
25
+ }
26
+ const pickupDatetimeModuleService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
27
+ const dayOfWeek = [
28
+ "sunday",
29
+ "monday",
30
+ "tuesday",
31
+ "wednesday",
32
+ "thursday",
33
+ "friday",
34
+ "saturday",
35
+ ][pickup_datetime.getUTCDay()];
36
+ const availabilities = await pickupDatetimeModuleService.listPickupAvailabilities({
37
+ shipping_option_id,
38
+ day_of_week: dayOfWeek,
39
+ });
40
+ const isAvailable = availabilities.some((availability) => {
41
+ const availTimeStart = convertDateToMinutes(new Date(availability.timeStart.toLocaleString()));
42
+ const availTimeEnd = convertDateToMinutes(new Date(availability.timeEnd.toLocaleString()));
43
+ const pickupTime = pickup_datetime.getUTCHours() * 60 + pickup_datetime.getUTCMinutes();
44
+ return availTimeStart <= pickupTime && availTimeEnd >= pickupTime;
45
+ });
46
+ if (!isAvailable) {
47
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Pickup date not available");
48
+ }
49
+ return new workflows_sdk_1.StepResponse(pickup_datetime, pickup_datetime);
50
+ });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQaWNrdXBEYXRlU3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcGlja3VwLWF2YWlsYWJsaXR5L3BpY2t1cC9zdGVwcy92YWxpZGF0ZVBpY2t1cERhdGVTdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUFtRTtBQUNuRSxtREFBZ0Q7QUFFaEQscURBQXdEO0FBRXhELHlFQUE2RTtBQU83RSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUU7SUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNsQyxPQUFPLEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVXLFFBQUEsc0JBQXNCLEdBQUcsSUFBQSwwQkFBVSxFQUM5QywyQkFBMkIsRUFDM0IsS0FBSyxFQUFFLEtBQWtDLEVBQUUsRUFBRTtJQUMzQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3pFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGdDQUFnQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQjtJQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksNEJBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFDQUFxQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sMkJBQTJCLEdBQy9CLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix3Q0FBc0IsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sU0FBUyxHQUFHO1FBQ2hCLFFBQVE7UUFDUixRQUFRO1FBQ1IsU0FBUztRQUNULFdBQVc7UUFDWCxVQUFVO1FBQ1YsUUFBUTtRQUNSLFVBQVU7S0FDWCxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRS9CLE1BQU0sY0FBYyxHQUNsQixNQUFNLDJCQUEyQixDQUFDLHdCQUF3QixDQUFDO1FBQ3pELGtCQUFrQjtRQUNsQixXQUFXLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUM7SUFFTCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7UUFDdkQsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQ3pDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FDbEQsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUN2QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQ2hELENBQUM7UUFFRixNQUFNLFVBQVUsR0FDZCxlQUFlLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV2RSxPQUFPLGNBQWMsSUFBSSxVQUFVLElBQUksWUFBWSxJQUFJLFVBQVUsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQiwyQkFBMkIsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLElBQUksNEJBQVksQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const framework_1 = require("@medusajs/framework");
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const pickup_datetime_1 = require("../../../modules/pickup-datetime");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const validatePickupDateStep_1 = require("./steps/validatePickupDateStep");
8
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
9
+ const updateCartPickupDateStep = (0, workflows_sdk_1.createStep)("update-cart-pickup-date-step", async (input) => {
10
+ const { cart_id, pickup_datetime } = input;
11
+ if (!cart_id) {
12
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Cart id is required");
13
+ }
14
+ const link = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.LINK);
15
+ const pickupDatetimeModuleService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
16
+ const [existingPickupDate] = await pickupDatetimeModuleService.listPickupDates({
17
+ cart_id,
18
+ }, { take: 1 });
19
+ // update existing pickup date
20
+ if (existingPickupDate) {
21
+ await pickupDatetimeModuleService.updatePickupDates([
22
+ {
23
+ selector: {
24
+ id: existingPickupDate.id,
25
+ cart_id: existingPickupDate.cart_id,
26
+ },
27
+ data: {
28
+ pickup_datetime,
29
+ },
30
+ },
31
+ ]);
32
+ return new workflows_sdk_1.StepResponse(existingPickupDate, existingPickupDate);
33
+ }
34
+ // if no existing pickup date, create new
35
+ const created = await pickupDatetimeModuleService.createPickupDates({
36
+ cart_id,
37
+ pickup_datetime,
38
+ });
39
+ try {
40
+ await link.create({
41
+ [utils_1.Modules.CART]: {
42
+ cart_id: cart_id,
43
+ },
44
+ [pickup_datetime_1.PICKUP_DATETIME_MODULE]: {
45
+ pickup_date_id: created.id,
46
+ },
47
+ });
48
+ return new workflows_sdk_1.StepResponse(created, created);
49
+ }
50
+ catch (error) {
51
+ console.error(error);
52
+ await pickupDatetimeModuleService.deletePickupDates(created.id);
53
+ }
54
+ });
55
+ const updateCartPickupDateWorkflow = (0, workflows_sdk_1.createWorkflow)("update-cart-pickup-date-workflow", (input) => {
56
+ (0, validatePickupDateStep_1.validatePickupDateStep)({
57
+ shipping_option_id: input.shipping_option_id,
58
+ pickup_datetime: input.pickup_datetime,
59
+ });
60
+ const data = updateCartPickupDateStep(input);
61
+ (0, core_flows_1.emitEventStep)({
62
+ eventName: "cart.pickup_date.updated",
63
+ data: {
64
+ cart_id: input.cart_id,
65
+ pickup_date_id: data.id,
66
+ },
67
+ });
68
+ return new workflows_sdk_1.WorkflowResponse({
69
+ pickupDate: data,
70
+ });
71
+ });
72
+ exports.default = updateCartPickupDateWorkflow;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlQ2FydFBpY2t1cERhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3BpY2t1cC1hdmFpbGFibGl0eS9waWNrdXAvdXBkYXRlQ2FydFBpY2t1cERhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtREFBZ0Q7QUFDaEQscUVBSzJDO0FBRTNDLHNFQUEwRTtBQUMxRSxxREFJbUM7QUFDbkMsMkVBQXdFO0FBQ3hFLDREQUE0RDtBQVE1RCxNQUFNLHdCQUF3QixHQUFHLElBQUEsMEJBQVUsRUFDekMsOEJBQThCLEVBQzlCLEtBQUssRUFBRSxLQUF3QyxFQUFFLEVBQUU7SUFDakQsTUFBTSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUJBQXFCLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsTUFBTSwyQkFBMkIsR0FDL0IscUJBQVMsQ0FBQyxPQUFPLENBQThCLHdDQUFzQixDQUFDLENBQUM7SUFFekUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQ3hCLE1BQU0sMkJBQTJCLENBQUMsZUFBZSxDQUMvQztRQUNFLE9BQU87S0FDUixFQUNELEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUNaLENBQUM7SUFFSiw4QkFBOEI7SUFDOUIsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sMkJBQTJCLENBQUMsaUJBQWlCLENBQUM7WUFDbEQ7Z0JBQ0UsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO29CQUN6QixPQUFPLEVBQUUsa0JBQWtCLENBQUMsT0FBTztpQkFDcEM7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLGVBQWU7aUJBQ2hCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksNEJBQVksQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSwyQkFBMkIsQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRSxPQUFPO1FBQ1AsZUFBZTtLQUNoQixDQUFDLENBQUM7SUFDSCxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxlQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLE9BQU87YUFDakI7WUFDRCxDQUFDLHdDQUFzQixDQUFDLEVBQUU7Z0JBQ3hCLGNBQWMsRUFBRSxPQUFPLENBQUMsRUFBRTthQUMzQjtTQUNGLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSw0QkFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsTUFBTSwyQkFBMkIsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDO0FBRUYsTUFBTSw0QkFBNEIsR0FBRyxJQUFBLDhCQUFjLEVBQ2pELGtDQUFrQyxFQUNsQyxDQUFDLEtBQXdDLEVBQUUsRUFBRTtJQUMzQyxJQUFBLCtDQUFzQixFQUFDO1FBQ3JCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7UUFDNUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO0tBQ3ZDLENBQUMsQ0FBQztJQUNILE1BQU0sSUFBSSxHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdDLElBQUEsMEJBQWEsRUFBQztRQUNaLFNBQVMsRUFBRSwwQkFBMEI7UUFDckMsSUFBSSxFQUFFO1lBQ0osT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUN4QjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQztRQUMxQixVQUFVLEVBQUUsSUFBSTtLQUNqQixDQUFDLENBQUM7QUFDTCxDQUFDLENBQ0YsQ0FBQztBQUVGLGtCQUFlLDRCQUE0QixDQUFDIn0=
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const framework_1 = require("@medusajs/framework");
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
6
+ const pickup_datetime_1 = require("../../../modules/pickup-datetime");
7
+ const validatePickupDateStep_1 = require("./steps/validatePickupDateStep");
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const updateOrderPickupDateStep = (0, workflows_sdk_1.createStep)("update-order-pickup-date-step", async (input) => {
10
+ const { order_id, pickup_datetime } = input;
11
+ const pickupDatetimeModuleService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
12
+ const [existingPickupDate] = await pickupDatetimeModuleService.listPickupDates({ order_id }, { take: 1 });
13
+ // update existing pickup date
14
+ if (existingPickupDate) {
15
+ await pickupDatetimeModuleService.updatePickupDates([
16
+ {
17
+ selector: {
18
+ id: existingPickupDate.id,
19
+ order_id: existingPickupDate.order_id,
20
+ },
21
+ data: {
22
+ pickup_datetime,
23
+ },
24
+ },
25
+ ]);
26
+ return new workflows_sdk_1.StepResponse(existingPickupDate, existingPickupDate);
27
+ }
28
+ else {
29
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Pickup date not found");
30
+ }
31
+ });
32
+ const updateOrderPickupDateWorkflow = (0, workflows_sdk_1.createWorkflow)("update-order-pickup-date-workflow", (input) => {
33
+ (0, validatePickupDateStep_1.validatePickupDateStep)({
34
+ shipping_option_id: input.shipping_option_id,
35
+ pickup_datetime: input.pickup_datetime,
36
+ });
37
+ const data = updateOrderPickupDateStep(input);
38
+ (0, core_flows_1.emitEventStep)({
39
+ eventName: "order.pickup_date.updated",
40
+ data: {
41
+ order_id: input.order_id,
42
+ pickup_date_id: data.id,
43
+ },
44
+ });
45
+ return new workflows_sdk_1.WorkflowResponse({
46
+ pickupDate: data,
47
+ });
48
+ });
49
+ exports.default = updateOrderPickupDateWorkflow;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlT3JkZXJQaWNrdXBEYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9waWNrdXAtYXZhaWxhYmxpdHkvcGlja3VwL3VwZGF0ZU9yZGVyUGlja3VwRGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1EQUFnRDtBQUNoRCxxRUFLMkM7QUFDM0MsNERBQTREO0FBQzVELHNFQUEwRTtBQUUxRSwyRUFBd0U7QUFDeEUscURBQXdEO0FBUXhELE1BQU0seUJBQXlCLEdBQUcsSUFBQSwwQkFBVSxFQUMxQywrQkFBK0IsRUFDL0IsS0FBSyxFQUFFLEtBQXlDLEVBQUUsRUFBRTtJQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUM1QyxNQUFNLDJCQUEyQixHQUMvQixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIsd0NBQXNCLENBQUMsQ0FBQztJQUV6RSxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FDeEIsTUFBTSwyQkFBMkIsQ0FBQyxlQUFlLENBQy9DLEVBQUUsUUFBUSxFQUFFLEVBQ1osRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQ1osQ0FBQztJQUVKLDhCQUE4QjtJQUM5QixJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdkIsTUFBTSwyQkFBMkIsQ0FBQyxpQkFBaUIsQ0FBQztZQUNsRDtnQkFDRSxRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLGtCQUFrQixDQUFDLEVBQUU7b0JBQ3pCLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRO2lCQUN0QztnQkFDRCxJQUFJLEVBQUU7b0JBQ0osZUFBZTtpQkFDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSw0QkFBWSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDbEUsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix1QkFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQ0YsQ0FBQztBQUVGLE1BQU0sNkJBQTZCLEdBQUcsSUFBQSw4QkFBYyxFQUNsRCxtQ0FBbUMsRUFDbkMsQ0FBQyxLQUF5QyxFQUFFLEVBQUU7SUFDNUMsSUFBQSwrQ0FBc0IsRUFBQztRQUNyQixrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1FBQzVDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtLQUN2QyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFBLDBCQUFhLEVBQUM7UUFDWixTQUFTLEVBQUUsMkJBQTJCO1FBQ3RDLElBQUksRUFBRTtZQUNKLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDeEI7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksZ0NBQWdCLENBQUM7UUFDMUIsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUNGLENBQUM7QUFFRixrQkFBZSw2QkFBNkIsQ0FBQyJ9
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOverlapsPickupStep = exports.convertTimeToMinutes = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const convertTimeToMinutes = (time) => {
7
+ const matches = time.match(/\d{2}/g)?.map(Number) || [];
8
+ if (matches.length !== 2) {
9
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid time format");
10
+ }
11
+ const [hours, minutes] = matches;
12
+ const minutesValue = hours * 60 + minutes;
13
+ if (minutesValue < 0 || minutesValue > 24 * 60) {
14
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid time format");
15
+ }
16
+ return minutesValue;
17
+ };
18
+ exports.convertTimeToMinutes = convertTimeToMinutes;
19
+ exports.validateOverlapsPickupStep = (0, workflows_sdk_1.createStep)("validate-overlaps-pickup-step", async (input) => {
20
+ const { schedules } = input;
21
+ const timeSlotsInWeek = schedules.map((schedule) => schedule.timeSlots);
22
+ for (const timeSlots of timeSlotsInWeek) {
23
+ while (timeSlots.length > 0) {
24
+ const timeSlot = timeSlots.shift();
25
+ if (!timeSlot)
26
+ break;
27
+ const inputStartTime = (0, exports.convertTimeToMinutes)(timeSlot.start);
28
+ const inputEndTime = (0, exports.convertTimeToMinutes)(timeSlot.end);
29
+ const overLappingAvailabilities = timeSlots.filter((existing) => {
30
+ const existingStartTime = (0, exports.convertTimeToMinutes)(existing.start);
31
+ const existingEndTime = (0, exports.convertTimeToMinutes)(existing.end);
32
+ const isStartBetweenExisting = inputStartTime >= existingStartTime &&
33
+ inputStartTime <= existingEndTime;
34
+ const isEndBetweenExisting = inputEndTime >= existingStartTime &&
35
+ inputEndTime <= existingEndTime;
36
+ return isStartBetweenExisting || isEndBetweenExisting;
37
+ });
38
+ if (overLappingAvailabilities.length) {
39
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Availability overlaps with existing availabilities");
40
+ }
41
+ }
42
+ }
43
+ return new workflows_sdk_1.StepResponse(true, true);
44
+ });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVPdmVybGFwc1BpY2t1cFN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3BpY2t1cC1hdmFpbGFibGl0eS9zdGVwcy92YWxpZGF0ZU92ZXJsYXBzUGlja3VwU3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0UscURBQXdEO0FBV2pELE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFCQUFxQixDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTFDLElBQUksWUFBWSxHQUFHLENBQUMsSUFBSSxZQUFZLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFCQUFxQixDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQXBCVyxRQUFBLG9CQUFvQix3QkFvQi9CO0FBRVcsUUFBQSwwQkFBMEIsR0FBRyxJQUFBLDBCQUFVLEVBQ2xELCtCQUErQixFQUMvQixLQUFLLEVBQUUsS0FBb0IsRUFBRSxFQUFFO0lBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFNUIsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXhFLEtBQUssTUFBTSxTQUFTLElBQUksZUFBZSxFQUFFLENBQUM7UUFDeEMsT0FBTyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxNQUFNO1lBRXJCLE1BQU0sY0FBYyxHQUFHLElBQUEsNEJBQW9CLEVBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELE1BQU0sWUFBWSxHQUFHLElBQUEsNEJBQW9CLEVBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXhELE1BQU0seUJBQXlCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM5RCxNQUFNLGlCQUFpQixHQUFHLElBQUEsNEJBQW9CLEVBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLGVBQWUsR0FBRyxJQUFBLDRCQUFvQixFQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFM0QsTUFBTSxzQkFBc0IsR0FDMUIsY0FBYyxJQUFJLGlCQUFpQjtvQkFDbkMsY0FBYyxJQUFJLGVBQWUsQ0FBQztnQkFFcEMsTUFBTSxvQkFBb0IsR0FDeEIsWUFBWSxJQUFJLGlCQUFpQjtvQkFDakMsWUFBWSxJQUFJLGVBQWUsQ0FBQztnQkFFbEMsT0FBTyxzQkFBc0IsSUFBSSxvQkFBb0IsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUkseUJBQXlCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG9EQUFvRCxDQUNyRCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FDRixDQUFDIn0=
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updatePickupAvailabilityWorkflow = void 0;
4
+ const framework_1 = require("@medusajs/framework");
5
+ const workflows_sdk_1 = require("@medusajs/workflows-sdk");
6
+ const pickup_datetime_1 = require("../../modules/pickup-datetime");
7
+ const validateOverlapsPickupStep_1 = require("./steps/validateOverlapsPickupStep");
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const updatePickupAvailabilityStep = (0, workflows_sdk_1.createStep)("update-pickup-availability-step", async (input) => {
10
+ const { shipping_option_id, schedules } = input;
11
+ const pickupDatetimeService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
12
+ const link = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.LINK);
13
+ // delete existing availabilities
14
+ const existingAvailabilities = await pickupDatetimeService.listPickupAvailabilities({
15
+ shipping_option_id,
16
+ });
17
+ await link.dismiss({
18
+ [utils_1.Modules.FULFILLMENT]: {
19
+ shipping_option_id,
20
+ },
21
+ [pickup_datetime_1.PICKUP_DATETIME_MODULE]: {
22
+ pickup_availability_id: existingAvailabilities.map((availability) => availability.id),
23
+ },
24
+ });
25
+ await pickupDatetimeService.deletePickupAvailabilities(existingAvailabilities.map((availability) => availability.id));
26
+ // create new availabilities
27
+ const availabilities = schedules
28
+ .filter((schedule) => schedule.enable)
29
+ .map((schedule) => {
30
+ return schedule.timeSlots.map((timeSlot) => {
31
+ let timeStart = new Date();
32
+ const [hours, minutes] = timeSlot.start.split(":").map(Number);
33
+ timeStart.setHours(hours);
34
+ timeStart.setMinutes(minutes);
35
+ timeStart.setSeconds(0);
36
+ timeStart.setMilliseconds(0);
37
+ let timeEnd = new Date(timeStart);
38
+ const [endHours, endMinutes] = timeSlot.end.split(":").map(Number);
39
+ timeEnd.setHours(endHours);
40
+ timeEnd.setMinutes(endMinutes);
41
+ timeEnd.setSeconds(0);
42
+ timeEnd.setMilliseconds(0);
43
+ return {
44
+ shipping_option_id,
45
+ enable: true,
46
+ day_of_week: schedule.day_of_week,
47
+ timeStart,
48
+ timeEnd,
49
+ };
50
+ });
51
+ })
52
+ .flat();
53
+ const createdAvailabilities = await pickupDatetimeService.createPickupAvailabilities(availabilities);
54
+ try {
55
+ await link.create(createdAvailabilities.map((availability) => ({
56
+ [utils_1.Modules.FULFILLMENT]: {
57
+ shipping_option_id: shipping_option_id,
58
+ },
59
+ [pickup_datetime_1.PICKUP_DATETIME_MODULE]: {
60
+ pickup_availability_id: availability.id,
61
+ },
62
+ })));
63
+ }
64
+ catch (error) {
65
+ console.log(error);
66
+ await pickupDatetimeService.deletePickupAvailabilities({
67
+ ids: createdAvailabilities.map((availability) => availability.id),
68
+ });
69
+ }
70
+ return new workflows_sdk_1.StepResponse(createdAvailabilities, createdAvailabilities);
71
+ });
72
+ exports.updatePickupAvailabilityWorkflow = (0, workflows_sdk_1.createWorkflow)("update-pickup-availability-workflow", (input) => {
73
+ (0, validateOverlapsPickupStep_1.validateOverlapsPickupStep)(input);
74
+ const data = updatePickupAvailabilityStep(input);
75
+ return new workflows_sdk_1.WorkflowResponse({
76
+ availability: data,
77
+ });
78
+ });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlUGlja3VwQXZhaWxhYmlsaXR5V29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3BpY2t1cC1hdmFpbGFibGl0eS91cGRhdGVQaWNrdXBBdmFpbGFiaWxpdHlXb3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBZ0Q7QUFDaEQsMkRBS2lDO0FBQ2pDLG1FQUF1RTtBQUd2RSxtRkFBZ0Y7QUFDaEYscURBQStFO0FBTy9FLE1BQU0sNEJBQTRCLEdBQUcsSUFBQSwwQkFBVSxFQUM3QyxpQ0FBaUMsRUFDakMsS0FBSyxFQUFFLEtBQTRDLEVBQUUsRUFBRTtJQUNyRCxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWhELE1BQU0scUJBQXFCLEdBQ3pCLHFCQUFTLENBQUMsT0FBTyxDQUFDLHdDQUFzQixDQUFDLENBQUM7SUFFNUMsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFL0QsaUNBQWlDO0lBQ2pDLE1BQU0sc0JBQXNCLEdBQzFCLE1BQU0scUJBQXFCLENBQUMsd0JBQXdCLENBQUM7UUFDbkQsa0JBQWtCO0tBQ25CLENBQUMsQ0FBQztJQUVMLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNqQixDQUFDLGVBQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNyQixrQkFBa0I7U0FDbkI7UUFDRCxDQUFDLHdDQUFzQixDQUFDLEVBQUU7WUFDeEIsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsR0FBRyxDQUNoRCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDbEM7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0scUJBQXFCLENBQUMsMEJBQTBCLENBQ3BELHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFD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
package/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Medusa Plugin booking for pickup
2
+
3
+ ## How to install
4
+ 1. add the plugin to your medusa backend
5
+ ```bash
6
+ yarn add medusa-booking-for-pickup
7
+ ```
8
+ 2. configure your medusa backend `medusa-config.ts`
9
+ ```ts
10
+ module.exports = defineConfig({
11
+ // ... rest of the config
12
+ plugins: [
13
+ // ... rest of the plugins
14
+ {
15
+ resolve: "medusa-booking-for-pickup",
16
+ options: {},
17
+ },
18
+ ],
19
+ });
20
+ ```
21
+
22
+ 3. run the migrations in your medusa core backend
23
+ ```bash
24
+ yarn medusa db:migrate
25
+ ```
26
+
27
+ 4. all done now just start your medusa backend
28
+ `yarn dev` `yarn start` or whatever you use to start your backend
package/package.json ADDED
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "@lodashventure/medusa-booking-for-pickup",
3
+ "version": "0.0.1",
4
+ "description": "A starter for Medusa plugins.",
5
+ "author": "Medusa (https://medusajs.com)",
6
+ "license": "MIT",
7
+ "files": [
8
+ ".medusa/server"
9
+ ],
10
+ "exports": {
11
+ "./package.json": "./package.json",
12
+ "./workflows": "./.medusa/server/src/workflows/index.js",
13
+ "./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
14
+ "./modules/*": "./.medusa/server/src/modules/*/index.js",
15
+ "./providers/*": "./.medusa/server/src/providers/*/index.js",
16
+ "./admin": "./.medusa/server/src/admin/index.mjs",
17
+ "./*": "./.medusa/server/src/*.js"
18
+ },
19
+ "keywords": [
20
+ "medusa",
21
+ "plugin",
22
+ "medusa-plugin-other",
23
+ "medusa-plugin",
24
+ "medusa-v2"
25
+ ],
26
+ "scripts": {
27
+ "build": "medusa plugin:build",
28
+ "dev": "medusa plugin:develop",
29
+ "prepublishOnly": "medusa plugin:build"
30
+ },
31
+ "devDependencies": {
32
+ "@medusajs/admin-sdk": "2.10.0",
33
+ "@medusajs/cli": "2.10.0",
34
+ "@medusajs/framework": "2.10.0",
35
+ "@medusajs/icons": "^2.10.0",
36
+ "@medusajs/medusa": "2.10.0",
37
+ "@medusajs/test-utils": "2.10.0",
38
+ "@medusajs/ui": "4.0.4",
39
+ "@mikro-orm/cli": "6.4.3",
40
+ "@mikro-orm/core": "6.4.3",
41
+ "@mikro-orm/knex": "6.4.3",
42
+ "@mikro-orm/migrations": "6.4.3",
43
+ "@mikro-orm/postgresql": "6.4.3",
44
+ "@swc/core": "1.5.7",
45
+ "@types/node": "^20.0.0",
46
+ "@types/react": "^18.3.2",
47
+ "@types/react-dom": "^18.2.25",
48
+ "awilix": "^8.0.1",
49
+ "pg": "^8.13.0",
50
+ "prop-types": "^15.8.1",
51
+ "react": "^18.2.0",
52
+ "react-dom": "^18.2.0",
53
+ "ts-node": "^10.9.2",
54
+ "typescript": "^5.6.2",
55
+ "vite": "^5.2.11",
56
+ "yalc": "^1.0.0-pre.53"
57
+ },
58
+ "peerDependencies": {
59
+ "@medusajs/admin-sdk": "2.10.0",
60
+ "@medusajs/cli": "2.10.0",
61
+ "@medusajs/framework": "2.10.0",
62
+ "@medusajs/icons": "^2.10.0",
63
+ "@medusajs/medusa": "2.10.0",
64
+ "@medusajs/test-utils": "2.10.0",
65
+ "@medusajs/ui": "4.0.3",
66
+ "@medusajs/js-sdk": "*",
67
+ "@tanstack/react-query": "*",
68
+ "@mikro-orm/cli": "6.4.3",
69
+ "@mikro-orm/core": "6.4.3",
70
+ "@mikro-orm/knex": "6.4.3",
71
+ "@mikro-orm/migrations": "6.4.3",
72
+ "@mikro-orm/postgresql": "6.4.3",
73
+ "awilix": "^8.0.1",
74
+ "pg": "^8.13.0"
75
+ },
76
+ "engines": {
77
+ "node": ">=20"
78
+ },
79
+ "dependencies": {
80
+ "lucide-react": "^0.503.0"
81
+ }
82
+ }