diff --git a/.changeset/long-pans-deliver.md b/.changeset/long-pans-deliver.md new file mode 100644 index 0000000000..8e2b0cdf13 --- /dev/null +++ b/.changeset/long-pans-deliver.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +chore(feature-flags): Remove OrderEditing feature flag diff --git a/1673550502785-unique_pay_sess_cart_id.ts b/1673550502785-unique_pay_sess_cart_id.ts new file mode 100644 index 0000000000..9e0ca86c0f --- /dev/null +++ b/1673550502785-unique_pay_sess_cart_id.ts @@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class uniquePaySessCartId1673550502785 implements MigrationInterface { + name = 'uniquePaySessCartId1673550502785' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX "public"."UniqPaymentSessionCartIdProviderId"`); + await queryRunner.query(`CREATE UNIQUE INDEX "UniqPaymentSessionCartIdProviderId" ON "payment_session" ("cart_id", "provider_id") WHERE cart_id IS NOT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX "public"."UniqPaymentSessionCartIdProviderId"`); + await queryRunner.query(`CREATE UNIQUE INDEX "UniqPaymentSessionCartIdProviderId" ON "payment_session" ("cart_id", "provider_id") `); + } +} diff --git a/docs/content/advanced/admin/order-edit.mdx b/docs/content/advanced/admin/order-edit.mdx index dfc73fe224..8267e834f4 100644 --- a/docs/content/advanced/admin/order-edit.mdx +++ b/docs/content/advanced/admin/order-edit.mdx @@ -5,17 +5,6 @@ import TabItem from '@theme/TabItem'; In this document, you’ll learn how to create an order edit using the Admin API endpoints. -:::note - -The Order Editing feature is currently in beta mode and guarded by a feature flag. To use Order Editing either: - -1. Enable the `MEDUSA_FF_ORDER_EDITING` environment variable; -2. Or enable the `order_editing` key in the Medusa server's settings. - -You can learn more about enabling it in the [feature flags](../backend/feature-flags/toggle.md) documentation. - -::: - ## Overview The Admin API can be used to edit a customer’s order using the Order Editing feature. diff --git a/docs/content/advanced/backend/subscribers/events-list.md b/docs/content/advanced/backend/subscribers/events-list.md index ea2769d81e..9428717f39 100644 --- a/docs/content/advanced/backend/subscribers/events-list.md +++ b/docs/content/advanced/backend/subscribers/events-list.md @@ -1492,17 +1492,6 @@ Object of the following format: This section holds all events related to order edits. -:::note - -As of Medusa v1.3.9, Order Edits are available but guarded by a feature flag. To use Order Edits either: - -1. Enable the `MEDUSA_FF_ORDER_EDITING` environment variable; -2. Or enable the `order_editing` key in the Medusa server's settings. - -You can learn more about enabling it in the [feature flags](../feature-flags/toggle.md) documentation. - -::: - @@ -1671,17 +1660,6 @@ Object of the following format: This section holds all events related to order edit item changes. -:::note - -As of Medusa v1.3.9, Order Edits are available but guarded by a feature flag. To use Order Edits either: - -1. Enable the `MEDUSA_FF_ORDER_EDITING` environment variable; -2. Or enable the `order_editing` key in the Medusa server's settings. - -You can learn more about enabling it in the [feature flags](../feature-flags/toggle.md) documentation. - -::: -
diff --git a/docs/content/advanced/storefront/handle-order-edits.mdx b/docs/content/advanced/storefront/handle-order-edits.mdx index 91ddeb5cda..40659c4071 100644 --- a/docs/content/advanced/storefront/handle-order-edits.mdx +++ b/docs/content/advanced/storefront/handle-order-edits.mdx @@ -5,17 +5,6 @@ import TabItem from '@theme/TabItem'; In this document, you’ll learn how to allow a customer to confirm or decline an Order Edit. -:::note - -The Order Editing feature is currently in beta mode and guarded by a feature flag. To use Order Editing either: - -1. Enable the `MEDUSA_FF_ORDER_EDITING` environment variable; -2. Or enable the `order_editing` key in the Medusa server's settings. - -You can learn more about enabling it in the [feature flags](../backend/feature-flags/toggle.md) documentation. - -::: - --- ## Overview diff --git a/integration-tests/api/__tests__/admin/order-edit.js b/integration-tests/api/__tests__/admin/order-edit.js index 9c8e79e72f..2f96138cba 100644 --- a/integration-tests/api/__tests__/admin/order-edit.js +++ b/integration-tests/api/__tests__/admin/order-edit.js @@ -3,7 +3,7 @@ const path = require("path") const startServerWithEnvironment = require("../../../helpers/start-server-with-environment").default const { useApi } = require("../../../helpers/use-api") -const { useDb } = require("../../../helpers/use-db") +const { useDb, initDb } = require("../../../helpers/use-db") const adminSeeder = require("../../helpers/admin-seeder") const { simpleOrderEditFactory, @@ -21,6 +21,7 @@ const { simpleRegionFactory, } = require("../../factories") const { OrderEditItemChangeType, OrderEdit } = require("@medusajs/medusa") +const setupServer = require("../../../helpers/setup-server") jest.setTimeout(30000) @@ -30,19 +31,17 @@ const adminHeaders = { }, } -describe("[MEDUSA_FF_ORDER_EDITING] /admin/order-edits", () => { +describe("/admin/order-edits", () => { let medusaProcess let dbConnection const adminUserId = "admin_user" beforeAll(async () => { const cwd = path.resolve(path.join(__dirname, "..", "..")) - const [process, connection] = await startServerWithEnvironment({ + dbConnection = await initDb({ cwd }) + medusaProcess = await setupServer({ cwd, - env: { MEDUSA_FF_ORDER_EDITING: true }, }) - dbConnection = connection - medusaProcess = process }) afterAll(async () => { diff --git a/integration-tests/api/__tests__/admin/payment-collection.js b/integration-tests/api/__tests__/admin/payment-collection.js index e99a656724..d756c23824 100644 --- a/integration-tests/api/__tests__/admin/payment-collection.js +++ b/integration-tests/api/__tests__/admin/payment-collection.js @@ -18,7 +18,7 @@ const adminHeaders = { }, } -describe("[MEDUSA_FF_ORDER_EDITING] /admin/payment-collections", () => { +describe("/admin/payment-collections", () => { let medusaProcess let dbConnection @@ -27,7 +27,6 @@ describe("[MEDUSA_FF_ORDER_EDITING] /admin/payment-collections", () => { const cwd = path.resolve(path.join(__dirname, "..", "..")) const [process, connection] = await startServerWithEnvironment({ cwd, - env: { MEDUSA_FF_ORDER_EDITING: true }, }) dbConnection = connection medusaProcess = process diff --git a/integration-tests/api/__tests__/admin/payment.js b/integration-tests/api/__tests__/admin/payment.js index 8f5d668010..f6d7bec856 100644 --- a/integration-tests/api/__tests__/admin/payment.js +++ b/integration-tests/api/__tests__/admin/payment.js @@ -21,7 +21,7 @@ const adminHeaders = { }, } -describe("[MEDUSA_FF_ORDER_EDITING] /admin/payment", () => { +describe("/admin/payment", () => { let medusaProcess let dbConnection @@ -30,7 +30,6 @@ describe("[MEDUSA_FF_ORDER_EDITING] /admin/payment", () => { const cwd = path.resolve(path.join(__dirname, "..", "..")) const [process, connection] = await startServerWithEnvironment({ cwd, - env: { MEDUSA_FF_ORDER_EDITING: true }, }) dbConnection = connection medusaProcess = process diff --git a/integration-tests/api/__tests__/claims/__snapshots__/index.js.snap b/integration-tests/api/__tests__/claims/__snapshots__/index.js.snap deleted file mode 100644 index 523a20bda9..0000000000 --- a/integration-tests/api/__tests__/claims/__snapshots__/index.js.snap +++ /dev/null @@ -1,153 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Claims creates a refund claim 1`] = ` -Object { - "additional_items": Array [], - "canceled_at": null, - "claim_items": ArrayContaining [ - ObjectContaining { - "item": Any, - "item_id": "test-item", - "quantity": 1, - }, - ], - "created_at": Any, - "deleted_at": null, - "fulfillment_status": "not_fulfilled", - "fulfillments": Array [], - "id": StringMatching /\\^claim_\\*/, - "idempotency_key": Any, - "metadata": null, - "no_notification": null, - "order_id": Any, - "payment_status": "refunded", - "refund_amount": 1200, - "return_order": null, - "shipping_address": Any, - "shipping_address_id": Any, - "shipping_methods": Array [], - "type": "refund", - "updated_at": Any, -} -`; - -exports[`Claims creates a replace claim 1`] = ` -Object { - "additional_items": Array [ - Object { - "adjustments": Array [], - "allow_discounts": true, - "cart_id": null, - "claim_order_id": StringMatching /\\^claim_\\*/, - "created_at": Any, - "description": "Refined Wooden Chair", - "fulfilled_quantity": null, - "has_shipping": null, - "id": StringMatching /\\^item_\\*/, - "is_giftcard": false, - "is_return": false, - "metadata": Object {}, - "order_id": null, - "quantity": 1, - "refundable": 113, - "returned_quantity": null, - "shipped_quantity": null, - "should_merge": true, - "swap_id": null, - "tax_lines": Array [ - Object { - "code": "default", - "created_at": Any, - "id": StringMatching /\\^litl_\\*/, - "item_id": StringMatching /\\^item_\\*/, - "metadata": null, - "name": "default", - "rate": 12.5, - "updated_at": Any, - }, - ], - "thumbnail": null, - "title": "Gorgeous Cotton Table", - "unit_price": 100, - "updated_at": Any, - "variant": Object { - "allow_backorder": false, - "barcode": null, - "created_at": Any, - "deleted_at": null, - "ean": null, - "height": null, - "hs_code": null, - "id": "test-variant", - "inventory_quantity": 9, - "length": null, - "manage_inventory": true, - "material": null, - "metadata": null, - "mid_code": null, - "origin_country": null, - "product": Object { - "collection_id": null, - "created_at": Any, - "deleted_at": null, - "description": null, - "discountable": true, - "external_id": null, - "handle": null, - "height": null, - "hs_code": null, - "id": "test-product", - "is_giftcard": false, - "length": null, - "material": null, - "metadata": null, - "mid_code": null, - "origin_country": null, - "profile_id": StringMatching /\\^sp_\\*/, - "status": "draft", - "subtitle": null, - "thumbnail": null, - "title": "Gorgeous Cotton Table", - "type_id": null, - "updated_at": Any, - "weight": null, - "width": null, - }, - "product_id": "test-product", - "sku": null, - "title": "Refined Wooden Chair", - "upc": null, - "updated_at": Any, - "weight": null, - "width": null, - }, - "variant_id": "test-variant", - }, - ], - "canceled_at": null, - "claim_items": ArrayContaining [ - ObjectContaining { - "item": Any, - "item_id": "test-item", - "quantity": 1, - }, - ], - "created_at": Any, - "deleted_at": null, - "fulfillment_status": "not_fulfilled", - "fulfillments": Array [], - "id": StringMatching /\\^claim_\\*/, - "idempotency_key": Any, - "metadata": null, - "no_notification": null, - "order_id": Any, - "payment_status": "na", - "refund_amount": null, - "return_order": null, - "shipping_address": Any, - "shipping_address_id": Any, - "shipping_methods": Array [], - "type": "replace", - "updated_at": Any, -} -`; diff --git a/integration-tests/api/__tests__/claims/index.js b/integration-tests/api/__tests__/claims/index.js index f84a7c299f..b5552ad33c 100644 --- a/integration-tests/api/__tests__/claims/index.js +++ b/integration-tests/api/__tests__/claims/index.js @@ -64,23 +64,20 @@ describe("Claims", () => { ) expect(response.status).toEqual(200) - expect(response.data.order.claims[0]).toMatchSnapshot({ - id: expect.stringMatching(/^claim_*/), - order_id: expect.any(String), - updated_at: expect.any(String), - created_at: expect.any(String), - idempotency_key: expect.any(String), - shipping_address_id: expect.any(String), - refund_amount: 1200, - shipping_address: expect.any(Object), - claim_items: expect.arrayContaining([ - expect.objectContaining({ - item: expect.any(Object), - item_id: "test-item", - quantity: 1, - }), - ]), - }) + expect(response.data.order.claims[0]).toEqual( + expect.objectContaining({ + id: expect.stringMatching(/^claim_*/), + order_id: expect.any(String), + refund_amount: 1200, + claim_items: expect.arrayContaining([ + expect.objectContaining({ + item: expect.any(Object), + item_id: "test-item", + quantity: 1, + }), + ]), + }) + ) }) test("creates a replace claim", async () => { @@ -110,49 +107,33 @@ describe("Claims", () => { ) expect(response.status).toEqual(200) - expect(response.data.order.claims[0]).toMatchSnapshot({ - id: expect.stringMatching(/^claim_*/), - order_id: expect.any(String), - updated_at: expect.any(String), - created_at: expect.any(String), - idempotency_key: expect.any(String), - shipping_address_id: expect.any(String), - refund_amount: null, - shipping_address: expect.any(Object), - additional_items: [ - { - id: expect.stringMatching(/^item_*/), - claim_order_id: expect.stringMatching(/^claim_*/), - created_at: expect.any(String), - updated_at: expect.any(String), - variant: { - created_at: expect.any(String), - updated_at: expect.any(String), - product: { - profile_id: expect.stringMatching(/^sp_*/), - created_at: expect.any(String), - updated_at: expect.any(String), - }, - }, - tax_lines: [ - { - id: expect.stringMatching(/^litl_*/), - item_id: expect.stringMatching(/^item_*/), - created_at: expect.any(String), - updated_at: expect.any(String), - rate: 12.5, - }, - ], - }, - ], - claim_items: expect.arrayContaining([ - expect.objectContaining({ - item: expect.any(Object), - item_id: "test-item", - quantity: 1, - }), - ]), - }) + expect(response.data.order.claims[0]).toEqual( + expect.objectContaining({ + id: expect.stringMatching(/^claim_*/), + order_id: expect.any(String), + additional_items: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(/^item_*/), + claim_order_id: expect.stringMatching(/^claim_*/), + variant: expect.objectContaining({ id: "test-variant" }), + tax_lines: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(/^litl_*/), + item_id: expect.stringMatching(/^item_*/), + rate: 12.5, + }), + ]), + }), + ]), + claim_items: expect.arrayContaining([ + expect.objectContaining({ + item: expect.any(Object), + item_id: "test-item", + quantity: 1, + }), + ]), + }) + ) }) test("creates a replace claim fulfillment", async () => { diff --git a/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap b/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap deleted file mode 100644 index 91d39bbcb0..0000000000 --- a/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap +++ /dev/null @@ -1,385 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`/store/carts /store/swaps simple swap 1`] = ` -Object { - "swap": Object { - "additional_items": Array [ - Object { - "allow_discounts": true, - "cart_id": StringMatching /\\^cart_\\*/, - "claim_order_id": null, - "created_at": Any, - "description": "Swap product", - "fulfilled_quantity": null, - "has_shipping": null, - "id": StringMatching /\\^item_\\*/, - "is_giftcard": false, - "is_return": false, - "metadata": Object {}, - "order_id": null, - "quantity": 1, - "returned_quantity": null, - "shipped_quantity": null, - "should_merge": true, - "swap_id": StringMatching /\\^swap_\\*/, - "thumbnail": null, - "title": "test product", - "unit_price": 8000, - "updated_at": Any, - "variant": Object { - "allow_backorder": false, - "barcode": null, - "created_at": Any, - "deleted_at": null, - "ean": null, - "height": null, - "hs_code": null, - "id": "test-variant-2", - "inventory_quantity": 1, - "length": null, - "manage_inventory": true, - "material": null, - "metadata": null, - "mid_code": null, - "origin_country": null, - "product": Object { - "collection_id": null, - "created_at": Any, - "deleted_at": null, - "description": null, - "discountable": true, - "external_id": null, - "handle": null, - "height": null, - "hs_code": null, - "id": "test-product", - "is_giftcard": false, - "length": null, - "material": null, - "metadata": null, - "mid_code": null, - "origin_country": null, - "profile_id": StringMatching /\\^sp_\\*/, - "status": "draft", - "subtitle": null, - "thumbnail": null, - "title": "test product", - "type_id": null, - "updated_at": Any, - "weight": null, - "width": null, - }, - "product_id": "test-product", - "sku": null, - "title": "Swap product", - "upc": null, - "updated_at": Any, - "weight": null, - "width": null, - }, - "variant_id": "test-variant-2", - }, - ], - "cart": Object { - "billing_address_id": "test-billing-address", - "completed_at": null, - "context": Object {}, - "created_at": Any, - "customer_id": "test-customer", - "deleted_at": null, - "email": "test@email.com", - "id": StringMatching /\\^cart_\\*/, - "idempotency_key": null, - "metadata": Object { - "parent_order_id": "test-order", - "swap_id": StringMatching /\\^swap_\\*/, - }, - "object": "cart", - "payment_authorized_at": null, - "payment_id": null, - "region_id": "test-region", - "sales_channel_id": Any, - "shipping_address_id": "test-shipping-address", - "type": "swap", - "updated_at": Any, - }, - "cart_id": StringMatching /\\^cart_\\*/, - "confirmed_at": null, - "created_at": Any, - "deleted_at": null, - "difference_due": null, - "fulfillment_status": "not_fulfilled", - "fulfillments": Array [], - "id": StringMatching /\\^swap_\\*/, - "idempotency_key": Any, - "metadata": null, - "order": Object { - "billing_address_id": "test-billing-address", - "canceled_at": null, - "cart_id": null, - "created_at": Any, - "currency_code": "usd", - "customer_id": "test-customer", - "display_id": 1, - "draft_order_id": null, - "email": "test@email.com", - "external_id": null, - "fulfillment_status": "fulfilled", - "id": "test-order", - "idempotency_key": null, - "metadata": null, - "no_notification": null, - "object": "order", - "payment_status": "captured", - "region_id": "test-region", - "sales_channel_id": null, - "shipping_address_id": "test-shipping-address", - "status": "pending", - "tax_rate": 0, - "updated_at": Any, - }, - "order_id": "test-order", - "payment": null, - "payment_status": "not_paid", - "return_order": Object { - "claim_order_id": null, - "created_at": Any, - "id": StringMatching /\\^ret_\\*/, - "idempotency_key": null, - "items": Array [ - Object { - "is_requested": true, - "item_id": "test-item", - "metadata": null, - "note": null, - "quantity": 1, - "reason_id": null, - "received_quantity": null, - "requested_quantity": 1, - "return_id": StringMatching /\\^ret_\\*/, - }, - ], - "location_id": null, - "metadata": null, - "no_notification": true, - "order_id": null, - "received_at": null, - "refund_amount": 7200, - "shipping_data": null, - "shipping_method": null, - "status": "requested", - "swap_id": StringMatching /\\^swap_\\*/, - "updated_at": Any, - }, - "shipping_address": null, - "shipping_address_id": null, - "shipping_methods": Array [], - "updated_at": Any, - }, -} -`; - -exports[`/store/carts /store/swaps swap with return shipping 1`] = ` -Object { - "swap": Object { - "additional_items": Array [ - Object { - "allow_discounts": true, - "cart_id": StringMatching /\\^cart_\\*/, - "claim_order_id": null, - "created_at": Any, - "description": "Swap product", - "fulfilled_quantity": null, - "has_shipping": null, - "id": StringMatching /\\^item_\\*/, - "is_giftcard": false, - "is_return": false, - "metadata": Object {}, - "order_id": null, - "quantity": 1, - "returned_quantity": null, - "shipped_quantity": null, - "should_merge": true, - "swap_id": StringMatching /\\^swap_\\*/, - "thumbnail": null, - "title": "test product", - "unit_price": 8000, - "updated_at": Any, - "variant": Object { - "allow_backorder": false, - "barcode": null, - "created_at": Any, - "deleted_at": null, - "ean": null, - "height": null, - "hs_code": null, - "id": "test-variant-2", - "inventory_quantity": 1, - "length": null, - "manage_inventory": true, - "material": null, - "metadata": null, - "mid_code": null, - "origin_country": null, - "product": Object { - "collection_id": null, - "created_at": Any, - "deleted_at": null, - "description": null, - "discountable": true, - "external_id": null, - "handle": null, - "height": null, - "hs_code": null, - "id": "test-product", - "is_giftcard": false, - "length": null, - "material": null, - "metadata": null, - "mid_code": null, - "origin_country": null, - "profile_id": StringMatching /\\^sp_\\*/, - "status": "draft", - "subtitle": null, - "thumbnail": null, - "title": "test product", - "type_id": null, - "updated_at": Any, - "weight": null, - "width": null, - }, - "product_id": "test-product", - "sku": null, - "title": "Swap product", - "upc": null, - "updated_at": Any, - "weight": null, - "width": null, - }, - "variant_id": "test-variant-2", - }, - ], - "cart": Object { - "billing_address_id": "test-billing-address", - "completed_at": null, - "context": Object {}, - "created_at": Any, - "customer_id": "test-customer", - "deleted_at": null, - "email": "test@email.com", - "id": StringMatching /\\^cart_\\*/, - "idempotency_key": null, - "metadata": Object { - "parent_order_id": "test-order", - "swap_id": StringMatching /\\^swap_\\*/, - }, - "object": "cart", - "payment_authorized_at": null, - "payment_id": null, - "region_id": "test-region", - "sales_channel_id": Any, - "shipping_address_id": "test-shipping-address", - "type": "swap", - "updated_at": Any, - }, - "cart_id": StringMatching /\\^cart_\\*/, - "confirmed_at": null, - "created_at": Any, - "deleted_at": null, - "difference_due": null, - "fulfillment_status": "not_fulfilled", - "fulfillments": Array [], - "id": StringMatching /\\^swap_\\*/, - "idempotency_key": Any, - "metadata": null, - "order": Object { - "billing_address_id": "test-billing-address", - "canceled_at": null, - "cart_id": null, - "created_at": Any, - "currency_code": "usd", - "customer_id": "test-customer", - "display_id": Any, - "draft_order_id": null, - "email": "test@email.com", - "external_id": null, - "fulfillment_status": "fulfilled", - "id": "test-order", - "idempotency_key": null, - "metadata": null, - "no_notification": null, - "object": "order", - "payment_status": "captured", - "region_id": "test-region", - "sales_channel_id": null, - "shipping_address_id": "test-shipping-address", - "status": "pending", - "tax_rate": 0, - "updated_at": Any, - }, - "order_id": "test-order", - "payment": null, - "payment_status": "not_paid", - "return_order": Object { - "claim_order_id": null, - "created_at": Any, - "id": StringMatching /\\^ret_\\*/, - "idempotency_key": null, - "items": Array [ - Object { - "is_requested": true, - "item_id": "test-item", - "metadata": null, - "note": null, - "quantity": 1, - "reason_id": null, - "received_quantity": null, - "requested_quantity": 1, - "return_id": StringMatching /\\^ret_\\*/, - }, - ], - "location_id": null, - "metadata": null, - "no_notification": true, - "order_id": null, - "received_at": null, - "refund_amount": 6200, - "shipping_data": Object {}, - "shipping_method": Object { - "cart_id": null, - "claim_order_id": null, - "data": Object {}, - "id": StringMatching /\\^sm_\\*/, - "order_id": null, - "price": 1000, - "return_id": StringMatching /\\^ret_\\*/, - "shipping_option": Object { - "admin_only": false, - "amount": 1000, - "created_at": Any, - "data": Object {}, - "deleted_at": null, - "id": "return-option", - "is_return": true, - "metadata": null, - "name": "Test ret", - "price_type": "flat_rate", - "profile_id": StringMatching /\\^sp_\\*/, - "provider_id": "test-ful", - "region_id": "test-region", - "updated_at": Any, - }, - "shipping_option_id": "return-option", - "swap_id": null, - }, - "status": "requested", - "swap_id": StringMatching /\\^swap_\\*/, - "updated_at": Any, - }, - "shipping_address": null, - "shipping_address_id": null, - "shipping_methods": Array [], - "updated_at": Any, - }, -} -`; diff --git a/integration-tests/api/__tests__/store/order-edit.js b/integration-tests/api/__tests__/store/order-edit.js index b65a497c57..4cf67e3d10 100644 --- a/integration-tests/api/__tests__/store/order-edit.js +++ b/integration-tests/api/__tests__/store/order-edit.js @@ -3,7 +3,7 @@ const path = require("path") const startServerWithEnvironment = require("../../../helpers/start-server-with-environment").default const { useApi } = require("../../../helpers/use-api") -const { useDb } = require("../../../helpers/use-db") +const { useDb, initDb } = require("../../../helpers/use-db") const adminSeeder = require("../../helpers/admin-seeder") const { getClientAuthenticationCookie, @@ -22,21 +22,20 @@ const { simpleCustomerFactory, } = require("../../factories") const { OrderEditItemChangeType } = require("@medusajs/medusa") +const setupServer = require("../../../helpers/setup-server") jest.setTimeout(30000) -describe("[MEDUSA_FF_ORDER_EDITING] /store/order-edits", () => { +describe("/store/order-edits", () => { let medusaProcess let dbConnection beforeAll(async () => { const cwd = path.resolve(path.join(__dirname, "..", "..")) - const [process, connection] = await startServerWithEnvironment({ + dbConnection = await initDb({ cwd }) + medusaProcess = await setupServer({ cwd, - env: { MEDUSA_FF_ORDER_EDITING: true }, }) - dbConnection = connection - medusaProcess = process await simpleCustomerFactory(dbConnection, { id: "customer", diff --git a/integration-tests/api/__tests__/store/payment-collection.js b/integration-tests/api/__tests__/store/payment-collection.js index 8ee0e33f71..65404e2fac 100644 --- a/integration-tests/api/__tests__/store/payment-collection.js +++ b/integration-tests/api/__tests__/store/payment-collection.js @@ -18,7 +18,7 @@ const { jest.setTimeout(30000) -describe("[MEDUSA_FF_ORDER_EDITING] /store/payment-collections", () => { +describe("/store/payment-collections", () => { let medusaProcess let dbConnection @@ -27,7 +27,6 @@ describe("[MEDUSA_FF_ORDER_EDITING] /store/payment-collections", () => { const cwd = path.resolve(path.join(__dirname, "..", "..")) const [process, connection] = await startServerWithEnvironment({ cwd, - env: { MEDUSA_FF_ORDER_EDITING: true }, }) dbConnection = connection medusaProcess = process diff --git a/integration-tests/api/__tests__/store/swaps.js b/integration-tests/api/__tests__/store/swaps.js index c8fd08ca78..e8f80b62f4 100644 --- a/integration-tests/api/__tests__/store/swaps.js +++ b/integration-tests/api/__tests__/store/swaps.js @@ -81,67 +81,50 @@ describe("/store/carts", () => { console.log(err.response.data.message) }) - expect(response.data).toMatchSnapshot({ - swap: { - id: expect.stringMatching(/^swap_*/), - idempotency_key: expect.any(String), - additional_items: [ - { - id: expect.stringMatching(/^item_*/), - cart_id: expect.stringMatching(/^cart_*/), - swap_id: expect.stringMatching(/^swap_*/), - variant: { - id: "test-variant-2", - created_at: expect.any(String), - updated_at: expect.any(String), - product: { - profile_id: expect.stringMatching(/^sp_*/), - created_at: expect.any(String), - updated_at: expect.any(String), - }, - }, - quantity: 1, - variant_id: "test-variant-2", - created_at: expect.any(String), - updated_at: expect.any(String), - }, - ], - order: { - id: "test-order", - created_at: expect.any(String), - updated_at: expect.any(String), - }, - cart_id: expect.stringMatching(/^cart_*/), - cart: { - id: expect.stringMatching(/^cart_*/), - sales_channel_id: expect.any(String), - billing_address_id: "test-billing-address", - type: "swap", - created_at: expect.any(String), - updated_at: expect.any(String), - shipping_address_id: "test-shipping-address", - metadata: { - swap_id: expect.stringMatching(/^swap_*/), - }, - }, - return_order: { - id: expect.stringMatching(/^ret_*/), - swap_id: expect.stringMatching(/^swap_*/), - refund_amount: 7200, - items: [ - { - item_id: "test-item", + expect(response.data).toEqual( + expect.objectContaining({ + swap: expect.objectContaining({ + id: expect.stringMatching(/^swap_*/), + additional_items: expect.arrayContaining([ + expect.objectContaining({ + id: expect.stringMatching(/^item_*/), + cart_id: expect.stringMatching(/^cart_*/), + swap_id: expect.stringMatching(/^swap_*/), + variant: expect.objectContaining({ + id: "test-variant-2", + }), quantity: 1, - return_id: expect.stringMatching(/^ret_*/), - }, - ], - created_at: expect.any(String), - updated_at: expect.any(String), - }, - created_at: expect.any(String), - updated_at: expect.any(String), - }, - }) + variant_id: "test-variant-2", + }), + ]), + order: expect.objectContaining({ + id: "test-order", + }), + cart_id: expect.stringMatching(/^cart_*/), + cart: expect.objectContaining({ + id: expect.stringMatching(/^cart_*/), + billing_address_id: "test-billing-address", + type: "swap", + shipping_address_id: "test-shipping-address", + metadata: expect.objectContaining({ + swap_id: expect.stringMatching(/^swap_*/), + }), + }), + return_order: expect.objectContaining({ + id: expect.stringMatching(/^ret_*/), + swap_id: expect.stringMatching(/^swap_*/), + refund_amount: 7200, + items: expect.arrayContaining([ + expect.objectContaining({ + item_id: "test-item", + quantity: 1, + return_id: expect.stringMatching(/^ret_*/), + }), + ]), + }), + }), + }) + ) }) it("swap with return shipping", async () => { @@ -168,76 +151,54 @@ describe("/store/carts", () => { console.log(err.response.data.message) }) - expect(response.data).toMatchSnapshot({ - swap: { + expect(response.data).toEqual({ + swap: expect.objectContaining({ id: expect.stringMatching(/^swap_*/), - idempotency_key: expect.any(String), - additional_items: [ - { + additional_items: expect.arrayContaining([ + expect.objectContaining({ id: expect.stringMatching(/^item_*/), cart_id: expect.stringMatching(/^cart_*/), swap_id: expect.stringMatching(/^swap_*/), - variant: { + variant: expect.objectContaining({ id: "test-variant-2", - created_at: expect.any(String), - updated_at: expect.any(String), - product: { - profile_id: expect.stringMatching(/^sp_*/), - created_at: expect.any(String), - updated_at: expect.any(String), - }, - }, + }), quantity: 1, variant_id: "test-variant-2", - created_at: expect.any(String), - updated_at: expect.any(String), - }, - ], - order: { + }), + ]), + order: expect.objectContaining({ id: "test-order", - display_id: expect.any(Number), - created_at: expect.any(String), - updated_at: expect.any(String), - }, + }), cart_id: expect.stringMatching(/^cart_*/), - cart: { + cart: expect.objectContaining({ id: expect.stringMatching(/^cart_*/), - sales_channel_id: expect.any(String), billing_address_id: "test-billing-address", shipping_address_id: "test-shipping-address", type: "swap", - created_at: expect.any(String), - updated_at: expect.any(String), - metadata: { + metadata: expect.objectContaining({ swap_id: expect.stringMatching(/^swap_*/), - }, - }, - return_order: { + }), + }), + return_order: expect.objectContaining({ id: expect.stringMatching(/^ret_*/), swap_id: expect.stringMatching(/^swap_*/), refund_amount: 6200, - shipping_method: { + shipping_method: expect.objectContaining({ id: expect.stringMatching(/^sm_*/), return_id: expect.stringMatching(/^ret_*/), - shipping_option: { + shipping_option: expect.objectContaining({ profile_id: expect.stringMatching(/^sp_*/), - created_at: expect.any(String), - updated_at: expect.any(String), - }, - }, - items: [ - { + }), + }), + items: expect.arrayContaining([ + expect.objectContaining({ item_id: "test-item", quantity: 1, return_id: expect.stringMatching(/^ret_*/), - }, - ], - created_at: expect.any(String), - updated_at: expect.any(String), - }, - created_at: expect.any(String), - updated_at: expect.any(String), - }, + }), + ]), + }), + }), }) }) }) diff --git a/integration-tests/helpers/start-server-with-environment.js b/integration-tests/helpers/start-server-with-environment.js index ba015f2a91..a32a475924 100644 --- a/integration-tests/helpers/start-server-with-environment.js +++ b/integration-tests/helpers/start-server-with-environment.js @@ -18,9 +18,11 @@ const startServerWithEnvironment = async ({ cwd, }) - Object.entries(env).forEach(([key]) => { - delete process.env[key] - }) + if (env) { + Object.entries(env).forEach(([key]) => { + delete process.env[key] + }) + } const medusaProcess = await setupServer({ cwd, diff --git a/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap b/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap index 7fba9b66fc..446911e4fd 100644 --- a/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap +++ b/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap @@ -38,7 +38,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "quantity": 2, "returned_quantity": null, "shipped_quantity": 2, @@ -192,7 +194,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "quantity": 2, "returned_quantity": null, "shipped_quantity": 2, @@ -308,7 +312,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "price": "12.00 USD", "quantity": 1, "returned_quantity": 1, @@ -442,7 +448,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "original_tax_total": 400, "original_total": 2400, "quantity": 2, @@ -629,7 +637,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "quantity": 2, "returned_quantity": 1, "shipped_quantity": 2, @@ -787,7 +797,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "original_tax_total": 400, "original_total": 2400, "price": "10.00 USD", @@ -1018,7 +1030,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "original_tax_total": 400, "original_total": 2400, "price": "12.00 USD", @@ -1293,7 +1307,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "original_tax_total": 400, "original_total": 2400, "quantity": 2, @@ -1487,7 +1503,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "price": "12.00 USD", "quantity": 1, "returned_quantity": null, @@ -1621,7 +1639,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "original_tax_total": 400, "original_total": 2400, "quantity": 2, @@ -1808,7 +1828,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "quantity": 2, "returned_quantity": null, "shipped_quantity": 2, @@ -1966,7 +1988,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": Object {}, + "order_edit_id": null, "order_id": null, + "original_item_id": null, "price": "11.25 USD", "quantity": 1, "returned_quantity": null, @@ -2073,7 +2097,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": null, + "order_edit_id": null, "order_id": Any, + "original_item_id": null, "quantity": 2, "returned_quantity": null, "shipped_quantity": 2, @@ -2193,7 +2219,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": Object {}, + "order_edit_id": null, "order_id": null, + "original_item_id": null, "quantity": 1, "returned_quantity": null, "shipped_quantity": 1, @@ -2307,7 +2335,9 @@ Object { "is_giftcard": false, "is_return": false, "metadata": Object {}, + "order_edit_id": null, "order_id": null, + "original_item_id": null, "quantity": 1, "returned_quantity": null, "shipped_quantity": 1, diff --git a/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/index.js b/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/index.js index 36d8398d8a..841f9cbef6 100644 --- a/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/index.js +++ b/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/index.js @@ -104,6 +104,8 @@ describe("medusa-plugin-sendgrid", () => { { adjustments: [], created_at: expect.any(Date), + order_edit_id: null, + original_item_id: null, updated_at: expect.any(Date), order_id: expect.any(String), tax_lines: [ @@ -225,6 +227,8 @@ describe("medusa-plugin-sendgrid", () => { adjustments: [], created_at: expect.any(Date), updated_at: expect.any(Date), + order_edit_id: null, + original_item_id: null, order_id: expect.any(String), tax_lines: [ { @@ -285,6 +289,8 @@ describe("medusa-plugin-sendgrid", () => { created_at: expect.any(Date), updated_at: expect.any(Date), order_id: expect.any(String), + order_edit_id: null, + original_item_id: null, tax_lines: [ { id: expect.any(String), @@ -473,6 +479,8 @@ describe("medusa-plugin-sendgrid", () => { { id: expect.any(String), order_id: expect.any(String), + order_edit_id: null, + original_item_id: null, created_at: expect.any(Date), updated_at: expect.any(Date), variant: { @@ -577,6 +585,8 @@ describe("medusa-plugin-sendgrid", () => { id: expect.any(String), created_at: expect.any(Date), updated_at: expect.any(Date), + order_edit_id: null, + original_item_id: null, variant: { created_at: expect.any(Date), updated_at: expect.any(Date), @@ -762,6 +772,8 @@ const getReturnSnap = (received = false) => { const itemSnap = { id: expect.any(String), order_id: expect.any(String), + order_edit_id: null, + original_item_id: null, created_at: expect.any(Date), updated_at: expect.any(Date), variant: { diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/cancel-order-edit.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/cancel-order-edit.ts index d1686d5220..6266fe4e04 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/cancel-order-edit.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/cancel-order-edit.ts @@ -1,6 +1,5 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" describe("POST /admin/order-edits/:id/cancel", () => { @@ -17,8 +16,7 @@ describe("POST /admin/order-edits/:id/cancel", () => { jwt: { userId: IdMap.getId("admin_user"), }, - }, - flags: [OrderEditingFeatureFlag], + } } ) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/confirm-order-edit.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/confirm-order-edit.ts index 4dff0fb902..62843e9640 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/confirm-order-edit.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/confirm-order-edit.ts @@ -1,6 +1,5 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" describe("POST /admin/order-edits/:id/confirm", () => { @@ -18,7 +17,6 @@ describe("POST /admin/order-edits/:id/confirm", () => { userId: "admin_user", }, }, - flags: [OrderEditingFeatureFlag], } ) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/create-order-edit.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/create-order-edit.ts index 49bd87c35b..9c4c0ee4b0 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/create-order-edit.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/create-order-edit.ts @@ -1,6 +1,5 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" describe("POST /admin/order-edits", () => { @@ -20,7 +19,6 @@ describe("POST /admin/order-edits", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], }) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-line-item.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-line-item.ts index cd77b0703a..2fcdef25a8 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-line-item.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-line-item.ts @@ -1,6 +1,5 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" describe("DELETE /admin/order-edits/:id/items/:item_id", () => { @@ -16,7 +15,6 @@ describe("DELETE /admin/order-edits/:id/items/:item_id", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], }) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit-item-change.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit-item-change.ts index 59c7db4401..873c0f98db 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit-item-change.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit-item-change.ts @@ -1,6 +1,5 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" describe("DELETE /admin/order-edits/:id/changes/:change_id", () => { @@ -19,7 +18,6 @@ describe("DELETE /admin/order-edits/:id/changes/:change_id", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], } ) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit.ts index 6e82cc918f..e6eb06b791 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/delete-order-edit.ts @@ -1,6 +1,5 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" describe("DELETE /admin/order-edits/:id", () => { @@ -15,7 +14,6 @@ describe("DELETE /admin/order-edits/:id", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], }) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/get-order.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/get-order.ts index 3798d728f5..6efa6306a6 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/get-order.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/get-order.ts @@ -1,10 +1,9 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { defaultOrderEditFields, - defaultOrderEditRelations, + defaultOrderEditRelations } from "../../../../../types/order-edit" describe("GET /admin/order-edits/:id", () => { @@ -19,7 +18,6 @@ describe("GET /admin/order-edits/:id", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], }) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/list-order-edit.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/list-order-edit.ts index c26d68d555..704e7188d6 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/list-order-edit.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/list-order-edit.ts @@ -1,10 +1,9 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { defaultOrderEditFields, - defaultOrderEditRelations, + defaultOrderEditRelations } from "../../../../../types/order-edit" describe("GET /admin/order-edits", () => { @@ -18,7 +17,6 @@ describe("GET /admin/order-edits", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], }) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/request-confirmation.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/request-confirmation.ts index 19a5858201..f3a1f84943 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/request-confirmation.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/request-confirmation.ts @@ -2,7 +2,6 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" describe("GET /admin/order-edits/:id", () => { describe("successfully requests an order edit confirmation", () => { @@ -19,7 +18,6 @@ describe("GET /admin/order-edits/:id", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], payload: { payment_collection_description: "PayCol description", }, diff --git a/packages/medusa/src/api/routes/admin/order-edits/__tests__/update-order-edit-line-item.ts b/packages/medusa/src/api/routes/admin/order-edits/__tests__/update-order-edit-line-item.ts index 3464d3f82e..d1b0be3ee7 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/__tests__/update-order-edit-line-item.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/__tests__/update-order-edit-line-item.ts @@ -1,6 +1,5 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" describe("POST /admin/order-edits/:id/items/:item_id", () => { @@ -22,7 +21,6 @@ describe("POST /admin/order-edits/:id/items/:item_id", () => { userId: IdMap.getId("admin_user"), }, }, - flags: [OrderEditingFeatureFlag], } ) }) diff --git a/packages/medusa/src/api/routes/admin/order-edits/index.ts b/packages/medusa/src/api/routes/admin/order-edits/index.ts index 7541184e0d..470e696d29 100644 --- a/packages/medusa/src/api/routes/admin/order-edits/index.ts +++ b/packages/medusa/src/api/routes/admin/order-edits/index.ts @@ -1,33 +1,27 @@ import { Router } from "express" -import middlewares, { - transformBody, - transformQuery, -} from "../../../middlewares" +import { OrderEdit } from "../../../../models" import { DeleteResponse, PaginatedResponse } from "../../../../types/common" -import { isFeatureFlagEnabled } from "../../../middlewares/feature-flag-enabled" -import OrderEditingFeatureFlag from "../../../../loaders/feature-flags/order-editing" import { defaultOrderEditFields, defaultOrderEditRelations, } from "../../../../types/order-edit" -import { OrderEdit } from "../../../../models" -import { AdminPostOrderEditsOrderEditReq } from "./update-order-edit" -import { AdminPostOrderEditsReq } from "./create-order-edit" +import middlewares, { + transformBody, + transformQuery, +} from "../../../middlewares" import { AdminPostOrderEditsEditLineItemsReq } from "./add-line-item" -import { AdminPostOrderEditsEditLineItemsLineItemReq } from "./update-order-edit-line-item" -import { GetOrderEditsParams } from "./list-order-edit" +import { AdminPostOrderEditsReq } from "./create-order-edit" import { GetOrderEditsOrderEditParams } from "./get-order-edit" +import { GetOrderEditsParams } from "./list-order-edit" import { AdminPostOrderEditsRequestConfirmationReq } from "./request-confirmation" +import { AdminPostOrderEditsOrderEditReq } from "./update-order-edit" +import { AdminPostOrderEditsEditLineItemsLineItemReq } from "./update-order-edit-line-item" const route = Router() export default (app) => { - app.use( - "/order-edits", - isFeatureFlagEnabled(OrderEditingFeatureFlag.key), - route - ) + app.use("/order-edits", route) route.post( "/", @@ -117,10 +111,10 @@ export type AdminOrderEditItemChangeDeleteRes = { deleted: boolean } -export * from "./update-order-edit" -export * from "./update-order-edit-line-item" +export * from "./add-line-item" export * from "./create-order-edit" export * from "./get-order-edit" export * from "./list-order-edit" -export * from "./add-line-item" export * from "./request-confirmation" +export * from "./update-order-edit" +export * from "./update-order-edit-line-item" diff --git a/packages/medusa/src/api/routes/admin/payment-collections/index.ts b/packages/medusa/src/api/routes/admin/payment-collections/index.ts index 3a9c3a5678..2f90f14fb4 100644 --- a/packages/medusa/src/api/routes/admin/payment-collections/index.ts +++ b/packages/medusa/src/api/routes/admin/payment-collections/index.ts @@ -4,21 +4,15 @@ import middlewares, { transformBody, transformQuery, } from "../../../middlewares" -import OrderEditingFeatureFlag from "../../../../loaders/feature-flags/order-editing" -import { isFeatureFlagEnabled } from "../../../middlewares/feature-flag-enabled" +import { PaymentCollection } from "../../../../models" import { GetPaymentCollectionsParams } from "./get-payment-collection" import { AdminUpdatePaymentCollectionsReq } from "./update-payment-collection" -import { PaymentCollection } from "../../../../models" const route = Router() export default (app, container) => { - app.use( - "/payment-collections", - isFeatureFlagEnabled(OrderEditingFeatureFlag.key), - route - ) + app.use("/payment-collections", route) route.get( "/:id", diff --git a/packages/medusa/src/api/routes/admin/payments/index.ts b/packages/medusa/src/api/routes/admin/payments/index.ts index 600a5db8fb..9d03185eb3 100644 --- a/packages/medusa/src/api/routes/admin/payments/index.ts +++ b/packages/medusa/src/api/routes/admin/payments/index.ts @@ -4,17 +4,15 @@ import middlewares, { transformBody, transformQuery, } from "../../../middlewares" -import OrderEditingFeatureFlag from "../../../../loaders/feature-flags/order-editing" -import { isFeatureFlagEnabled } from "../../../middlewares/feature-flag-enabled" +import { Payment, Refund } from "../../../../models" import { GetPaymentsParams } from "./get-payment" import { AdminPostPaymentRefundsReq } from "./refund-payment" -import { Payment, Refund } from "../../../../models" const route = Router() export default (app, container) => { - app.use("/payments", isFeatureFlagEnabled(OrderEditingFeatureFlag.key), route) + app.use("/payments", route) route.get( "/:id", diff --git a/packages/medusa/src/api/routes/store/order-edits/__tests__/complete-order-edit.ts b/packages/medusa/src/api/routes/store/order-edits/__tests__/complete-order-edit.ts index f86549b3fc..e76ac939d7 100644 --- a/packages/medusa/src/api/routes/store/order-edits/__tests__/complete-order-edit.ts +++ b/packages/medusa/src/api/routes/store/order-edits/__tests__/complete-order-edit.ts @@ -1,7 +1,6 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" describe("GET /store/order-edits/:id/complete", () => { describe("successfully complete an order edit", () => { @@ -12,9 +11,6 @@ describe("GET /store/order-edits/:id/complete", () => { subject = await request( "POST", `/store/order-edits/${orderEditId}/complete`, - { - flags: [OrderEditingFeatureFlag], - } ) }) @@ -44,7 +40,6 @@ describe("GET /store/order-edits/:id/complete", () => { "POST", `/store/order-edits/${orderEditId}/complete`, { - flags: [OrderEditingFeatureFlag], clientSession: { jwt: { user: IdMap.getId("lebron"), diff --git a/packages/medusa/src/api/routes/store/order-edits/__tests__/decline-order-edit.ts b/packages/medusa/src/api/routes/store/order-edits/__tests__/decline-order-edit.ts index 02b25c3f85..c8cd8af90a 100644 --- a/packages/medusa/src/api/routes/store/order-edits/__tests__/decline-order-edit.ts +++ b/packages/medusa/src/api/routes/store/order-edits/__tests__/decline-order-edit.ts @@ -1,7 +1,6 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" describe("GET /store/order-edits/:id/decline", () => { describe("successfully decline an order edit", () => { @@ -18,7 +17,6 @@ describe("GET /store/order-edits/:id/decline", () => { `/store/order-edits/${orderEditId}/decline`, { payload, - flags: [OrderEditingFeatureFlag], } ) }) diff --git a/packages/medusa/src/api/routes/store/order-edits/__tests__/get-order.ts b/packages/medusa/src/api/routes/store/order-edits/__tests__/get-order.ts index 8127e5fda3..833dabce2b 100644 --- a/packages/medusa/src/api/routes/store/order-edits/__tests__/get-order.ts +++ b/packages/medusa/src/api/routes/store/order-edits/__tests__/get-order.ts @@ -1,10 +1,9 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit" -import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing" import { defaultStoreOrderEditFields, - defaultStoreOrderEditRelations, + defaultStoreOrderEditRelations } from "../../../../../types/order-edit" describe("GET /store/order-edits/:id", () => { @@ -13,9 +12,7 @@ describe("GET /store/order-edits/:id", () => { let subject beforeAll(async () => { - subject = await request("GET", `/store/order-edits/${orderEditId}`, { - flags: [OrderEditingFeatureFlag], - }) + subject = await request("GET", `/store/order-edits/${orderEditId}`) }) afterAll(() => { diff --git a/packages/medusa/src/api/routes/store/order-edits/index.ts b/packages/medusa/src/api/routes/store/order-edits/index.ts index 65bd9845e4..f7c4b91103 100644 --- a/packages/medusa/src/api/routes/store/order-edits/index.ts +++ b/packages/medusa/src/api/routes/store/order-edits/index.ts @@ -1,26 +1,20 @@ import { Router } from "express" -import middlewares, { - transformBody, - transformQuery, -} from "../../../middlewares" +import { OrderEdit } from "../../../../models" import { FindParams } from "../../../../types/common" -import { isFeatureFlagEnabled } from "../../../middlewares/feature-flag-enabled" -import OrderEditingFeatureFlag from "../../../../loaders/feature-flags/order-editing" import { defaultStoreOrderEditFields, defaultStoreOrderEditRelations, } from "../../../../types/order-edit" -import { OrderEdit } from "../../../../models" +import middlewares, { + transformBody, + transformQuery, +} from "../../../middlewares" import { StorePostOrderEditsOrderEditDecline } from "./decline-order-edit" const route = Router() export default (app) => { - app.use( - "/order-edits", - isFeatureFlagEnabled(OrderEditingFeatureFlag.key), - route - ) + app.use("/order-edits", route) route.get( "/:id", diff --git a/packages/medusa/src/api/routes/store/payment-collections/index.ts b/packages/medusa/src/api/routes/store/payment-collections/index.ts index 013ad4fab2..e0e38ecd42 100644 --- a/packages/medusa/src/api/routes/store/payment-collections/index.ts +++ b/packages/medusa/src/api/routes/store/payment-collections/index.ts @@ -5,23 +5,16 @@ import middlewares, { transformQuery, } from "../../../middlewares" -import OrderEditingFeatureFlag from "../../../../loaders/feature-flags/order-editing" -import { isFeatureFlagEnabled } from "../../../middlewares/feature-flag-enabled" - -import { StorePostPaymentCollectionsBatchSessionsReq } from "./manage-batch-payment-sessions" -import { GetPaymentCollectionsParams } from "./get-payment-collection" import { PaymentCollection, PaymentSession } from "../../../../models" -import { StorePaymentCollectionSessionsReq } from "./manage-payment-session" import { StorePostPaymentCollectionsBatchSessionsAuthorizeReq } from "./authorize-batch-payment-sessions" +import { GetPaymentCollectionsParams } from "./get-payment-collection" +import { StorePostPaymentCollectionsBatchSessionsReq } from "./manage-batch-payment-sessions" +import { StorePaymentCollectionSessionsReq } from "./manage-payment-session" const route = Router() export default (app, container) => { - app.use( - "/payment-collections", - isFeatureFlagEnabled(OrderEditingFeatureFlag.key), - route - ) + app.use("/payment-collections", route) route.get( "/:id", @@ -86,8 +79,8 @@ export type StorePaymentCollectionsSessionRes = { payment_session: PaymentSession } -export * from "./get-payment-collection" -export * from "./manage-payment-session" -export * from "./manage-batch-payment-sessions" -export * from "./refresh-payment-session" export * from "./authorize-batch-payment-sessions" +export * from "./get-payment-collection" +export * from "./manage-batch-payment-sessions" +export * from "./manage-payment-session" +export * from "./refresh-payment-session" diff --git a/packages/medusa/src/loaders/feature-flags/index.ts b/packages/medusa/src/loaders/feature-flags/index.ts index 31f38fad3a..6609bba3c8 100644 --- a/packages/medusa/src/loaders/feature-flags/index.ts +++ b/packages/medusa/src/loaders/feature-flags/index.ts @@ -1,10 +1,10 @@ import glob from "glob" import path from "path" +import { isDefined } from "medusa-core-utils" import { trackFeatureFlag } from "medusa-telemetry" import { FlagSettings } from "../../types/feature-flags" import { Logger } from "../../types/global" -import { isDefined } from "medusa-core-utils" import { FlagRouter } from "../../utils/flag-router" const isTruthy = (val: string | boolean | undefined): boolean => { diff --git a/packages/medusa/src/loaders/feature-flags/order-editing.ts b/packages/medusa/src/loaders/feature-flags/order-editing.ts index 2e6601fc4b..32c52d7497 100644 --- a/packages/medusa/src/loaders/feature-flags/order-editing.ts +++ b/packages/medusa/src/loaders/feature-flags/order-editing.ts @@ -2,7 +2,7 @@ import { FlagSettings } from "../../types/feature-flags" const OrderEditingFeatureFlag: FlagSettings = { key: "order_editing", - default_val: false, + default_val: true, env_key: "MEDUSA_FF_ORDER_EDITING", description: "[WIP] Enable the order editing feature", } diff --git a/packages/medusa/src/migrations/1663059812399-order_editing.ts b/packages/medusa/src/migrations/1663059812399-order_editing.ts index 46ee7e5da4..03a043248a 100644 --- a/packages/medusa/src/migrations/1663059812399-order_editing.ts +++ b/packages/medusa/src/migrations/1663059812399-order_editing.ts @@ -1,9 +1,5 @@ import { MigrationInterface, QueryRunner } from "typeorm" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" - -export const featureFlag = OrderEditingFeatureFlag.key - export class orderEditing1663059812399 implements MigrationInterface { name = "orderEditing1663059812399" diff --git a/packages/medusa/src/migrations/1663059812400-linte-item-original-item-relation.ts b/packages/medusa/src/migrations/1663059812400-linte-item-original-item-relation.ts index 8818ed26a8..23200d95a6 100644 --- a/packages/medusa/src/migrations/1663059812400-linte-item-original-item-relation.ts +++ b/packages/medusa/src/migrations/1663059812400-linte-item-original-item-relation.ts @@ -1,9 +1,5 @@ import { MigrationInterface, QueryRunner } from "typeorm" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" - -export const featureFlag = OrderEditingFeatureFlag.key - export class lineItemOriginalItemRelation1663059812400 implements MigrationInterface { diff --git a/packages/medusa/src/migrations/1664880666982-payment-collection.ts b/packages/medusa/src/migrations/1664880666982-payment-collection.ts index e08ce1b331..7af8e1131b 100644 --- a/packages/medusa/src/migrations/1664880666982-payment-collection.ts +++ b/packages/medusa/src/migrations/1664880666982-payment-collection.ts @@ -1,9 +1,5 @@ import { MigrationInterface, QueryRunner } from "typeorm" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" - -export const featureFlag = OrderEditingFeatureFlag.key - export class paymentCollection1664880666982 implements MigrationInterface { name = "paymentCollection1664880666982" diff --git a/packages/medusa/src/models/index.ts b/packages/medusa/src/models/index.ts index 59eceac832..82e7064636 100644 --- a/packages/medusa/src/models/index.ts +++ b/packages/medusa/src/models/index.ts @@ -2,7 +2,6 @@ export * from "./address" export * from "./analytics-config" export * from "./batch-job" export * from "./cart" -export * from "./product-category" export * from "./claim-image" export * from "./claim-item" export * from "./claim-order" @@ -45,6 +44,7 @@ export * from "./payment-provider" export * from "./payment-session" export * from "./price-list" export * from "./product" +export * from "./product-category" export * from "./product-collection" export * from "./product-option" export * from "./product-option-value" @@ -61,7 +61,6 @@ export * from "./region" export * from "./return" export * from "./return-item" export * from "./return-reason" -export * from "./sales-channel-location" export * from "./sales-channel" export * from "./sales-channel-location" export * from "./shipping-method" diff --git a/packages/medusa/src/models/line-item.ts b/packages/medusa/src/models/line-item.ts index 58f03375b1..03688f4646 100644 --- a/packages/medusa/src/models/line-item.ts +++ b/packages/medusa/src/models/line-item.ts @@ -6,42 +6,35 @@ import { Index, JoinColumn, ManyToOne, - OneToMany, + OneToMany } from "typeorm" import { BaseEntity } from "../interfaces" +import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" +import { generateEntityId } from "../utils" +import { DbAwareColumn } from "../utils/db-aware-column" +import { FeatureFlagColumn } from "../utils/feature-flag-decorators" import { Cart } from "./cart" import { ClaimOrder } from "./claim-order" -import { DbAwareColumn } from "../utils/db-aware-column" import { LineItemAdjustment } from "./line-item-adjustment" import { LineItemTaxLine } from "./line-item-tax-line" import { Order } from "./order" +import { OrderEdit } from "./order-edit" import { ProductVariant } from "./product-variant" import { Swap } from "./swap" -import { generateEntityId } from "../utils" -import { - FeatureFlagClassDecorators, - FeatureFlagColumn, - FeatureFlagDecorators, -} from "../utils/feature-flag-decorators" -import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" -import { OrderEdit } from "./order-edit" @Check(`"fulfilled_quantity" <= "quantity"`) @Check(`"shipped_quantity" <= "fulfilled_quantity"`) @Check(`"returned_quantity" <= "quantity"`) @Check(`"quantity" > 0`) -@FeatureFlagClassDecorators(OrderEditingFeatureFlag.key, [ - Index( - "unique_li_original_item_id_order_edit_id", - ["order_edit_id", "original_item_id"], - { - unique: true, - where: "WHERE original_item_id IS NOT NULL AND order_edit_id IS NOT NULL", - } - ), -]) +@Index( + "unique_li_original_item_id_order_edit_id", + ["order_edit_id", "original_item_id"], + { + unique: true, + where: "original_item_id IS NOT NULL AND order_edit_id IS NOT NULL", + } +) @Entity() export class LineItem extends BaseEntity { @Index() @@ -84,25 +77,14 @@ export class LineItem extends BaseEntity { }) adjustments: LineItemAdjustment[] - @FeatureFlagColumn(OrderEditingFeatureFlag.key, { - nullable: true, - type: "varchar", - }) + @Column({ nullable: true, type: "varchar" }) original_item_id?: string | null - @FeatureFlagColumn(OrderEditingFeatureFlag.key, { - nullable: true, - type: "varchar", - }) + @Column({ nullable: true, type: "varchar" }) order_edit_id?: string | null - @FeatureFlagDecorators(OrderEditingFeatureFlag.key, [ - ManyToOne( - () => OrderEdit, - (orderEdit) => orderEdit.items - ), - JoinColumn({ name: "order_edit_id" }), - ]) + @ManyToOne(() => OrderEdit, (orderEdit) => orderEdit.items) + @JoinColumn({ name: "order_edit_id" }) order_edit?: OrderEdit | null @Column() diff --git a/packages/medusa/src/models/order-edit.ts b/packages/medusa/src/models/order-edit.ts index 3cc3dea8d2..8bb2d904d8 100644 --- a/packages/medusa/src/models/order-edit.ts +++ b/packages/medusa/src/models/order-edit.ts @@ -2,18 +2,17 @@ import { AfterLoad, BeforeInsert, Column, + Entity, Index, JoinColumn, ManyToOne, OneToMany, - OneToOne + OneToOne, } from "typeorm" import { BaseEntity } from "../interfaces" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" import { generateEntityId } from "../utils" import { resolveDbType } from "../utils/db-aware-column" -import { FeatureFlagEntity } from "../utils/feature-flag-decorators" import { LineItem, Order, OrderItemChange, PaymentCollection } from "." @@ -25,7 +24,7 @@ export enum OrderEditStatus { CANCELED = "canceled", } -@FeatureFlagEntity(OrderEditingFeatureFlag.key) +@Entity() export class OrderEdit extends BaseEntity { @Index() @Column() diff --git a/packages/medusa/src/models/order-item-change.ts b/packages/medusa/src/models/order-item-change.ts index 06b007b6b0..121c5e190b 100644 --- a/packages/medusa/src/models/order-item-change.ts +++ b/packages/medusa/src/models/order-item-change.ts @@ -1,6 +1,7 @@ import { BeforeInsert, Column, + Entity, JoinColumn, ManyToOne, OneToOne, @@ -8,12 +9,10 @@ import { } from "typeorm" import { SoftDeletableEntity } from "../interfaces" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" -import { FeatureFlagEntity } from "../utils/feature-flag-decorators" import { generateEntityId } from "../utils" import { DbAwareColumn } from "../utils/db-aware-column" -import { OrderEdit } from "./order-edit" import { LineItem } from "./line-item" +import { OrderEdit } from "./order-edit" export enum OrderEditItemChangeType { ITEM_ADD = "item_add", @@ -21,9 +20,9 @@ export enum OrderEditItemChangeType { ITEM_UPDATE = "item_update", } -@FeatureFlagEntity(OrderEditingFeatureFlag.key) @Unique(["order_edit_id", "original_line_item_id"]) @Unique(["order_edit_id", "line_item_id"]) +@Entity() export class OrderItemChange extends SoftDeletableEntity { @DbAwareColumn({ type: "enum", diff --git a/packages/medusa/src/models/order.ts b/packages/medusa/src/models/order.ts index a1b9ba74ae..fd2b759e03 100644 --- a/packages/medusa/src/models/order.ts +++ b/packages/medusa/src/models/order.ts @@ -21,8 +21,10 @@ import { FeatureFlagDecorators, } from "../utils/feature-flag-decorators" -import { Address } from "./address" import { BaseEntity } from "../interfaces/models/base-entity" +import { generateEntityId } from "../utils/generate-entity-id" +import { manualAutoIncrement } from "../utils/manual-auto-increment" +import { Address } from "./address" import { Cart } from "./cart" import { ClaimOrder } from "./claim-order" import { Currency } from "./currency" @@ -33,6 +35,7 @@ import { Fulfillment } from "./fulfillment" import { GiftCard } from "./gift-card" import { GiftCardTransaction } from "./gift-card-transaction" import { LineItem } from "./line-item" +import { OrderEdit } from "./order-edit" import { Payment } from "./payment" import { Refund } from "./refund" import { Region } from "./region" @@ -40,10 +43,6 @@ import { Return } from "./return" import { SalesChannel } from "./sales-channel" import { ShippingMethod } from "./shipping-method" import { Swap } from "./swap" -import { generateEntityId } from "../utils/generate-entity-id" -import { manualAutoIncrement } from "../utils/manual-auto-increment" -import { OrderEdit } from "./order-edit" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" export enum OrderStatus { PENDING = "pending", @@ -211,12 +210,7 @@ export class Order extends BaseEntity { @JoinColumn({ name: "draft_order_id" }) draft_order: DraftOrder - @FeatureFlagDecorators(OrderEditingFeatureFlag.key, [ - OneToMany( - () => OrderEdit, - (oe) => oe.order - ), - ]) + @OneToMany(() => OrderEdit, (oe) => oe.order) edits: OrderEdit[] @OneToMany(() => LineItem, (lineItem) => lineItem.order, { diff --git a/packages/medusa/src/models/payment-collection.ts b/packages/medusa/src/models/payment-collection.ts index cf2dd13e26..a2b1d32642 100644 --- a/packages/medusa/src/models/payment-collection.ts +++ b/packages/medusa/src/models/payment-collection.ts @@ -1,6 +1,7 @@ import { BeforeInsert, Column, + Entity, Index, JoinColumn, JoinTable, @@ -8,13 +9,10 @@ import { ManyToOne, } from "typeorm" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" -import { generateEntityId } from "../utils" import { Currency, Payment, PaymentSession, Region } from "." - -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" -import { FeatureFlagEntity } from "../utils/feature-flag-decorators" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" +import { generateEntityId } from "../utils" +import { DbAwareColumn } from "../utils/db-aware-column" export enum PaymentCollectionStatus { NOT_PAID = "not_paid", @@ -28,7 +26,7 @@ export enum PaymentCollectionType { ORDER_EDIT = "order_edit", } -@FeatureFlagEntity(OrderEditingFeatureFlag.key) +@Entity() export class PaymentCollection extends SoftDeletableEntity { @DbAwareColumn({ type: "enum", enum: PaymentCollectionType }) type: PaymentCollectionType diff --git a/packages/medusa/src/models/payment-session.ts b/packages/medusa/src/models/payment-session.ts index beb3e35981..c4056e97d6 100644 --- a/packages/medusa/src/models/payment-session.ts +++ b/packages/medusa/src/models/payment-session.ts @@ -1,11 +1,17 @@ -import { BeforeInsert, Column, Entity, Index, JoinColumn, ManyToOne, Unique, } from "typeorm" +import { + BeforeInsert, + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + Unique, +} from "typeorm" import { BaseEntity } from "../interfaces" -import { Cart } from "./cart" -import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { generateEntityId } from "../utils" -import { FeatureFlagDecorators } from "../utils/feature-flag-decorators" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" +import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" +import { Cart } from "./cart" export enum PaymentSessionStatus { AUTHORIZED = "authorized", @@ -16,8 +22,10 @@ export enum PaymentSessionStatus { } @Unique("OneSelected", ["cart_id", "is_selected"]) -// TODO: This uniq constraint should be updated once the order edit flag is dropped and should add a where clause on cart_id is not null -@Unique("UniqPaymentSessionCartIdProviderId", ["cart_id", "provider_id"]) +@Index("UniqPaymentSessionCartIdProviderId", ["cart_id", "provider_id"], { + unique: true, + where: "cart_id IS NOT NULL", +}) @Entity() export class PaymentSession extends BaseEntity { @Index() @@ -47,14 +55,10 @@ export class PaymentSession extends BaseEntity { @Column({ nullable: true }) idempotency_key: string - @FeatureFlagDecorators(OrderEditingFeatureFlag.key, [ - Column({ type: "integer", nullable: true }), - ]) + @Column({ type: "integer", nullable: true }) amount: number - @FeatureFlagDecorators(OrderEditingFeatureFlag.key, [ - Column({ type: resolveDbType("timestamptz"), nullable: true }), - ]) + @Column({ type: resolveDbType("timestamptz"), nullable: true }) payment_authorized_at: Date @BeforeInsert() diff --git a/packages/medusa/src/models/refund.ts b/packages/medusa/src/models/refund.ts index 047c1700e4..6b0640a30a 100644 --- a/packages/medusa/src/models/refund.ts +++ b/packages/medusa/src/models/refund.ts @@ -10,11 +10,9 @@ import { import { BaseEntity } from "../interfaces/models/base-entity" import { DbAwareColumn } from "../utils/db-aware-column" -import { Order } from "./order" import { generateEntityId } from "../utils/generate-entity-id" +import { Order } from "./order" import { Payment } from "./payment" -import { FeatureFlagDecorators } from "../utils/feature-flag-decorators" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" export enum RefundReason { DISCOUNT = "discount", @@ -30,20 +28,16 @@ export class Refund extends BaseEntity { @Column({ nullable: true }) order_id: string - @FeatureFlagDecorators(OrderEditingFeatureFlag.key, [ - Index(), - Column({ nullable: true }), - ]) + @Index() + @Column({ nullable: true }) payment_id: string @ManyToOne(() => Order, (order) => order.payments) @JoinColumn({ name: "order_id" }) order: Order - @FeatureFlagDecorators(OrderEditingFeatureFlag.key, [ - OneToOne(() => Payment, { nullable: true }), - JoinColumn({ name: "payment_id" }), - ]) + @OneToOne(() => Payment, { nullable: true }) + @JoinColumn({ name: "payment_id" }) payment: Payment @Column({ type: "int" }) diff --git a/packages/medusa/src/services/__tests__/line-item.js b/packages/medusa/src/services/__tests__/line-item.js index 19a0def6f3..5c6659d620 100644 --- a/packages/medusa/src/services/__tests__/line-item.js +++ b/packages/medusa/src/services/__tests__/line-item.js @@ -4,7 +4,6 @@ import LineItemService from "../line-item" import { PricingServiceMock } from "../__mocks__/pricing" import { ProductVariantServiceMock } from "../__mocks__/product-variant" import { RegionServiceMock } from "../__mocks__/region" - ;[true, false].forEach((isTaxInclusiveEnabled) => { describe(`tax inclusive flag set to: ${isTaxInclusiveEnabled}`, () => { describe("LineItemService", () => { @@ -428,6 +427,7 @@ describe("LineItemService", () => { thumbnail: "", variant_id: IdMap.getId("test-variant"), quantity: 1, + order_edit_id: null, allow_discounts: undefined, is_giftcard: undefined, metadata: {}, @@ -464,6 +464,7 @@ describe("LineItemService", () => { variant_id: IdMap.getId("test-variant"), quantity: 1, allow_discounts: undefined, + order_edit_id: null, is_giftcard: undefined, metadata: {}, should_merge: true, @@ -585,6 +586,7 @@ describe("LineItemService", () => { variant_id: IdMap.getId("test-variant"), quantity: 1, allow_discounts: undefined, + order_edit_id: null, is_giftcard: undefined, metadata: {}, should_merge: true, @@ -621,6 +623,7 @@ describe("LineItemService", () => { quantity: 1, allow_discounts: undefined, is_giftcard: undefined, + order_edit_id: null, metadata: {}, should_merge: true, includes_tax: false, diff --git a/packages/medusa/src/services/line-item.ts b/packages/medusa/src/services/line-item.ts index 177d58a153..54a5385b95 100644 --- a/packages/medusa/src/services/line-item.ts +++ b/packages/medusa/src/services/line-item.ts @@ -3,7 +3,6 @@ import { EntityManager, In } from "typeorm" import { DeepPartial } from "typeorm/common/DeepPartial" import { TransactionBaseService } from "../interfaces" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import { LineItem, @@ -70,6 +69,7 @@ class LineItemService extends TransactionBaseService { taxProviderService, featureFlagRouter, }: InjectedDependencies) { + // eslint-disable-next-line prefer-rest-params super(arguments[0]) this.manager_ = manager @@ -348,9 +348,7 @@ class LineItemService extends TransactionBaseService { rawLineItem.includes_tax = unitPriceIncludesTax } - if (this.featureFlagRouter_.isFeatureEnabled(OrderEditingFeatureFlag.key)) { - rawLineItem.order_edit_id = context.order_edit_id || null - } + rawLineItem.order_edit_id = context.order_edit_id || null const lineItemRepo = transactionManager.getCustomRepository( this.lineItemRepository_ diff --git a/packages/medusa/src/services/payment-provider.ts b/packages/medusa/src/services/payment-provider.ts index 6f56593171..4f919d4e62 100644 --- a/packages/medusa/src/services/payment-provider.ts +++ b/packages/medusa/src/services/payment-provider.ts @@ -1,18 +1,12 @@ import { isDefined, MedusaError } from "medusa-core-utils" import { BasePaymentService } from "medusa-interfaces" +import { EntityManager } from "typeorm" import { AbstractPaymentService, PaymentContext, PaymentSessionResponse, TransactionBaseService, } from "../interfaces" -import { EntityManager } from "typeorm" -import { PaymentSessionRepository } from "../repositories/payment-session" -import { PaymentRepository } from "../repositories/payment" -import { RefundRepository } from "../repositories/refund" -import { PaymentProviderRepository } from "../repositories/payment-provider" -import { buildQuery, isString } from "../utils" -import { FindConfig, Selector } from "../types/common" import { Cart, Payment, @@ -21,12 +15,17 @@ import { PaymentSessionStatus, Refund, } from "../models" -import { FlagRouter } from "../utils/flag-router" -import OrderEditingFeatureFlag from "../loaders/feature-flags/order-editing" -import PaymentService from "./payment" +import { PaymentRepository } from "../repositories/payment" +import { PaymentProviderRepository } from "../repositories/payment-provider" +import { PaymentSessionRepository } from "../repositories/payment-session" +import { RefundRepository } from "../repositories/refund" +import { FindConfig, Selector } from "../types/common" import { Logger } from "../types/global" import { CreatePaymentInput, PaymentSessionInput } from "../types/payment" +import { buildQuery, isString } from "../utils" +import { FlagRouter } from "../utils/flag-router" import { CustomerService } from "./index" +import PaymentService from "./payment" type PaymentProviderKey = `pp_${string}` | "systemPaymentProviderService" type InjectedDependencies = { @@ -414,10 +413,7 @@ export default class PaymentProviderService extends TransactionBaseService { session.data = data session.status = status - if ( - this.featureFlagRouter_.isFeatureEnabled(OrderEditingFeatureFlag.key) && - status === PaymentSessionStatus.AUTHORIZED - ) { + if (status === PaymentSessionStatus.AUTHORIZED) { session.payment_authorized_at = new Date() }