From c1c470e6b8646c5f0b4bca56a8e785f6c34e1fef Mon Sep 17 00:00:00 2001 From: Philip Korsholm <88927411+pKorsholm@users.noreply.github.com> Date: Thu, 21 Dec 2023 08:29:41 +0100 Subject: [PATCH] fix(medusa, pricing, types): pass dates as Date-objects rather than strings to the pricing module (#5768) * init * remove date string validator; * add transformOptionalDate transformer to api * move type conversion to the datalayer * fix final module integration test * update arrow-function * make string optional * move work to utils * make check for value exists * move util back to pricng * change utils * refactor get-iso-string * fix build * flip transform condition * add null check for isDate * feat(pricing): Separate Pricing Module internal types from `@medusajs/types` (#5777) * create types for pricing repositories * create RepositoryTypes input * add service types * use models for repository types * fix build * update types to match interface types * add aliases * types instead of moduletypes * move repository to types for pricing module * add changeset * fix merge error * fix conflict * fix build * re-add validation of dates in updatePriceLists_ --- .changeset/small-kangaroos-camp.md | 6 + .../admin/create-price-list.spec.ts | 3 +- .../__tests__/create-price-list.ts | 6 +- .../admin/price-lists/create-price-list.ts | 5 +- .../admin/price-lists/update-price-list.ts | 5 +- .../src/scripts/migrate-to-pricing-module.ts | 2 - .../src/utils/validators/date-transform.ts | 10 +- .../services/price-list/index.spec.ts | 5 +- .../pricing-module/calculate-price.spec.ts | 12 +- .../pricing-module/price-list.spec.ts | 133 ++++++++++++++++-- packages/pricing/jest.config.js | 2 + packages/pricing/src/initialize/index.ts | 5 +- packages/pricing/src/repositories/currency.ts | 15 +- .../pricing/src/repositories/money-amount.ts | 15 +- .../src/repositories/price-list-rule-value.ts | 12 +- .../src/repositories/price-list-rule.ts | 15 +- .../pricing/src/repositories/price-list.ts | 31 ++-- .../pricing/src/repositories/price-rule.ts | 14 +- .../price-set-money-amount-rules.ts | 15 +- .../repositories/price-set-money-amount.ts | 15 +- .../src/repositories/price-set-rule-type.ts | 15 +- .../pricing/src/repositories/price-set.ts | 16 +-- packages/pricing/src/repositories/pricing.ts | 6 +- .../pricing/src/repositories/rule-type.ts | 15 +- packages/pricing/src/services/currency.ts | 23 +-- packages/pricing/src/services/money-amount.ts | 19 +-- .../src/services/price-list-rule-value.ts | 23 ++- .../pricing/src/services/price-list-rule.ts | 21 +-- packages/pricing/src/services/price-list.ts | 22 +-- packages/pricing/src/services/price-rule.ts | 20 +-- .../services/price-set-money-amount-rules.ts | 23 +-- .../src/services/price-set-money-amount.ts | 23 +-- .../src/services/price-set-rule-type.ts | 23 +-- packages/pricing/src/services/price-set.ts | 20 +-- .../pricing/src/services/pricing-module.ts | 47 ++++--- packages/pricing/src/services/rule-type.ts | 19 +-- packages/pricing/src/types/index.ts | 3 +- .../src/types/repositories/currency.ts | 13 ++ .../pricing/src/types/repositories/index.ts | 12 +- .../src/types/repositories/money-amount.ts | 18 +++ .../src/types/repositories/price-list-rule.ts | 16 +++ .../src/types/repositories/price-list.ts | 13 +- .../src/types/repositories/price-rule.ts | 24 ++++ .../price-set-money-amount-rules.ts | 12 ++ .../repositories/price-set-money-amount.ts | 15 ++ .../types/repositories/price-set-rule-type.ts | 12 ++ .../src/types/repositories/price-set.ts | 5 + .../pricing/src/types/repositories/pricing.ts | 14 -- .../src/types/repositories/rule-type.ts | 13 ++ .../pricing/src/types/services/currency.ts | 27 ++++ packages/pricing/src/types/services/index.ts | 12 ++ .../src/types/services/money-amount.ts | 39 +++++ .../types/services/price-list-rule-value.ts | 26 ++++ .../src/types/services/price-list-rule.ts | 37 +++++ .../pricing/src/types/services/price-list.ts | 50 +++++++ .../pricing/src/types/services/price-rule.ts | 44 ++++++ .../services/price-set-money-amount-rules.ts | 33 +++++ .../types/services/price-set-money-amount.ts | 39 +++++ .../src/types/services/price-set-rule-type.ts | 26 ++++ .../pricing/src/types/services/price-set.ts | 24 ++++ .../pricing/src/types/services/pricing.ts | 28 ++++ .../pricing/src/types/services/rule-type.ts | 29 ++++ packages/pricing/src/utils/index.ts | 1 + .../src/utils/validate-price-list-dates.ts | 20 +++ packages/pricing/tsconfig.json | 29 +++- .../types/src/pricing/common/price-list.ts | 20 +-- .../types/src/pricing/common/price-set.ts | 17 ++- .../workflow/price-list/create-price-list.ts | 4 +- .../workflow/price-list/update-price-list.ts | 4 +- .../src/common/get-iso-string-from-date.ts | 15 ++ packages/utils/src/common/index.ts | 1 + packages/utils/src/common/is-date.ts | 3 +- 72 files changed, 1049 insertions(+), 310 deletions(-) create mode 100644 .changeset/small-kangaroos-camp.md create mode 100644 packages/pricing/src/types/repositories/currency.ts create mode 100644 packages/pricing/src/types/repositories/money-amount.ts create mode 100644 packages/pricing/src/types/repositories/price-list-rule.ts create mode 100644 packages/pricing/src/types/repositories/price-rule.ts create mode 100644 packages/pricing/src/types/repositories/price-set-money-amount-rules.ts create mode 100644 packages/pricing/src/types/repositories/price-set-money-amount.ts create mode 100644 packages/pricing/src/types/repositories/price-set-rule-type.ts create mode 100644 packages/pricing/src/types/repositories/price-set.ts delete mode 100644 packages/pricing/src/types/repositories/pricing.ts create mode 100644 packages/pricing/src/types/repositories/rule-type.ts create mode 100644 packages/pricing/src/types/services/currency.ts create mode 100644 packages/pricing/src/types/services/index.ts create mode 100644 packages/pricing/src/types/services/money-amount.ts create mode 100644 packages/pricing/src/types/services/price-list-rule-value.ts create mode 100644 packages/pricing/src/types/services/price-list-rule.ts create mode 100644 packages/pricing/src/types/services/price-list.ts create mode 100644 packages/pricing/src/types/services/price-rule.ts create mode 100644 packages/pricing/src/types/services/price-set-money-amount-rules.ts create mode 100644 packages/pricing/src/types/services/price-set-money-amount.ts create mode 100644 packages/pricing/src/types/services/price-set-rule-type.ts create mode 100644 packages/pricing/src/types/services/price-set.ts create mode 100644 packages/pricing/src/types/services/pricing.ts create mode 100644 packages/pricing/src/types/services/rule-type.ts create mode 100644 packages/pricing/src/utils/index.ts create mode 100644 packages/pricing/src/utils/validate-price-list-dates.ts create mode 100644 packages/utils/src/common/get-iso-string-from-date.ts diff --git a/.changeset/small-kangaroos-camp.md b/.changeset/small-kangaroos-camp.md new file mode 100644 index 0000000000..66a92b5990 --- /dev/null +++ b/.changeset/small-kangaroos-camp.md @@ -0,0 +1,6 @@ +--- +"@medusajs/pricing": patch +"@medusajs/types": patch +--- + +feat(types, pricing): separate internal pricing module types from types module diff --git a/integration-tests/plugins/__tests__/price-lists/admin/create-price-list.spec.ts b/integration-tests/plugins/__tests__/price-lists/admin/create-price-list.spec.ts index 217e840e15..0fb3eefb04 100644 --- a/integration-tests/plugins/__tests__/price-lists/admin/create-price-list.spec.ts +++ b/integration-tests/plugins/__tests__/price-lists/admin/create-price-list.spec.ts @@ -105,6 +105,7 @@ describe("POST /admin/price-lists", () => { type: "override", customer_groups: [{ id: "customer-group-1" }], status: "active", + starts_at: new Date(), prices: [ { amount: 400, @@ -132,7 +133,7 @@ describe("POST /admin/price-lists", () => { description: "test", type: "override", status: "active", - starts_at: null, + starts_at: expect.any(String), ends_at: null, customer_groups: [ { diff --git a/packages/medusa/src/api/routes/admin/price-lists/__tests__/create-price-list.ts b/packages/medusa/src/api/routes/admin/price-lists/__tests__/create-price-list.ts index bdac501f27..276d7e2064 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/__tests__/create-price-list.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/__tests__/create-price-list.ts @@ -1,6 +1,6 @@ import { IdMap } from "medusa-test-utils" -import { request } from "../../../../../helpers/test-request" import { PriceListServiceMock } from "../../../../../services/__mocks__/price-list" +import { request } from "../../../../../helpers/test-request" jest.setTimeout(10000) describe("POST /price-lists", () => { @@ -58,8 +58,8 @@ describe("POST /price-lists", () => { expect(PriceListServiceMock.create).toHaveBeenCalledWith({ name: "My Price List", description: "testing", - ends_at: "2022-03-14T08:28:38.551Z", - starts_at: "2022-03-14T08:28:38.551Z", + ends_at: new Date("2022-03-14T08:28:38.551Z"), + starts_at: new Date("2022-03-14T08:28:38.551Z"), customer_groups: [ { id: "gc_123", diff --git a/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts b/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts index bb7b9f16cd..6eaa978307 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts @@ -6,7 +6,7 @@ import { PriceListType, } from "@medusajs/utils" import { createPriceLists } from "@medusajs/core-flows" -import { Type } from "class-transformer" +import { Transform, Type } from "class-transformer" import { IsArray, IsBoolean, @@ -27,6 +27,7 @@ import { } from "../../../../types/price-list" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" import { getPriceListPricingModule } from "./modules-queries" +import { transformOptionalDate } from "../../../../utils/validators/date-transform" /** * @oas [post] /admin/price-lists @@ -263,9 +264,11 @@ export class AdminPostPriceListsPriceListReq { description: string @IsOptional() + @Transform(transformOptionalDate) starts_at?: Date @IsOptional() + @Transform(transformOptionalDate) ends_at?: Date @IsOptional() diff --git a/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts b/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts index e85f60c3e1..f6164d6611 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts @@ -11,7 +11,7 @@ import { import { defaultAdminPriceListFields, defaultAdminPriceListRelations } from "." import { updatePriceLists } from "@medusajs/core-flows" -import { Type } from "class-transformer" +import { Transform, Type } from "class-transformer" import { EntityManager } from "typeorm" import { PriceList } from "../../../.." import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing" @@ -20,6 +20,7 @@ import { AdminPriceListPricesUpdateReq } from "../../../../types/price-list" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" import { validator } from "../../../../utils/validator" import { getPriceListPricingModule } from "./modules-queries" +import { transformOptionalDate } from "../../../../utils/validators/date-transform" /** * @oas [post] /admin/price-lists/{id} @@ -238,9 +239,11 @@ export class AdminPostPriceListsPriceListPriceListReq { description?: string @IsOptional() + @Transform(transformOptionalDate) starts_at?: Date | null @IsOptional() + @Transform(transformOptionalDate) ends_at?: Date | null @IsOptional() diff --git a/packages/medusa/src/scripts/migrate-to-pricing-module.ts b/packages/medusa/src/scripts/migrate-to-pricing-module.ts index 53a630b289..562bd72c30 100644 --- a/packages/medusa/src/scripts/migrate-to-pricing-module.ts +++ b/packages/medusa/src/scripts/migrate-to-pricing-module.ts @@ -138,8 +138,6 @@ const migratePriceLists = async (container: AwilixContainer) => { ({ name: title, prices, customer_groups, ...priceList }) => { const createData: PricingTypes.CreatePriceListDTO = { ...priceList, - starts_at: priceList.starts_at?.toISOString(), - ends_at: priceList.ends_at?.toISOString(), title, } diff --git a/packages/medusa/src/utils/validators/date-transform.ts b/packages/medusa/src/utils/validators/date-transform.ts index 08e1e333b3..6e64392f90 100644 --- a/packages/medusa/src/utils/validators/date-transform.ts +++ b/packages/medusa/src/utils/validators/date-transform.ts @@ -1,5 +1,9 @@ +import { isDate } from "@medusajs/utils" + export const transformDate = ({ value }): Date => { - return !isNaN(Date.parse(value)) - ? new Date(value) - : new Date(Number(value) * 1000) + return isDate(value) ? new Date(value) : new Date(Number(value) * 1000) +} + +export const transformOptionalDate = ({ value }) => { + return !isDate(value) ? value : transformDate({ value }) } diff --git a/packages/pricing/integration-tests/__tests__/services/price-list/index.spec.ts b/packages/pricing/integration-tests/__tests__/services/price-list/index.spec.ts index 994036e7ba..eb729bf2ea 100644 --- a/packages/pricing/integration-tests/__tests__/services/price-list/index.spec.ts +++ b/packages/pricing/integration-tests/__tests__/services/price-list/index.spec.ts @@ -1,7 +1,6 @@ +import { MikroOrmWrapper } from "../../../utils" import { PriceListRepository } from "@repositories" import { PriceListService } from "@services" -import { MikroOrmWrapper } from "../../../utils" - import { SqlEntityManager } from "@mikro-orm/postgresql" import { createPriceLists } from "../../../__fixtures__/price-list" @@ -183,7 +182,7 @@ describe("PriceList Service", () => { await service.update([ { id, - starts_at: updateDate.toISOString(), + starts_at: updateDate, }, ]) diff --git a/packages/pricing/integration-tests/__tests__/services/pricing-module/calculate-price.spec.ts b/packages/pricing/integration-tests/__tests__/services/pricing-module/calculate-price.spec.ts index 0b51b03e26..25ada46e25 100644 --- a/packages/pricing/integration-tests/__tests__/services/pricing-module/calculate-price.spec.ts +++ b/packages/pricing/integration-tests/__tests__/services/pricing-module/calculate-price.spec.ts @@ -1575,8 +1575,8 @@ describe("PricingModule Service - Calculate Price", () => { await createPriceLists( service, { - starts_at: yesterday.toISOString(), - ends_at: tomorrow.toISOString(), + starts_at: yesterday, + ends_at: tomorrow, }, {} ) @@ -1651,8 +1651,8 @@ describe("PricingModule Service - Calculate Price", () => { await createPriceLists( service, { - starts_at: tomorrow.toISOString(), - ends_at: tenDaysFromToday.toISOString(), + starts_at: tomorrow, + ends_at: tenDaysFromToday, }, {} ) @@ -1726,8 +1726,8 @@ describe("PricingModule Service - Calculate Price", () => { await createPriceLists( service, { - starts_at: tenDaysAgo.toISOString(), - ends_at: yesterday.toISOString(), + starts_at: tenDaysAgo, + ends_at: yesterday, }, {} ) diff --git a/packages/pricing/integration-tests/__tests__/services/pricing-module/price-list.spec.ts b/packages/pricing/integration-tests/__tests__/services/pricing-module/price-list.spec.ts index 833fac3a45..3dfac8bdc0 100644 --- a/packages/pricing/integration-tests/__tests__/services/pricing-module/price-list.spec.ts +++ b/packages/pricing/integration-tests/__tests__/services/pricing-module/price-list.spec.ts @@ -1,11 +1,11 @@ +import { DB_URL, MikroOrmWrapper } from "../../../utils" + import { IPricingModuleService } from "@medusajs/types" import { SqlEntityManager } from "@mikro-orm/postgresql" -import { initialize } from "../../../../src" - import { createCurrencies } from "../../../__fixtures__/currency" import { createPriceLists } from "../../../__fixtures__/price-list" import { createPriceSets } from "../../../__fixtures__/price-set" -import { DB_URL, MikroOrmWrapper } from "../../../utils" +import { initialize } from "../../../../src" jest.setTimeout(30000) @@ -188,15 +188,16 @@ describe("PriceList Service", () => { }) describe("update", () => { + let createdId const id = "price-list-2" - it("should update the starts_at date of the priceList successfully", async () => { + beforeEach(async () => { const [created] = await service.createPriceLists([ { title: "test", description: "test", - starts_at: "10/01/2023", - ends_at: "10/30/2023", + starts_at: new Date("10/01/2023"), + ends_at: new Date("10/30/2023"), rules: { customer_group_id: [ "vip-customer-group-id", @@ -213,12 +214,67 @@ describe("PriceList Service", () => { ], }, ]) + createdId = created.id + }) + it("should fail to update a priceList with invalid starts_at date", async () => { + let error + try { + await service.updatePriceLists([ + { + id: createdId, + starts_at: "invalid-date", + }, + ]) + } catch (err) { + error = err + } + + expect(error.message).toEqual( + "Cannot set price list starts at with with invalid date string: invalid-date" + ) + }) + + it("should fail to update a priceList with invalid ends_at date", async () => { + let error + try { + await service.updatePriceLists([ + { + id: createdId, + ends_at: "invalid-date", + }, + ]) + } catch (err) { + error = err + } + + expect(error.message).toEqual( + "Cannot set price list ends at with with invalid date string: invalid-date" + ) + }) + + it("should update a priceList with starts_at and ends_at dates given as string", async () => { + let [priceList] = await service.updatePriceLists([ + { + id: createdId, + starts_at: "10/10/2010", + ends_at: "10/20/2030", + }, + ]) + expect(priceList).toEqual( + expect.objectContaining({ + starts_at: new Date("10/10/2010").toISOString(), + ends_at: new Date("10/20/2030").toISOString(), + }) + ) + }) + + it("should update the starts_at date of the priceList successfully", async () => { const updateDate = new Date() await service.updatePriceLists([ { - id: created.id, - starts_at: updateDate.toISOString(), + id: createdId, + starts_at: updateDate, rules: { new_rule: ["new-rule-value"], }, @@ -227,7 +283,7 @@ describe("PriceList Service", () => { const [priceList] = await service.listPriceLists( { - id: [created.id], + id: [createdId], }, { relations: [ @@ -303,13 +359,68 @@ describe("PriceList Service", () => { }) describe("createPriceLists", () => { + it("should fail to create a priceList with invalid starts_at date", async () => { + let error + try { + await service.createPriceLists([ + { + title: "test", + description: "test", + starts_at: "invalid-date", + }, + ]) + } catch (err) { + error = err + } + + expect(error.message).toEqual( + "Cannot set price list starts at with with invalid date string: invalid-date" + ) + }) + + it("should fail to create a priceList with invalid ends_at date", async () => { + let error + try { + await service.createPriceLists([ + { + title: "test", + description: "test", + ends_at: "invalid-date", + }, + ]) + } catch (err) { + error = err + } + + expect(error.message).toEqual( + "Cannot set price list ends at with with invalid date string: invalid-date" + ) + }) + + it("should create a priceList with starts_at and ends_at dates given as string", async () => { + let [priceList] = await service.createPriceLists([ + { + title: "test", + description: "test", + starts_at: "10/10/2010", + ends_at: "10/20/2030", + }, + ]) + expect(priceList).toEqual( + expect.objectContaining({ + starts_at: new Date("10/10/2010").toISOString(), + ends_at: new Date("10/20/2030").toISOString(), + }) + ) + }) + it("should create a priceList successfully", async () => { const [created] = await service.createPriceLists([ { title: "test", description: "test", - starts_at: "10/01/2023", - ends_at: "10/30/2023", + starts_at: new Date("10/01/2023"), + ends_at: new Date("10/30/2023"), rules: { customer_group_id: [ "vip-customer-group-id", diff --git a/packages/pricing/jest.config.js b/packages/pricing/jest.config.js index 860ba90a49..7117eaa088 100644 --- a/packages/pricing/jest.config.js +++ b/packages/pricing/jest.config.js @@ -3,6 +3,8 @@ module.exports = { "^@models": "/src/models", "^@services": "/src/services", "^@repositories": "/src/repositories", + "^@types": "/src/types", + "^@utils": "/src/utils", }, transform: { "^.+\\.[jt]s?$": [ diff --git a/packages/pricing/src/initialize/index.ts b/packages/pricing/src/initialize/index.ts index 0f35ee616e..56f10c2ce6 100644 --- a/packages/pricing/src/initialize/index.ts +++ b/packages/pricing/src/initialize/index.ts @@ -1,13 +1,14 @@ import { ExternalModuleDeclaration, InternalModuleDeclaration, - MedusaModule, MODULE_PACKAGE_NAMES, + MedusaModule, Modules, } from "@medusajs/modules-sdk" import { IPricingModuleService, ModulesSdkTypes } from "@medusajs/types" + +import { InitializeModuleInjectableDependencies } from "@types" import { moduleDefinition } from "../module-definition" -import { InitializeModuleInjectableDependencies } from "../types" export const initialize = async ( options?: diff --git a/packages/pricing/src/repositories/currency.ts b/packages/pricing/src/repositories/currency.ts index a0543d2d8c..bef290edaa 100644 --- a/packages/pricing/src/repositories/currency.ts +++ b/packages/pricing/src/repositories/currency.ts @@ -1,17 +1,14 @@ -import { - Context, - CreateCurrencyDTO, - DAL, - UpdateCurrencyDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { Currency } from "@models" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class CurrencyRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +66,7 @@ export class CurrencyRepository extends DALUtils.MikroOrmBaseRepository { } async create( - data: CreateCurrencyDTO[], + data: RepositoryTypes.CreateCurrencyDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -84,7 +81,7 @@ export class CurrencyRepository extends DALUtils.MikroOrmBaseRepository { } async update( - data: UpdateCurrencyDTO[], + data: RepositoryTypes.UpdateCurrencyDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/money-amount.ts b/packages/pricing/src/repositories/money-amount.ts index 3328b9c953..097558504d 100644 --- a/packages/pricing/src/repositories/money-amount.ts +++ b/packages/pricing/src/repositories/money-amount.ts @@ -1,17 +1,14 @@ -import { - Context, - CreateMoneyAmountDTO, - DAL, - UpdateMoneyAmountDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { MoneyAmount } from "@models" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class MoneyAmountRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +66,7 @@ export class MoneyAmountRepository extends DALUtils.MikroOrmBaseRepository { } async create( - data: CreateMoneyAmountDTO[], + data: RepositoryTypes.CreateMoneyAmountDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -84,7 +81,7 @@ export class MoneyAmountRepository extends DALUtils.MikroOrmBaseRepository { } async update( - data: UpdateMoneyAmountDTO[], + data: RepositoryTypes.UpdateMoneyAmountDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/price-list-rule-value.ts b/packages/pricing/src/repositories/price-list-rule-value.ts index 1c9d14158f..76be14cb5e 100644 --- a/packages/pricing/src/repositories/price-list-rule-value.ts +++ b/packages/pricing/src/repositories/price-list-rule-value.ts @@ -5,12 +5,10 @@ import { FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { PriceListRuleValue } from "@models" -import { - CreatePriceListRuleValueDTO, - UpdatePriceListRuleValueDTO, -} from "../types" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class PriceListRuleValueRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +67,7 @@ export class PriceListRuleValueRepository extends DALUtils.MikroOrmBaseRepositor } async create( - data: CreatePriceListRuleValueDTO[], + data: RepositoryTypes.CreatePriceListRuleValueDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -91,7 +89,7 @@ export class PriceListRuleValueRepository extends DALUtils.MikroOrmBaseRepositor } async update( - data: UpdatePriceListRuleValueDTO[], + data: RepositoryTypes.UpdatePriceListRuleValueDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/price-list-rule.ts b/packages/pricing/src/repositories/price-list-rule.ts index f21435c289..0a6cc9c025 100644 --- a/packages/pricing/src/repositories/price-list-rule.ts +++ b/packages/pricing/src/repositories/price-list-rule.ts @@ -1,17 +1,14 @@ -import { - Context, - CreatePriceListRuleDTO, - DAL, - UpdatePriceListRuleDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError, arrayDifference } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { PriceListRule } from "@models" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class PriceListRuleRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +66,7 @@ export class PriceListRuleRepository extends DALUtils.MikroOrmBaseRepository { } async create( - data: CreatePriceListRuleDTO[], + data: RepositoryTypes.CreatePriceListRuleDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -98,7 +95,7 @@ export class PriceListRuleRepository extends DALUtils.MikroOrmBaseRepository { } async update( - data: UpdatePriceListRuleDTO[], + data: RepositoryTypes.UpdatePriceListRuleDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/price-list.ts b/packages/pricing/src/repositories/price-list.ts index b88d85ba20..2e10896e9a 100644 --- a/packages/pricing/src/repositories/price-list.ts +++ b/packages/pricing/src/repositories/price-list.ts @@ -1,13 +1,14 @@ -import { Context, DAL, UpdatePriceListDTO } from "@medusajs/types" -import { DALUtils, MedusaError } from "@medusajs/utils" +import { Context, DAL } from "@medusajs/types" +import { DALUtils, GetIsoStringFromDate, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { PriceList } from "@models" -import { CreatePriceListDTO } from "../types" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class PriceListRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -65,12 +66,20 @@ export class PriceListRepository extends DALUtils.MikroOrmBaseRepository { } async create( - data: CreatePriceListDTO[], + data: RepositoryTypes.CreatePriceListDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) - const priceLists = data.map((priceListData) => { + const priceLists = data.map((priceListData: any) => { + if (!!priceListData.starts_at) { + priceListData.starts_at = GetIsoStringFromDate(priceListData.starts_at) + } + + if (!!priceListData.ends_at) { + priceListData.ends_at = GetIsoStringFromDate(priceListData.ends_at) + } + return manager.create(PriceList, priceListData) }) @@ -80,7 +89,7 @@ export class PriceListRepository extends DALUtils.MikroOrmBaseRepository { } async update( - data: Omit[], + data: RepositoryTypes.UpdatePriceListDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -103,7 +112,7 @@ export class PriceListRepository extends DALUtils.MikroOrmBaseRepository { ]) ) - const priceLists = data.map((priceListData) => { + const priceLists = data.map((priceListData: any) => { const existingPriceList = existingPriceListMap.get(priceListData.id) if (!existingPriceList) { @@ -114,13 +123,11 @@ export class PriceListRepository extends DALUtils.MikroOrmBaseRepository { } if (!!priceListData.starts_at) { - priceListData.starts_at = new Date( - priceListData.starts_at - ).toISOString() + priceListData.starts_at = GetIsoStringFromDate(priceListData.starts_at) } if (!!priceListData.ends_at) { - priceListData.ends_at = new Date(priceListData.ends_at).toISOString() + priceListData.ends_at = GetIsoStringFromDate(priceListData.ends_at) } return manager.assign(existingPriceList, priceListData) diff --git a/packages/pricing/src/repositories/price-rule.ts b/packages/pricing/src/repositories/price-rule.ts index c031b71fd3..d8399209eb 100644 --- a/packages/pricing/src/repositories/price-rule.ts +++ b/packages/pricing/src/repositories/price-rule.ts @@ -1,17 +1,13 @@ -import { - Context, - CreatePriceRuleDTO, - DAL, - UpdatePriceRuleDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { PriceRule } from "@models" +import { PriceRule } from "@models" +import { RepositoryTypes } from "@types" import { SqlEntityManager } from "@mikro-orm/postgresql" export class PriceRuleRepository extends DALUtils.MikroOrmBaseRepository { @@ -70,7 +66,7 @@ export class PriceRuleRepository extends DALUtils.MikroOrmBaseRepository { } async create( - data: CreatePriceRuleDTO[], + data: RepositoryTypes.CreatePriceRuleDTO[], context: Context = {} ): Promise { const manager: SqlEntityManager = @@ -97,7 +93,7 @@ export class PriceRuleRepository extends DALUtils.MikroOrmBaseRepository { } async update( - data: UpdatePriceRuleDTO[], + data: RepositoryTypes.UpdatePriceRuleDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/price-set-money-amount-rules.ts b/packages/pricing/src/repositories/price-set-money-amount-rules.ts index a540d566a7..1e7756930e 100644 --- a/packages/pricing/src/repositories/price-set-money-amount-rules.ts +++ b/packages/pricing/src/repositories/price-set-money-amount-rules.ts @@ -1,17 +1,14 @@ -import { - Context, - CreatePriceSetMoneyAmountRulesDTO, - DAL, - UpdatePriceSetMoneyAmountRulesDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { PriceSetMoneyAmountRules } from "@models" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class PriceSetMoneyAmountRulesRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +66,7 @@ export class PriceSetMoneyAmountRulesRepository extends DALUtils.MikroOrmBaseRep } async create( - data: CreatePriceSetMoneyAmountRulesDTO[], + data: RepositoryTypes.CreatePriceSetMoneyAmountRulesDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -84,7 +81,7 @@ export class PriceSetMoneyAmountRulesRepository extends DALUtils.MikroOrmBaseRep } async update( - data: UpdatePriceSetMoneyAmountRulesDTO[], + data: RepositoryTypes.UpdatePriceSetMoneyAmountRulesDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/price-set-money-amount.ts b/packages/pricing/src/repositories/price-set-money-amount.ts index f8fb35a247..f70c2701d2 100644 --- a/packages/pricing/src/repositories/price-set-money-amount.ts +++ b/packages/pricing/src/repositories/price-set-money-amount.ts @@ -1,17 +1,14 @@ -import { - Context, - CreatePriceSetMoneyAmountDTO, - DAL, - UpdatePriceSetMoneyAmountDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { PriceSetMoneyAmount } from "@models" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class PriceSetMoneyAmountRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +66,7 @@ export class PriceSetMoneyAmountRepository extends DALUtils.MikroOrmBaseReposito } async create( - data: CreatePriceSetMoneyAmountDTO[], + data: RepositoryTypes.CreatePriceSetMoneyAmountDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -87,7 +84,7 @@ export class PriceSetMoneyAmountRepository extends DALUtils.MikroOrmBaseReposito } async update( - data: UpdatePriceSetMoneyAmountDTO[], + data: RepositoryTypes.UpdatePriceSetMoneyAmountDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/price-set-rule-type.ts b/packages/pricing/src/repositories/price-set-rule-type.ts index 9e6ba16fd2..8d18935868 100644 --- a/packages/pricing/src/repositories/price-set-rule-type.ts +++ b/packages/pricing/src/repositories/price-set-rule-type.ts @@ -1,17 +1,14 @@ -import { - Context, - DAL, - UpdatePriceSetDTO, - CreatePriceSetRuleTypeDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" + +import { PriceSetRuleType } from "@models" +import { RepositoryTypes } from "@types" import { SqlEntityManager } from "@mikro-orm/postgresql" -import { PriceSet, PriceSetRuleType, RuleType } from "@models" export class PriceSetRuleTypeRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +66,7 @@ export class PriceSetRuleTypeRepository extends DALUtils.MikroOrmBaseRepository } async create( - data: CreatePriceSetRuleTypeDTO[], + data: RepositoryTypes.CreatePriceSetRuleTypeDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -84,7 +81,7 @@ export class PriceSetRuleTypeRepository extends DALUtils.MikroOrmBaseRepository } async update( - data: UpdatePriceSetDTO[], + data: RepositoryTypes.UpdatePriceSetRuleTypeDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/price-set.ts b/packages/pricing/src/repositories/price-set.ts index b8c4adcfb0..eb7821ac7a 100644 --- a/packages/pricing/src/repositories/price-set.ts +++ b/packages/pricing/src/repositories/price-set.ts @@ -1,18 +1,14 @@ -import { UpdatePriceListDTO } from "@medusajs/types" -import { - Context, - DAL, - UpdatePriceSetDTO, - CreatePriceSetDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + import { PriceSet } from "@models" +import { RepositoryTypes } from "@types" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class PriceSetRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -70,7 +66,7 @@ export class PriceSetRepository extends DALUtils.MikroOrmBaseRepository { } async create( - data: Omit[], + data: RepositoryTypes.CreatePriceSetDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) @@ -85,7 +81,7 @@ export class PriceSetRepository extends DALUtils.MikroOrmBaseRepository { } async update( - data: Omit[], + data: RepositoryTypes.UpdatePriceSetDTO[], context: Context = {} ): Promise { const manager = this.getActiveManager(context) diff --git a/packages/pricing/src/repositories/pricing.ts b/packages/pricing/src/repositories/pricing.ts index a721e8c1df..b0c011862f 100644 --- a/packages/pricing/src/repositories/pricing.ts +++ b/packages/pricing/src/repositories/pricing.ts @@ -1,13 +1,13 @@ +import { MedusaError, MikroOrmBase } from "@medusajs/utils" + import { CalculatedPriceSetDTO, Context, PricingContext, PricingFilters, + PricingRepositoryService, } from "@medusajs/types" -import { MedusaError, MikroOrmBase } from "@medusajs/utils" - import { SqlEntityManager } from "@mikro-orm/postgresql" -import { PricingRepositoryService } from "../types" export class PricingRepository extends MikroOrmBase diff --git a/packages/pricing/src/repositories/rule-type.ts b/packages/pricing/src/repositories/rule-type.ts index e7714582a7..beca06be72 100644 --- a/packages/pricing/src/repositories/rule-type.ts +++ b/packages/pricing/src/repositories/rule-type.ts @@ -1,17 +1,14 @@ -import { - Context, - CreateRuleTypeDTO, - DAL, - UpdateRuleTypeDTO, -} from "@medusajs/types" +import { Context, DAL } from "@medusajs/types" import { DALUtils, MedusaError, validateRuleAttributes } from "@medusajs/utils" import { LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, } from "@mikro-orm/core" -import { SqlEntityManager } from "@mikro-orm/postgresql" + +import { RepositoryTypes } from "@types" import { RuleType } from "@models" +import { SqlEntityManager } from "@mikro-orm/postgresql" export class RuleTypeRepository extends DALUtils.MikroOrmBaseRepository { protected readonly manager_: SqlEntityManager @@ -69,7 +66,7 @@ export class RuleTypeRepository extends DALUtils.MikroOrmBaseRepository { } async create( - data: CreateRuleTypeDTO[], + data: RepositoryTypes.CreateRuleTypeDTO[], context: Context = {} ): Promise { validateRuleAttributes(data.map((d) => d.rule_attribute)) @@ -86,7 +83,7 @@ export class RuleTypeRepository extends DALUtils.MikroOrmBaseRepository { } async update( - data: UpdateRuleTypeDTO[], + data: RepositoryTypes.UpdateRuleTypeDTO[], context: Context = {} ): Promise { validateRuleAttributes(data.map((d) => d.rule_attribute)) diff --git a/packages/pricing/src/services/currency.ts b/packages/pricing/src/services/currency.ts index 53a87037dc..90848f9fbb 100644 --- a/packages/pricing/src/services/currency.ts +++ b/packages/pricing/src/services/currency.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -8,6 +8,7 @@ import { } from "@medusajs/utils" import { Currency } from "@models" import { CurrencyRepository } from "@repositories" +import { ServiceTypes } from "@types" type InjectedDependencies = { currencyRepository: DAL.RepositoryService @@ -23,10 +24,10 @@ export default class CurrencyService { @InjectManager("currencyRepository_") async retrieve( currencyCode: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { - return (await retrieveEntity({ + return (await retrieveEntity({ id: currencyCode, identifierColumn: "code", entityName: Currency.name, @@ -38,8 +39,8 @@ export default class CurrencyService { @InjectManager("currencyRepository_") async list( - filters: PricingTypes.FilterableCurrencyProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterableCurrencyProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.currencyRepository_.find( @@ -50,8 +51,8 @@ export default class CurrencyService { @InjectManager("currencyRepository_") async listAndCount( - filters: PricingTypes.FilterableCurrencyProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterableCurrencyProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { return (await this.currencyRepository_.findAndCount( @@ -61,8 +62,8 @@ export default class CurrencyService { } private buildQueryForList( - filters: PricingTypes.FilterableCurrencyProps = {}, - config: FindConfig = {} + filters: ServiceTypes.FilterableCurrencyProps = {}, + config: FindConfig = {} ) { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -75,7 +76,7 @@ export default class CurrencyService { @InjectTransactionManager("currencyRepository_") async create( - data: PricingTypes.CreateCurrencyDTO[], + data: ServiceTypes.CreateCurrencyDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.currencyRepository_ as CurrencyRepository).create( @@ -86,7 +87,7 @@ export default class CurrencyService { @InjectTransactionManager("currencyRepository_") async update( - data: PricingTypes.UpdateCurrencyDTO[], + data: ServiceTypes.UpdateCurrencyDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.currencyRepository_ as CurrencyRepository).update( diff --git a/packages/pricing/src/services/money-amount.ts b/packages/pricing/src/services/money-amount.ts index 78ce4cfa13..40f05d6cd6 100644 --- a/packages/pricing/src/services/money-amount.ts +++ b/packages/pricing/src/services/money-amount.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -8,6 +8,7 @@ import { } from "@medusajs/utils" import { MoneyAmount } from "@models" import { MoneyAmountRepository } from "@repositories" +import { ServiceTypes } from "@types" type InjectedDependencies = { moneyAmountRepository: DAL.RepositoryService @@ -25,10 +26,10 @@ export default class MoneyAmountService< @InjectManager("moneyAmountRepository_") async retrieve( moneyAmountId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { - return (await retrieveEntity({ + return (await retrieveEntity({ id: moneyAmountId, entityName: MoneyAmount.name, repository: this.moneyAmountRepository_, @@ -39,8 +40,8 @@ export default class MoneyAmountService< @InjectManager("moneyAmountRepository_") async list( - filters: PricingTypes.FilterableMoneyAmountProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterableMoneyAmountProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { const queryOptions = ModulesSdkUtils.buildQuery( @@ -56,8 +57,8 @@ export default class MoneyAmountService< @InjectManager("moneyAmountRepository_") async listAndCount( - filters: PricingTypes.FilterableMoneyAmountProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterableMoneyAmountProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { const queryOptions = ModulesSdkUtils.buildQuery( @@ -73,7 +74,7 @@ export default class MoneyAmountService< @InjectTransactionManager("moneyAmountRepository_") async create( - data: PricingTypes.CreateMoneyAmountDTO[], + data: ServiceTypes.CreateMoneyAmountDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.moneyAmountRepository_ as MoneyAmountRepository).create( @@ -84,7 +85,7 @@ export default class MoneyAmountService< @InjectTransactionManager("moneyAmountRepository_") async update( - data: PricingTypes.UpdateMoneyAmountDTO[], + data: ServiceTypes.UpdateMoneyAmountDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.moneyAmountRepository_ as MoneyAmountRepository).update( diff --git a/packages/pricing/src/services/price-list-rule-value.ts b/packages/pricing/src/services/price-list-rule-value.ts index 5d273094b6..52e5370391 100644 --- a/packages/pricing/src/services/price-list-rule-value.ts +++ b/packages/pricing/src/services/price-list-rule-value.ts @@ -1,17 +1,16 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { + doNotForceTransaction, InjectManager, InjectTransactionManager, MedusaContext, ModulesSdkUtils, - doNotForceTransaction, retrieveEntity, shouldForceTransaction, } from "@medusajs/utils" import { PriceListRuleValue } from "@models" import { PriceListRuleValueRepository } from "@repositories" - -import { CreatePriceListRuleValueDTO } from "../types" +import { ServiceTypes } from "@types" type InjectedDependencies = { priceListRuleValueRepository: DAL.RepositoryService @@ -29,12 +28,12 @@ export default class PriceListRuleValueService< @InjectManager("priceListRuleValueRepository_") async retrieve( priceSetId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await retrieveEntity< PriceListRuleValue, - PricingTypes.PriceListRuleValueDTO + ServiceTypes.PriceListRuleValueDTO >({ id: priceSetId, entityName: PriceListRuleValue.name, @@ -46,8 +45,8 @@ export default class PriceListRuleValueService< @InjectManager("priceListRuleValueRepository_") async list( - filters: PricingTypes.FilterablePriceListRuleValueProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceListRuleValueProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { const queryOptions = ModulesSdkUtils.buildQuery( @@ -63,8 +62,8 @@ export default class PriceListRuleValueService< @InjectManager("priceListRuleValueRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceListRuleValueProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceListRuleValueProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { const queryOptions = ModulesSdkUtils.buildQuery( @@ -83,7 +82,7 @@ export default class PriceListRuleValueService< "priceListRuleValueRepository_" ) async create( - data: CreatePriceListRuleValueDTO[], + data: ServiceTypes.CreatePriceListRuleValueDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( @@ -96,7 +95,7 @@ export default class PriceListRuleValueService< "priceListRuleValueRepository_" ) async update( - data: PricingTypes.UpdatePriceListRuleValueDTO[], + data: ServiceTypes.UpdatePriceListRuleValueDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( diff --git a/packages/pricing/src/services/price-list-rule.ts b/packages/pricing/src/services/price-list-rule.ts index c60db371ee..474edb789b 100644 --- a/packages/pricing/src/services/price-list-rule.ts +++ b/packages/pricing/src/services/price-list-rule.ts @@ -1,15 +1,16 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { + doNotForceTransaction, InjectManager, InjectTransactionManager, MedusaContext, ModulesSdkUtils, - doNotForceTransaction, retrieveEntity, shouldForceTransaction, } from "@medusajs/utils" import { PriceListRule } from "@models" import { PriceListRuleRepository } from "@repositories" +import { ServiceTypes } from "@types" type InjectedDependencies = { priceListRuleRepository: DAL.RepositoryService @@ -27,10 +28,10 @@ export default class PriceListRuleService< @InjectManager("priceListRuleRepository_") async retrieve( priceSetId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { - return (await retrieveEntity({ + return (await retrieveEntity({ id: priceSetId, entityName: PriceListRule.name, repository: this.priceListRuleRepository_, @@ -41,8 +42,8 @@ export default class PriceListRuleService< @InjectManager("priceListRuleRepository_") async list( - filters: PricingTypes.FilterablePriceListRuleProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceListRuleProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { const queryOptions = ModulesSdkUtils.buildQuery( @@ -58,8 +59,8 @@ export default class PriceListRuleService< @InjectManager("priceListRuleRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceListRuleProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceListRuleProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { const queryOptions = ModulesSdkUtils.buildQuery( @@ -75,7 +76,7 @@ export default class PriceListRuleService< @InjectTransactionManager(shouldForceTransaction, "priceListRuleRepository_") async create( - data: PricingTypes.CreatePriceListRuleDTO[], + data: ServiceTypes.CreatePriceListRuleDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( @@ -85,7 +86,7 @@ export default class PriceListRuleService< @InjectTransactionManager(shouldForceTransaction, "priceListRuleRepository_") async update( - data: PricingTypes.UpdatePriceListRuleDTO[], + data: ServiceTypes.UpdatePriceListRuleDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( diff --git a/packages/pricing/src/services/price-list.ts b/packages/pricing/src/services/price-list.ts index b42cceb688..11a1b0bfa4 100644 --- a/packages/pricing/src/services/price-list.ts +++ b/packages/pricing/src/services/price-list.ts @@ -1,16 +1,16 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { + doNotForceTransaction, InjectManager, InjectTransactionManager, MedusaContext, ModulesSdkUtils, - doNotForceTransaction, retrieveEntity, shouldForceTransaction, } from "@medusajs/utils" import { PriceList } from "@models" import { PriceListRepository } from "@repositories" -import { CreatePriceListDTO } from "../types" +import { ServiceTypes } from "@types" type InjectedDependencies = { priceListRepository: DAL.RepositoryService @@ -26,10 +26,10 @@ export default class PriceListService { @InjectManager("priceListRepository_") async retrieve( priceListId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { - return (await retrieveEntity({ + return (await retrieveEntity({ id: priceListId, entityName: PriceList.name, repository: this.priceListRepository_, @@ -40,8 +40,8 @@ export default class PriceListService { @InjectManager("priceListRepository_") async list( - filters: PricingTypes.FilterablePriceListProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceListProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -54,8 +54,8 @@ export default class PriceListService { @InjectManager("priceListRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceListProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceListProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -68,7 +68,7 @@ export default class PriceListService { @InjectTransactionManager(shouldForceTransaction, "priceListRepository_") async create( - data: CreatePriceListDTO[], + data: ServiceTypes.CreatePriceListDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.priceListRepository_ as PriceListRepository).create( @@ -79,7 +79,7 @@ export default class PriceListService { @InjectTransactionManager(shouldForceTransaction, "priceListRepository_") async update( - data: Omit[], + data: Omit[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.priceListRepository_ as PriceListRepository).update( diff --git a/packages/pricing/src/services/price-rule.ts b/packages/pricing/src/services/price-rule.ts index 7735d2a0c5..0c7bb29787 100644 --- a/packages/pricing/src/services/price-rule.ts +++ b/packages/pricing/src/services/price-rule.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -9,6 +9,8 @@ import { import { PriceRule } from "@models" import { PriceRuleRepository } from "@repositories" +import { ServiceTypes } from "@types" + type InjectedDependencies = { priceRuleRepository: DAL.RepositoryService } @@ -23,10 +25,10 @@ export default class PriceRuleService { @InjectManager("priceRuleRepository_") async retrieve( priceRuleId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { - return (await retrieveEntity({ + return (await retrieveEntity({ id: priceRuleId, entityName: PriceRule.name, repository: this.priceRuleRepository_, @@ -37,8 +39,8 @@ export default class PriceRuleService { @InjectManager("priceRuleRepository_") async list( - filters: PricingTypes.FilterablePriceRuleProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceRuleProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { const queryConfig = ModulesSdkUtils.buildQuery(filters, config) @@ -51,8 +53,8 @@ export default class PriceRuleService { @InjectManager("priceRuleRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceRuleProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceRuleProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { const queryConfig = ModulesSdkUtils.buildQuery(filters, config) @@ -65,7 +67,7 @@ export default class PriceRuleService { @InjectTransactionManager("priceRuleRepository_") async create( - data: PricingTypes.CreatePriceRuleDTO[], + data: ServiceTypes.CreatePriceRuleDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.priceRuleRepository_ as PriceRuleRepository).create( @@ -76,7 +78,7 @@ export default class PriceRuleService { @InjectTransactionManager("priceRuleRepository_") async update( - data: PricingTypes.UpdatePriceRuleDTO[], + data: ServiceTypes.UpdatePriceRuleDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.priceRuleRepository_ as PriceRuleRepository).update( diff --git a/packages/pricing/src/services/price-set-money-amount-rules.ts b/packages/pricing/src/services/price-set-money-amount-rules.ts index 883d580fe1..c283c5d61c 100644 --- a/packages/pricing/src/services/price-set-money-amount-rules.ts +++ b/packages/pricing/src/services/price-set-money-amount-rules.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -7,6 +7,7 @@ import { retrieveEntity, } from "@medusajs/utils" import { PriceSetMoneyAmountRules } from "@models" +import { ServiceTypes } from "@types" type InjectedDependencies = { priceSetMoneyAmountRulesRepository: DAL.RepositoryService @@ -25,12 +26,12 @@ export default class PriceSetMoneyAmountRulesService< @InjectManager("priceSetMoneyAmountRulesRepository_") async retrieve( priceSetMoneyAmountRulesId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await retrieveEntity< PriceSetMoneyAmountRules, - PricingTypes.PriceSetMoneyAmountRulesDTO + ServiceTypes.PriceSetMoneyAmountRulesDTO >({ id: priceSetMoneyAmountRulesId, identifierColumn: "id", @@ -43,8 +44,8 @@ export default class PriceSetMoneyAmountRulesService< @InjectManager("priceSetMoneyAmountRulesRepository_") async list( - filters: PricingTypes.FilterablePriceSetMoneyAmountRulesProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetMoneyAmountRulesProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.priceSetMoneyAmountRulesRepository_.find( @@ -55,8 +56,8 @@ export default class PriceSetMoneyAmountRulesService< @InjectManager("priceSetMoneyAmountRulesRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceSetMoneyAmountRulesProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetMoneyAmountRulesProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { return (await this.priceSetMoneyAmountRulesRepository_.findAndCount( @@ -66,8 +67,8 @@ export default class PriceSetMoneyAmountRulesService< } private buildQueryForList( - filters: PricingTypes.FilterablePriceSetMoneyAmountRulesProps = {}, - config: FindConfig = {} + filters: ServiceTypes.FilterablePriceSetMoneyAmountRulesProps = {}, + config: FindConfig = {} ) { const queryOptions = ModulesSdkUtils.buildQuery( filters, @@ -79,7 +80,7 @@ export default class PriceSetMoneyAmountRulesService< @InjectTransactionManager("priceSetMoneyAmountRulesRepository_") async create( - data: PricingTypes.CreatePriceSetMoneyAmountRulesDTO[], + data: ServiceTypes.CreatePriceSetMoneyAmountRulesDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.priceSetMoneyAmountRulesRepository_.create( @@ -90,7 +91,7 @@ export default class PriceSetMoneyAmountRulesService< @InjectTransactionManager("priceSetMoneyAmountRulesRepository_") async update( - data: PricingTypes.UpdatePriceSetMoneyAmountRulesDTO[], + data: ServiceTypes.UpdatePriceSetMoneyAmountRulesDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.priceSetMoneyAmountRulesRepository_.update( diff --git a/packages/pricing/src/services/price-set-money-amount.ts b/packages/pricing/src/services/price-set-money-amount.ts index 02aaff4691..ddc39855e0 100644 --- a/packages/pricing/src/services/price-set-money-amount.ts +++ b/packages/pricing/src/services/price-set-money-amount.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -8,6 +8,7 @@ import { } from "@medusajs/utils" import { PriceSet, PriceSetMoneyAmount } from "@models" import { PriceSetMoneyAmountRepository } from "@repositories" +import { ServiceTypes } from "@types" type InjectedDependencies = { priceSetMoneyAmountRepository: DAL.RepositoryService @@ -25,12 +26,12 @@ export default class PriceSetMoneyAmountService< @InjectManager("priceSetMoneyAmountRepository_") async retrieve( priceSetId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await retrieveEntity< PriceSetMoneyAmount, - PricingTypes.PriceSetRuleTypeDTO + ServiceTypes.PriceSetMoneyAmountDTO >({ id: priceSetId, entityName: PriceSet.name, @@ -42,8 +43,8 @@ export default class PriceSetMoneyAmountService< @InjectManager("priceSetMoneyAmountRepository_") async list( - filters: PricingTypes.FilterablePriceSetRuleTypeProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetMoneyAmountProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.priceSetMoneyAmountRepository_.find( @@ -54,8 +55,8 @@ export default class PriceSetMoneyAmountService< @InjectManager("priceSetMoneyAmountRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceSetRuleTypeProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetMoneyAmountProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { return (await this.priceSetMoneyAmountRepository_.findAndCount( @@ -65,8 +66,8 @@ export default class PriceSetMoneyAmountService< } private buildQueryForList( - filters: PricingTypes.FilterablePriceSetRuleTypeProps = {}, - config: FindConfig = {} + filters: ServiceTypes.FilterablePriceSetMoneyAmountProps = {}, + config: FindConfig = {} ) { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -79,7 +80,7 @@ export default class PriceSetMoneyAmountService< @InjectTransactionManager("priceSetMoneyAmountRepository_") async create( - data: PricingTypes.CreatePriceSetMoneyAmountDTO[], + data: ServiceTypes.CreatePriceSetMoneyAmountDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( @@ -90,7 +91,7 @@ export default class PriceSetMoneyAmountService< @InjectTransactionManager("priceSetMoneyAmountRepository_") async update( - data: PricingTypes.UpdatePriceSetMoneyAmountDTO[], + data: ServiceTypes.UpdatePriceSetMoneyAmountDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( diff --git a/packages/pricing/src/services/price-set-rule-type.ts b/packages/pricing/src/services/price-set-rule-type.ts index 2f37608498..08fcb568c8 100644 --- a/packages/pricing/src/services/price-set-rule-type.ts +++ b/packages/pricing/src/services/price-set-rule-type.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -8,6 +8,7 @@ import { } from "@medusajs/utils" import { PriceSet, PriceSetRuleType } from "@models" import { PriceSetRuleTypeRepository } from "src/repositories/price-set-rule-type" +import { ServiceTypes } from "@types" type InjectedDependencies = { priceSetRuleTypeRepository: DAL.RepositoryService @@ -25,12 +26,12 @@ export default class PriceSetRuleTypeService< @InjectManager("priceSetRuleTypeRepository_") async retrieve( priceSetId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await retrieveEntity< PriceSetRuleType, - PricingTypes.PriceSetRuleTypeDTO + ServiceTypes.PriceSetRuleTypeDTO >({ id: priceSetId, entityName: PriceSet.name, @@ -42,8 +43,8 @@ export default class PriceSetRuleTypeService< @InjectManager("priceSetRuleTypeRepository_") async list( - filters: PricingTypes.FilterablePriceSetRuleTypeProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetRuleTypeProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.priceSetRuleTypeRepository_.find( @@ -54,8 +55,8 @@ export default class PriceSetRuleTypeService< @InjectManager("priceSetRuleTypeRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceSetRuleTypeProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetRuleTypeProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { return (await this.priceSetRuleTypeRepository_.findAndCount( @@ -65,8 +66,8 @@ export default class PriceSetRuleTypeService< } private buildQueryForList( - filters: PricingTypes.FilterablePriceSetRuleTypeProps = {}, - config: FindConfig = {} + filters: ServiceTypes.FilterablePriceSetRuleTypeProps = {}, + config: FindConfig = {} ) { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -79,7 +80,7 @@ export default class PriceSetRuleTypeService< @InjectTransactionManager("priceSetRuleTypeRepository_") async create( - data: PricingTypes.CreatePriceSetRuleTypeDTO[], + data: ServiceTypes.CreatePriceSetRuleTypeDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( @@ -89,7 +90,7 @@ export default class PriceSetRuleTypeService< @InjectTransactionManager("priceSetRuleTypeRepository_") async update( - data: PricingTypes.UpdatePriceSetRuleTypeDTO[], + data: ServiceTypes.UpdatePriceSetRuleTypeDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await ( diff --git a/packages/pricing/src/services/price-set.ts b/packages/pricing/src/services/price-set.ts index ab9f552ccc..ba7ad6080a 100644 --- a/packages/pricing/src/services/price-set.ts +++ b/packages/pricing/src/services/price-set.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -9,6 +9,8 @@ import { import { PriceSet } from "@models" import { PriceSetRepository } from "@repositories" +import { ServiceTypes } from "@types" + type InjectedDependencies = { priceSetRepository: DAL.RepositoryService } @@ -23,10 +25,10 @@ export default class PriceSetService { @InjectManager("priceSetRepository_") async retrieve( priceSetId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { - return (await retrieveEntity({ + return (await retrieveEntity({ id: priceSetId, entityName: PriceSet.name, repository: this.priceSetRepository_, @@ -37,8 +39,8 @@ export default class PriceSetService { @InjectManager("priceSetRepository_") async list( - filters: PricingTypes.FilterablePriceSetProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -51,8 +53,8 @@ export default class PriceSetService { @InjectManager("priceSetRepository_") async listAndCount( - filters: PricingTypes.FilterablePriceSetProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterablePriceSetProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -65,7 +67,7 @@ export default class PriceSetService { @InjectTransactionManager("priceSetRepository_") async create( - data: Omit[], + data: Omit[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.priceSetRepository_ as PriceSetRepository).create( @@ -76,7 +78,7 @@ export default class PriceSetService { @InjectTransactionManager("priceSetRepository_") async update( - data: Omit[], + data: Omit[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await (this.priceSetRepository_ as PriceSetRepository).update( diff --git a/packages/pricing/src/services/pricing-module.ts b/packages/pricing/src/services/pricing-module.ts index 20ab8ba240..68906fd1c6 100644 --- a/packages/pricing/src/services/pricing-module.ts +++ b/packages/pricing/src/services/pricing-module.ts @@ -7,9 +7,11 @@ import { FindConfig, InternalModuleDeclaration, ModuleJoinerConfig, + MoneyAmountDTO, PriceSetDTO, PricingContext, PricingFilters, + PricingRepositoryService, PricingTypes, RuleTypeDTO, } from "@medusajs/types" @@ -53,8 +55,9 @@ import { RuleTypeService, } from "@services" import { joinerConfig } from "../joiner-config" -import { CreatePriceListRuleValueDTO, PricingRepositoryService } from "../types" - +import { validatePriceListDates } from "@utils" +import { ServiceTypes } from "@types" +import { CreatePriceListRuleValueDTO } from "src/types/services" type InjectedDependencies = { baseRepository: DAL.RepositoryService pricingRepository: PricingRepositoryService @@ -426,7 +429,7 @@ export default class PricingModuleService< // Price rules if (priceRulesData.length > 0) { await this.priceRuleService_.create( - priceRulesData as PricingTypes.CreatePriceRuleDTO[], + priceRulesData as ServiceTypes.CreatePriceRuleDTO[], sharedContext ) } @@ -630,8 +633,8 @@ export default class PricingModuleService< // Price set money amounts let maCursor = 0 - const priceSetMoneyAmountsBulkData = input.flatMap( - ({ priceSetId, prices }) => + const priceSetMoneyAmountsBulkData: unknown[] = + input.flatMap(({ priceSetId, prices }) => prices.map(() => { const ma = createdMoneyAmounts[maCursor] const numberOfRules = Object.entries( @@ -645,10 +648,10 @@ export default class PricingModuleService< rules_count: numberOfRules, } }) - ) + ) const createdPriceSetMoneyAmounts = await this.priceSetMoneyAmountService_.create( - priceSetMoneyAmountsBulkData as unknown as PricingTypes.CreatePriceSetMoneyAmountDTO[], + priceSetMoneyAmountsBulkData as ServiceTypes.CreatePriceSetMoneyAmountDTO[], sharedContext ) @@ -661,19 +664,15 @@ export default class PricingModuleService< rulesCursor++ return Object.entries(rules).map(([k, v]) => ({ price_set_money_amount: priceSetMoneyAmount, - rule_type: ruleTypeMap.get(priceSetId)!.get(k), + rule_type_id: ruleTypeMap.get(priceSetId)!.get(k)!.id, price_set: priceSetId, value: v, - price_list_id: "test", // TODO: accept title })) }) ) if (priceRulesBulkData.length > 0) { - await this.priceRuleService_.create( - priceRulesBulkData as unknown as PricingTypes.CreatePriceRuleDTO[], - sharedContext - ) + await this.priceRuleService_.create(priceRulesBulkData, sharedContext) } } @@ -1272,7 +1271,10 @@ export default class PricingModuleService< data: PricingTypes.CreatePriceRuleDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { - const priceRules = await this.priceRuleService_.create(data, sharedContext) + const priceRules = await this.priceRuleService_.create( + data as ServiceTypes.CreatePriceRuleDTO[], + sharedContext + ) return this.baseRepository_.serialize( priceRules, @@ -1428,7 +1430,9 @@ export default class PricingModuleService< const priceListsToCreate: PricingTypes.CreatePriceListDTO[] = [] for (const priceListData of data) { - const { rules = {}, ...priceListOnlyData } = priceListData + const { rules = {}, prices = [], ...priceListOnlyData } = priceListData + + validatePriceListDates(priceListData) priceListsToCreate.push({ ...priceListOnlyData, @@ -1494,7 +1498,7 @@ export default class PricingModuleService< title: "test", rules_count: Object.keys(priceRules).length, }, - ] as unknown as PricingTypes.CreatePriceSetMoneyAmountDTO[], + ] as unknown as ServiceTypes.CreatePriceSetMoneyAmountDTO[], sharedContext ) @@ -1587,10 +1591,13 @@ export default class PricingModuleService< for (const priceListData of data) { const { rules, ...priceListOnlyData } = priceListData - const updatePriceListData = { + const updatePriceListData: any = { ...priceListOnlyData, } + validatePriceListDates(updatePriceListData) + + if (typeof rules === "object") { updatePriceListData.rules_count = Object.keys(rules).length } @@ -2012,7 +2019,7 @@ export default class PricingModuleService< ), ]) - const priceListRuleValuesToCreate: CreatePriceListRuleValueDTO[] = [] + const priceListRuleValuesToCreate: unknown[] = [] for (const { id, price_list, rule_type } of createdRules) { const ruleValues = priceRuleValues.get( @@ -2041,7 +2048,9 @@ export default class PricingModuleService< this.priceListRuleValueService_.delete( priceListValuesToDelete.map((p) => p.id) ), - this.priceListRuleValueService_.create(priceListRuleValuesToCreate), + this.priceListRuleValueService_.create( + priceListRuleValuesToCreate as CreatePriceListRuleValueDTO[] + ), ]) return this.baseRepository_.serialize( diff --git a/packages/pricing/src/services/rule-type.ts b/packages/pricing/src/services/rule-type.ts index 7f0e345616..21faf9d81c 100644 --- a/packages/pricing/src/services/rule-type.ts +++ b/packages/pricing/src/services/rule-type.ts @@ -1,4 +1,4 @@ -import { Context, DAL, FindConfig, PricingTypes } from "@medusajs/types" +import { Context, DAL, FindConfig } from "@medusajs/types" import { InjectManager, InjectTransactionManager, @@ -7,6 +7,7 @@ import { retrieveEntity, } from "@medusajs/utils" import { RuleType } from "@models" +import { ServiceTypes } from "@types" type InjectedDependencies = { ruleTypeRepository: DAL.RepositoryService @@ -22,10 +23,10 @@ export default class RuleTypeService { @InjectManager("ruleTypeRepository_") async retrieve( ruleTypeId: string, - config: FindConfig = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { - return (await retrieveEntity({ + return (await retrieveEntity({ id: ruleTypeId, identifierColumn: "id", entityName: RuleType.name, @@ -37,8 +38,8 @@ export default class RuleTypeService { @InjectManager("ruleTypeRepository_") async list( - filters: PricingTypes.FilterableRuleTypeProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterableRuleTypeProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -51,8 +52,8 @@ export default class RuleTypeService { @InjectManager("ruleTypeRepository_") async listAndCount( - filters: PricingTypes.FilterableRuleTypeProps = {}, - config: FindConfig = {}, + filters: ServiceTypes.FilterableRuleTypeProps = {}, + config: FindConfig = {}, @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], number]> { const queryOptions = ModulesSdkUtils.buildQuery(filters, config) @@ -65,7 +66,7 @@ export default class RuleTypeService { @InjectTransactionManager("ruleTypeRepository_") async create( - data: PricingTypes.CreateRuleTypeDTO[], + data: ServiceTypes.CreateRuleTypeDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.ruleTypeRepository_.create( @@ -76,7 +77,7 @@ export default class RuleTypeService { @InjectTransactionManager("ruleTypeRepository_") async update( - data: PricingTypes.UpdateRuleTypeDTO[], + data: ServiceTypes.UpdateRuleTypeDTO[], @MedusaContext() sharedContext: Context = {} ): Promise { return (await this.ruleTypeRepository_.update( diff --git a/packages/pricing/src/types/index.ts b/packages/pricing/src/types/index.ts index 99a6ccd6e7..4ed2a2c559 100644 --- a/packages/pricing/src/types/index.ts +++ b/packages/pricing/src/types/index.ts @@ -4,4 +4,5 @@ export type InitializeModuleInjectableDependencies = { logger?: Logger } -export * from "./repositories" +export * as RepositoryTypes from "./repositories" +export * as ServiceTypes from "./services" diff --git a/packages/pricing/src/types/repositories/currency.ts b/packages/pricing/src/types/repositories/currency.ts new file mode 100644 index 0000000000..cf5868fbd0 --- /dev/null +++ b/packages/pricing/src/types/repositories/currency.ts @@ -0,0 +1,13 @@ +export interface CreateCurrencyDTO { + code: string + symbol: string + symbol_native: string + name: string +} + +export interface UpdateCurrencyDTO { + code: string + symbol?: string + symbol_native?: string + name?: string +} diff --git a/packages/pricing/src/types/repositories/index.ts b/packages/pricing/src/types/repositories/index.ts index bd0562e143..a1e262b975 100644 --- a/packages/pricing/src/types/repositories/index.ts +++ b/packages/pricing/src/types/repositories/index.ts @@ -1,3 +1,11 @@ -export * from "./price-list" +export * from "./currency" +export * from "./money-amount" export * from "./price-list-rule-value" -export * from "./pricing" +export * from "./price-list-rule" +export * from "./price-list" +export * from "./price-rule" +export * from "./price-set-money-amount-rules" +export * from "./price-set-money-amount" +export * from "./price-set-rule-type" +export * from "./price-set" +export * from "./rule-type" diff --git a/packages/pricing/src/types/repositories/money-amount.ts b/packages/pricing/src/types/repositories/money-amount.ts new file mode 100644 index 0000000000..fc4842716a --- /dev/null +++ b/packages/pricing/src/types/repositories/money-amount.ts @@ -0,0 +1,18 @@ +import { Currency } from "@models" + +export interface CreateMoneyAmountDTO { + id?: string + currency_code: string + currency?: Currency + amount: number + min_quantity?: number | null + max_quantity?: number | null +} + +export interface UpdateMoneyAmountDTO { + id: string + currency_code?: string + amount?: number + min_quantity?: number + max_quantity?: number +} diff --git a/packages/pricing/src/types/repositories/price-list-rule.ts b/packages/pricing/src/types/repositories/price-list-rule.ts new file mode 100644 index 0000000000..cdaebf317e --- /dev/null +++ b/packages/pricing/src/types/repositories/price-list-rule.ts @@ -0,0 +1,16 @@ +import { PriceListDTO, RuleTypeDTO } from "../services" + +export interface CreatePriceListRuleDTO { + rule_type_id?: string + rule_type?: string | RuleTypeDTO + price_list_id?: string + price_list?: string | PriceListDTO +} + +export interface UpdatePriceListRuleDTO { + id: string + price_list_id?: string + rule_type_id?: string + price_list?: string + rule_type?: string +} diff --git a/packages/pricing/src/types/repositories/price-list.ts b/packages/pricing/src/types/repositories/price-list.ts index 10e8e24c20..1d5931b2d0 100644 --- a/packages/pricing/src/types/repositories/price-list.ts +++ b/packages/pricing/src/types/repositories/price-list.ts @@ -3,9 +3,18 @@ import { PriceListStatus, PriceListType } from "@medusajs/utils" export interface CreatePriceListDTO { title: string description: string - starts_at?: string - ends_at?: string + starts_at?: Date | string | null + ends_at?: Date | string | null status?: PriceListStatus type?: PriceListType rules_count?: number } + +export interface UpdatePriceListDTO { + id: string + title?: string + starts_at?: Date | string | null + ends_at?: Date | string | null + status?: PriceListStatus + number_rules?: number +} diff --git a/packages/pricing/src/types/repositories/price-rule.ts b/packages/pricing/src/types/repositories/price-rule.ts new file mode 100644 index 0000000000..af92fe08e5 --- /dev/null +++ b/packages/pricing/src/types/repositories/price-rule.ts @@ -0,0 +1,24 @@ +import { PriceSet, PriceSetMoneyAmount, RuleType } from "@models" +import { PriceSetDTO, PriceSetMoneyAmountDTO, RuleTypeDTO } from "@medusajs/types" + +export interface CreatePriceRuleDTO { + id?: string + price_set_id?: string + price_set?: PriceSet | string + rule_type_id?: string + rule_type?: RuleType | string + value: string + priority?: number + price_set_money_amount_id?: string + price_set_money_amount?: PriceSetMoneyAmount | string +} + +export interface UpdatePriceRuleDTO { + id: string + price_set_id?: string + rule_type_id?: string + value?: string + priority?: number + price_set_money_amount_id?: string + price_list_id?: string +} diff --git a/packages/pricing/src/types/repositories/price-set-money-amount-rules.ts b/packages/pricing/src/types/repositories/price-set-money-amount-rules.ts new file mode 100644 index 0000000000..f41a050f3a --- /dev/null +++ b/packages/pricing/src/types/repositories/price-set-money-amount-rules.ts @@ -0,0 +1,12 @@ +export interface CreatePriceSetMoneyAmountRulesDTO { + price_set_money_amount: string + rule_type: string + value: string +} + +export interface UpdatePriceSetMoneyAmountRulesDTO { + id: string + price_set_money_amount?: string + rule_type?: string + value?: string +} diff --git a/packages/pricing/src/types/repositories/price-set-money-amount.ts b/packages/pricing/src/types/repositories/price-set-money-amount.ts new file mode 100644 index 0000000000..d4b225b600 --- /dev/null +++ b/packages/pricing/src/types/repositories/price-set-money-amount.ts @@ -0,0 +1,15 @@ +import { MoneyAmountDTO, PriceListDTO, PriceSetDTO } from "../services" + +export interface UpdatePriceSetMoneyAmountDTO { + id: string + title?: string + price_set?: PriceSetDTO + money_amount?: MoneyAmountDTO +} + +export interface CreatePriceSetMoneyAmountDTO { + title?: string + price_set?: PriceSetDTO | string + price_list?: PriceListDTO | string + money_amount?: MoneyAmountDTO | string +} diff --git a/packages/pricing/src/types/repositories/price-set-rule-type.ts b/packages/pricing/src/types/repositories/price-set-rule-type.ts new file mode 100644 index 0000000000..7f08e22696 --- /dev/null +++ b/packages/pricing/src/types/repositories/price-set-rule-type.ts @@ -0,0 +1,12 @@ +import { PriceSetDTO, RuleTypeDTO } from "../services" + +export interface CreatePriceSetRuleTypeDTO { + price_set: PriceSetDTO | string + rule_type: RuleTypeDTO | string +} + +export interface UpdatePriceSetRuleTypeDTO { + id: string + price_set?: string + rule_type?: string +} diff --git a/packages/pricing/src/types/repositories/price-set.ts b/packages/pricing/src/types/repositories/price-set.ts new file mode 100644 index 0000000000..5b32fd09a4 --- /dev/null +++ b/packages/pricing/src/types/repositories/price-set.ts @@ -0,0 +1,5 @@ +export interface CreatePriceSetDTO {} + +export interface UpdatePriceSetDTO { + id: string +} diff --git a/packages/pricing/src/types/repositories/pricing.ts b/packages/pricing/src/types/repositories/pricing.ts deleted file mode 100644 index bd8f6e5be1..0000000000 --- a/packages/pricing/src/types/repositories/pricing.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { - CalculatedPriceSetDTO, - Context, - PricingContext, - PricingFilters, -} from "@medusajs/types" - -export interface PricingRepositoryService { - calculatePrices( - pricingFilters: PricingFilters, - pricingContext: PricingContext, - context: Context - ): Promise -} diff --git a/packages/pricing/src/types/repositories/rule-type.ts b/packages/pricing/src/types/repositories/rule-type.ts new file mode 100644 index 0000000000..30218cefdd --- /dev/null +++ b/packages/pricing/src/types/repositories/rule-type.ts @@ -0,0 +1,13 @@ +export interface CreateRuleTypeDTO { + id?: string + name: string + rule_attribute: string + default_priority?: number +} + +export interface UpdateRuleTypeDTO { + id: string + name?: string + rule_attribute?: string + default_priority?: number +} diff --git a/packages/pricing/src/types/services/currency.ts b/packages/pricing/src/types/services/currency.ts new file mode 100644 index 0000000000..5d11bb4f3c --- /dev/null +++ b/packages/pricing/src/types/services/currency.ts @@ -0,0 +1,27 @@ +import { BaseFilterable } from "@medusajs/types" + +export interface CreateCurrencyDTO { + code: string + symbol: string + symbol_native: string + name: string +} + +export interface UpdateCurrencyDTO { + code: string + symbol?: string + symbol_native?: string + name?: string +} + +export interface FilterableCurrencyProps + extends BaseFilterable { + code?: string[] +} + +export interface CurrencyDTO { + code: string + symbol?: string + symbol_native?: string + name?: string +} diff --git a/packages/pricing/src/types/services/index.ts b/packages/pricing/src/types/services/index.ts new file mode 100644 index 0000000000..438529e8ba --- /dev/null +++ b/packages/pricing/src/types/services/index.ts @@ -0,0 +1,12 @@ +export * from "./currency" +export * from "./money-amount" +export * from "./price-list-rule-value" +export * from "./price-list-rule" +export * from "./price-list" +export * from "./price-rule" +export * from "./price-set-money-amount-rules" +export * from "./price-set-money-amount" +export * from "./price-set-rule-type" +export * from "./price-set" +export * from "./pricing" +export * from "./rule-type" \ No newline at end of file diff --git a/packages/pricing/src/types/services/money-amount.ts b/packages/pricing/src/types/services/money-amount.ts new file mode 100644 index 0000000000..1252696a80 --- /dev/null +++ b/packages/pricing/src/types/services/money-amount.ts @@ -0,0 +1,39 @@ +import { + BaseFilterable, + CreateCurrencyDTO, + CurrencyDTO, + PriceSetMoneyAmountDTO, +} from "@medusajs/types" + +export interface CreateMoneyAmountDTO { + id?: string + currency_code: string + currency?: CreateCurrencyDTO + amount: number + min_quantity?: number | null + max_quantity?: number | null +} + +export interface UpdateMoneyAmountDTO { + id: string + currency_code?: string + amount?: number + min_quantity?: number + max_quantity?: number +} + +export interface MoneyAmountDTO { + id: string + currency_code?: string + currency?: CurrencyDTO + amount?: number + min_quantity?: number + max_quantity?: number + price_set_money_amount?: PriceSetMoneyAmountDTO +} + +export interface FilterableMoneyAmountProps + extends BaseFilterable { + id?: string[] + currency_code?: string | string[] +} diff --git a/packages/pricing/src/types/services/price-list-rule-value.ts b/packages/pricing/src/types/services/price-list-rule-value.ts new file mode 100644 index 0000000000..24a40b22cc --- /dev/null +++ b/packages/pricing/src/types/services/price-list-rule-value.ts @@ -0,0 +1,26 @@ +import { BaseFilterable } from "@medusajs/types" +import { PriceListRule } from "@models" + +export interface CreatePriceListRuleValueDTO { + price_list_rule_id?: string + price_list_rule: PriceListRule | string + value: string +} + +export interface UpdatePriceListRuleValueDTO { + id: string + value: string +} + +export interface PriceListRuleValueDTO { + id: string + value: string + price_list_rule: PriceListRule +} + +export interface FilterablePriceListRuleValueProps + extends BaseFilterable { + id?: string[] + value?: string[] + price_list_rule_id?: string[] +} diff --git a/packages/pricing/src/types/services/price-list-rule.ts b/packages/pricing/src/types/services/price-list-rule.ts new file mode 100644 index 0000000000..e87bab281f --- /dev/null +++ b/packages/pricing/src/types/services/price-list-rule.ts @@ -0,0 +1,37 @@ +import { + BaseFilterable, + PriceListDTO, + PriceListRuleValueDTO, + RuleTypeDTO, +} from "@medusajs/types" + +export interface CreatePriceListRuleDTO { + rule_type_id?: string + rule_type?: string | RuleTypeDTO + price_list_id?: string + price_list?: string | PriceListDTO +} + +export interface UpdatePriceListRuleDTO { + id: string + price_list_id?: string + rule_type_id?: string + price_list?: string + rule_type?: string +} + +export interface PriceListRuleDTO { + id: string + value: string + rule_type: RuleTypeDTO + price_list: PriceListDTO + price_list_rule_values?: PriceListRuleValueDTO[] +} + +export interface FilterablePriceListRuleProps + extends BaseFilterable { + id?: string[] + value?: string[] + rule_type?: string[] + price_list_id?: string[] +} diff --git a/packages/pricing/src/types/services/price-list.ts b/packages/pricing/src/types/services/price-list.ts new file mode 100644 index 0000000000..60ed0d970a --- /dev/null +++ b/packages/pricing/src/types/services/price-list.ts @@ -0,0 +1,50 @@ +import { PriceListStatus, PriceListType } from "@medusajs/utils" +import { + BaseFilterable, + MoneyAmountDTO, + PriceListRuleDTO, + PriceSetMoneyAmountDTO, + RuleTypeDTO, +} from "@medusajs/types" + +export interface CreatePriceListDTO { + title: string + description: string + starts_at?: Date | string | null + ends_at?: Date | string | null + status?: PriceListStatus + type?: PriceListType + number_rules?: number +} + +export interface UpdatePriceListDTO { + id: string + title?: string + starts_at?: Date | string | null + ends_at?: Date | string | null + status?: PriceListStatus + number_rules?: number +} + +export interface PriceListDTO { + id: string + title?: string + starts_at?: string | null + status?: PriceListStatus + ends_at?: string | null + number_rules?: number + price_set_money_amounts?: PriceSetMoneyAmountDTO[] + money_amounts?: MoneyAmountDTO[] + rule_types?: RuleTypeDTO[] + rules?: PriceListRuleDTO[] + price_list_rules?: PriceListRuleDTO[] +} + +export interface FilterablePriceListProps + extends BaseFilterable { + id?: string[] + starts_at?: string[] + ends_at?: string[] + status?: PriceListStatus[] + number_rules?: number[] +} diff --git a/packages/pricing/src/types/services/price-rule.ts b/packages/pricing/src/types/services/price-rule.ts new file mode 100644 index 0000000000..3ee33e43c2 --- /dev/null +++ b/packages/pricing/src/types/services/price-rule.ts @@ -0,0 +1,44 @@ +import { BaseFilterable, PriceSetDTO, PriceSetMoneyAmountDTO, RuleTypeDTO } from "@medusajs/types" +import { PriceSet, PriceSetMoneyAmount, RuleType } from "@models" + +export interface CreatePriceRuleDTO { + id?: string + price_set_id?: string + price_set?: PriceSet | string + rule_type_id?: string + rule_type?: RuleType | string + value: string + priority?: number + price_set_money_amount_id?: string + price_set_money_amount?: PriceSetMoneyAmount | string +} + +export interface UpdatePriceRuleDTO { + id: string + price_set_id?: string + rule_type_id?: string + value?: string + priority?: number + price_set_money_amount_id?: string + price_list_id?: string +} + +export interface PriceRuleDTO { + id: string + price_set_id: string + price_set: PriceSetDTO + rule_type_id: string + rule_type: RuleTypeDTO + value: string + priority: number + price_set_money_amount_id: string + price_list_id: string +} + +export interface FilterablePriceRuleProps + extends BaseFilterable { + id?: string[] + name?: string[] + price_set_id?: string[] + rule_type_id?: string[] +} diff --git a/packages/pricing/src/types/services/price-set-money-amount-rules.ts b/packages/pricing/src/types/services/price-set-money-amount-rules.ts new file mode 100644 index 0000000000..562d8a22e0 --- /dev/null +++ b/packages/pricing/src/types/services/price-set-money-amount-rules.ts @@ -0,0 +1,33 @@ +import { + BaseFilterable, + PriceSetMoneyAmountDTO, + RuleTypeDTO, +} from "@medusajs/types" + +export interface CreatePriceSetMoneyAmountRulesDTO { + price_set_money_amount: string + rule_type: string + value: string +} + +export interface UpdatePriceSetMoneyAmountRulesDTO { + id: string + price_set_money_amount?: string + rule_type?: string + value?: string +} + +export interface PriceSetMoneyAmountRulesDTO { + id: string + price_set_money_amount: PriceSetMoneyAmountDTO + rule_type: RuleTypeDTO + value: string +} + +export interface FilterablePriceSetMoneyAmountRulesProps + extends BaseFilterable { + id?: string[] + rule_type_id?: string[] + price_set_money_amount_id?: string[] + value?: string[] +} diff --git a/packages/pricing/src/types/services/price-set-money-amount.ts b/packages/pricing/src/types/services/price-set-money-amount.ts new file mode 100644 index 0000000000..dd6fa09cc7 --- /dev/null +++ b/packages/pricing/src/types/services/price-set-money-amount.ts @@ -0,0 +1,39 @@ +import { + BaseFilterable, + MoneyAmountDTO, + PriceListDTO, + PriceRuleDTO, + PriceSetDTO, +} from "@medusajs/types" + +export interface UpdatePriceSetMoneyAmountDTO { + id: string + title?: string + price_set?: PriceSetDTO + money_amount?: MoneyAmountDTO +} + +export interface CreatePriceSetMoneyAmountDTO { + title?: string + price_set?: PriceSetDTO | string + price_list?: PriceListDTO | string + money_amount?: MoneyAmountDTO | string + rules_count?: number +} + +export interface FilterablePriceSetMoneyAmountProps + extends BaseFilterable { + id?: string[] + price_set_id?: string[] + price_list_id?: string[] +} + +export interface PriceSetMoneyAmountDTO { + id: string + title?: string + price_set?: PriceSetDTO + price_list?: PriceListDTO + price_set_id?: string + price_rules?: PriceRuleDTO[] + money_amount?: MoneyAmountDTO +} diff --git a/packages/pricing/src/types/services/price-set-rule-type.ts b/packages/pricing/src/types/services/price-set-rule-type.ts new file mode 100644 index 0000000000..bc10df49f4 --- /dev/null +++ b/packages/pricing/src/types/services/price-set-rule-type.ts @@ -0,0 +1,26 @@ +import { BaseFilterable, PriceSetDTO, RuleTypeDTO } from "@medusajs/types" + +export interface CreatePriceSetRuleTypeDTO { + price_set: PriceSetDTO | string + rule_type: RuleTypeDTO | string +} + +export interface UpdatePriceSetRuleTypeDTO { + id: string + price_set?: string + rule_type?: string +} + +export interface PriceSetRuleTypeDTO { + id: string + price_set: PriceSetDTO + rule_type: RuleTypeDTO + value: string +} + +export interface FilterablePriceSetRuleTypeProps + extends BaseFilterable { + id?: string[] + rule_type_id?: string[] + price_set_id?: string[] +} diff --git a/packages/pricing/src/types/services/price-set.ts b/packages/pricing/src/types/services/price-set.ts new file mode 100644 index 0000000000..db52dab419 --- /dev/null +++ b/packages/pricing/src/types/services/price-set.ts @@ -0,0 +1,24 @@ +import { + BaseFilterable, + FilterableMoneyAmountProps, + MoneyAmountDTO, + RuleTypeDTO, +} from "@medusajs/types" + +export interface CreatePriceSetDTO {} + +export interface UpdatePriceSetDTO { + id: string +} + +export interface PriceSetDTO { + id: string + money_amounts?: MoneyAmountDTO[] + rule_types?: RuleTypeDTO[] +} + +export interface FilterablePriceSetProps + extends BaseFilterable { + id?: string[] + money_amounts?: FilterableMoneyAmountProps +} diff --git a/packages/pricing/src/types/services/pricing.ts b/packages/pricing/src/types/services/pricing.ts new file mode 100644 index 0000000000..36292b8cc5 --- /dev/null +++ b/packages/pricing/src/types/services/pricing.ts @@ -0,0 +1,28 @@ +import { Context } from "@medusajs/types" + +export interface PricingRepositoryService { + calculatePrices( + pricingFilters: PricingFilters, + pricingContext: PricingContext, + context: Context + ): Promise +} + +export interface PricingFilters { + id: string[] +} + +export interface PricingContext { + context?: Record +} + +export interface CalculatedPriceSetDTO { + id: string + price_set_id: string + amount: string | null + currency_code: string | null + min_quantity: string | null + max_quantity: string | null + price_list_type: string | null + price_list_id: string | null +} diff --git a/packages/pricing/src/types/services/rule-type.ts b/packages/pricing/src/types/services/rule-type.ts new file mode 100644 index 0000000000..cdd49fec45 --- /dev/null +++ b/packages/pricing/src/types/services/rule-type.ts @@ -0,0 +1,29 @@ +import { BaseFilterable } from "@medusajs/types" + +export interface CreateRuleTypeDTO { + id?: string + name: string + rule_attribute: string + default_priority?: number +} + +export interface UpdateRuleTypeDTO { + id: string + name?: string + rule_attribute?: string + default_priority?: number +} + +export interface RuleTypeDTO { + id: string + name: string + rule_attribute: string + default_priority: number +} + +export interface FilterableRuleTypeProps + extends BaseFilterable { + id?: string[] + name?: string[] + rule_attribute?: string[] +} diff --git a/packages/pricing/src/utils/index.ts b/packages/pricing/src/utils/index.ts new file mode 100644 index 0000000000..5c60adb105 --- /dev/null +++ b/packages/pricing/src/utils/index.ts @@ -0,0 +1 @@ +export * from "./validate-price-list-dates" diff --git a/packages/pricing/src/utils/validate-price-list-dates.ts b/packages/pricing/src/utils/validate-price-list-dates.ts new file mode 100644 index 0000000000..bb23008836 --- /dev/null +++ b/packages/pricing/src/utils/validate-price-list-dates.ts @@ -0,0 +1,20 @@ +import { isDate, MedusaError } from "@medusajs/utils" + +export const validatePriceListDates = (priceListData: { + starts_at?: Date | string | null + ends_at?: Date | string | null +}) => { + if (!!priceListData.starts_at && !isDate(priceListData.starts_at)) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Cannot set price list starts at with with invalid date string: ${priceListData.starts_at}` + ) + } + + if (!!priceListData.ends_at && !isDate(priceListData.ends_at)) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Cannot set price list ends at with with invalid date string: ${priceListData.ends_at}` + ) + } +} diff --git a/packages/pricing/tsconfig.json b/packages/pricing/tsconfig.json index 213e38fc55..4f3a748756 100644 --- a/packages/pricing/tsconfig.json +++ b/packages/pricing/tsconfig.json @@ -1,6 +1,8 @@ { "compilerOptions": { - "lib": ["es2020"], + "lib": [ + "es2020" + ], "target": "es2020", "outDir": "./dist", "esModuleInterop": true, @@ -16,16 +18,31 @@ "noImplicitThis": true, "allowJs": true, "skipLibCheck": true, - "downlevelIteration": true, // to use ES5 specific tooling + "downlevelIteration": true, + // to use ES5 specific tooling "baseUrl": ".", "resolveJsonModule": true, "paths": { - "@models": ["./src/models"], - "@services": ["./src/services"], - "@repositories": ["./src/repositories"] + "@models": [ + "./src/models" + ], + "@services": [ + "./src/services" + ], + "@repositories": [ + "./src/repositories" + ], + "@types": [ + "./src/types" + ], + "@utils": [ + "./src/utils" + ] } }, - "include": ["src"], + "include": [ + "src" + ], "exclude": [ "dist", "./src/**/__tests__", diff --git a/packages/types/src/pricing/common/price-list.ts b/packages/types/src/pricing/common/price-list.ts index 6f41c01ea7..a28ba2a796 100644 --- a/packages/types/src/pricing/common/price-list.ts +++ b/packages/types/src/pricing/common/price-list.ts @@ -1,8 +1,8 @@ -import { CreateMoneyAmountDTO, MoneyAmountDTO } from "./money-amount" +import { CreateMoneyAmountDTO, MoneyAmountDTO } from "./money-amount"; -import { BaseFilterable } from "../../dal" -import { PriceSetMoneyAmountDTO } from "./price-set-money-amount" -import { RuleTypeDTO } from "./rule-type" +import { BaseFilterable } from "../../dal"; +import { PriceSetMoneyAmountDTO } from "./price-set-money-amount"; +import { RuleTypeDTO } from "./rule-type"; /** * @enum @@ -152,11 +152,11 @@ export interface CreatePriceListDTO { /** * The price list is enabled starting from this date. */ - starts_at?: string + starts_at?: Date | string | null /** * The price list expires after this date. */ - ends_at?: string + ends_at?: Date | string | null /** * The price list's status. */ @@ -193,14 +193,18 @@ export interface UpdatePriceListDTO { * The price list's title. */ title?: string + /** + * The price list's description. + */ + description?: string /** * The price list is enabled starting from this date. */ - starts_at?: string | null + starts_at?: Date | string | null /** * The price list expires after this date. */ - ends_at?: string | null + ends_at?: Date | string | null /** * The price list's status. */ diff --git a/packages/types/src/pricing/common/price-set.ts b/packages/types/src/pricing/common/price-set.ts index 651c4a810f..2752e29d08 100644 --- a/packages/types/src/pricing/common/price-set.ts +++ b/packages/types/src/pricing/common/price-set.ts @@ -1,7 +1,20 @@ import { BaseFilterable } from "../../dal"; -import { CreateMoneyAmountDTO, FilterableMoneyAmountProps, MoneyAmountDTO } from "./money-amount"; -import { RuleTypeDTO } from "./rule-type"; import { CreatePriceSetPriceRules } from "./price-list"; +import { + CreateMoneyAmountDTO, + FilterableMoneyAmountProps, + MoneyAmountDTO, +} from "./money-amount" +import { RuleTypeDTO } from "./rule-type" +import { Context } from "../../shared-context" + +export interface PricingRepositoryService { + calculatePrices( + pricingFilters: PricingFilters, + pricingContext: PricingContext, + context: Context + ): Promise +} /** * @interface diff --git a/packages/types/src/workflow/price-list/create-price-list.ts b/packages/types/src/workflow/price-list/create-price-list.ts index a96165cded..38e9aae4d9 100644 --- a/packages/types/src/workflow/price-list/create-price-list.ts +++ b/packages/types/src/workflow/price-list/create-price-list.ts @@ -60,8 +60,8 @@ export interface CreatePriceListWorkflowDTO { name: string description: string type?: string - starts_at?: string - ends_at?: string + starts_at?: Date + ends_at?: Date status?: PriceListStatus rules_count?: number prices: InputPrice[] diff --git a/packages/types/src/workflow/price-list/update-price-list.ts b/packages/types/src/workflow/price-list/update-price-list.ts index a0f035267f..e2d23cd86f 100644 --- a/packages/types/src/workflow/price-list/update-price-list.ts +++ b/packages/types/src/workflow/price-list/update-price-list.ts @@ -10,8 +10,8 @@ export type PriceListVariantPriceDTO = UpdateProductVariantPricesInputDTO & { export interface UpdatePriceListWorkflowDTO { id: string name?: string - starts_at?: string - ends_at?: string + starts_at?: Date + ends_at?: Date status?: PriceListStatus rules?: CreatePriceListRules prices?: PriceListVariantPriceDTO[] diff --git a/packages/utils/src/common/get-iso-string-from-date.ts b/packages/utils/src/common/get-iso-string-from-date.ts new file mode 100644 index 0000000000..cd04878c46 --- /dev/null +++ b/packages/utils/src/common/get-iso-string-from-date.ts @@ -0,0 +1,15 @@ +import { isDate } from "./is-date" +import { MedusaError } from "./errors" + +export const GetIsoStringFromDate = (date: Date | string) => { + if (!isDate(date)) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Cannot format date to ISO string: ${date}` + ) + } + + date = new Date(date) + + return date.toISOString() +} diff --git a/packages/utils/src/common/index.ts b/packages/utils/src/common/index.ts index b878492f04..dd1bed2728 100644 --- a/packages/utils/src/common/index.ts +++ b/packages/utils/src/common/index.ts @@ -15,6 +15,7 @@ export * from "./is-defined" export * from "./is-email" export * from "./is-object" export * from "./is-string" +export * from "./get-iso-string-from-date" export * from "./lower-case-first" export * from "./map-object-to" export * from "./medusa-container" diff --git a/packages/utils/src/common/is-date.ts b/packages/utils/src/common/is-date.ts index 97e98072d3..97d83c9f59 100644 --- a/packages/utils/src/common/is-date.ts +++ b/packages/utils/src/common/is-date.ts @@ -1,4 +1,3 @@ export function isDate(value: any): value is Date { - const date = new Date(value) - return !isNaN(date.valueOf()) + return value !== null && !isNaN(new Date(value).valueOf()) }