* add support for customer first- and last names and phone
* test for querying customer first_name, last_name and phone
* add customer as prop for querying orders
* polishing before pr
* changeset
**What**
update module definitions in `ConfigModule` to support the following module configuration methods:
- none: defaults are loaded
- boolean `inventoryService: true|false`, if true the defaults are loaded, false throws if it's a required module, if the module is not required it's not loaded
- string: `inventoryService: "..."`, treats the string as a path to the overriding module, (we dont handle the case where a string is given but the module is not overridable, we just load the default in that case)
- `ConfigurableModuleDeclaration = { resolve?: string, options?: Record } `, like plugins, options can be used to pass configs to the main service of the module, if not defined no options are passed. Resolve is like string, if defined it's used to look for a custom module, otherwise the default is loaded.
Testing:
- Added unit tests for:
- `loaders/modules.ts`
- `loaders/module-definitions/index.ts`
Fixes CORE-932
* test subtotals on draft order operations
* fetch cart with subtotals when doing draft order operations
* write test for updating discounts seeing changes in totals
* formatting
* udpate test
* force taxes
* missing select
* add import
* rm force_taxes
* use correct authentication middleware
* remove guard from get-session since it's guarded by middleware doing the same check
* Add integration tests
* Create lazy-swans-agree.md
Co-authored-by: olivermrbl <oliver@mrbltech.com>
Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
**What**
- Ensure that swaps can be created for orders with discounts in tax inclusive regions
**How**
- Retrieve cart with discounts and region before creating adjustments for line items in cart.
- In `discountService.calculateDiscountForLineItem` we used the method `totalsService.getLineItemTotals` if a line-item is tax inclusive. This method uses some fields from the cart that aren't populated on cart creation (such a `items` which caused the original error).
**Testing**
- add integration test `swaps > tax inclusive > "Complete swap flow with discount"` that creates a swap in the following environment
- tax inclusive region
- tax inclusive line item to be swapped
- fixed type discount with allocation: total
Fixes CORE-748
**What**
- validate shipping option requirements including tax if the shipping option is tax inclusive
**Testing**
- " given a cart with total above min-threshold and subtotal below min-threshold shipping option with tax inclusive pricing is available and can be applied"
- "given a cart with total above max-threshold and subtotal below max-threshold shipping option with tax inclusive pricing is not available"
Fixes CORE-752
**What**
- add error handling when loading project config
**How**
- Add error parameter to get-medusa-config result if an error was thrown (previously we returned an empty config)
- Discussion:
A different, but equally valid approach could be just throwing the error rather than creating an error parameter. This causes a more ugly output without warnings and changes the api a bit but it would force error handling. wdyt?
**Why**
- cli would fail with database error `databaseMissingDriverError` if config was invalid, ex. missing a comma
### example (missing `,` in config)
**old output**
```
Successfully compiled 2 files with Babel (143ms).
[medusa-config] ⚠️ redis_url not found. A fake redis instance will be used.
[medusa-config] ⚠️ database_type not found. fallback to default sqlite.
info: Using flag MEDUSA_FF_ORDER_EDITING from environment with value true
info: Using flag MEDUSA_FF_SALES_CHANNELS from environment with value true
info: Using flag MEDUSA_FF_TAX_INCLUSIVE_PRICING from environment with value true
info: Using fake Redis
✔ Models initialized – 13ms
✔ Plugin models initialized – 0ms
✔ Repositories initialized – 17ms
⠋ Initializing databaseMissingDriverError: Wrong driver: "undefined" given. Supported drivers are: "aurora-data-api", "aurora-data-api-pg", "better-sqlite3", "capacitor", "cockroachdb", "cordova", "expo", "mariadb", "mongodb", "mssql", "mysql", "nativescript", "oracle", "postgres", "react-native", "sap", "sqlite", "sqljs".
```
**new output**
```
Successfully compiled 2 files with Babel (185ms).
error: Error in loading config: Unexpected identifier
error: /Users/phko/projects/community/my-medusa-store/medusa-config.js:129
plugins,
^^^^^^^
SyntaxError: Unexpected identifier
at compileFunction (<anonymous>)
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1033:15)
at Module._compile (node:internal/modules/cjs/loader:1069:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at getConfigFile (/Users/phko/projects/community/my-medusa-store/node_modules/medusa-core-utils/dist/get-config-file.js:26:20)
```
* wait for update to order edit model
* delete line item tests
* create remove method for lineitem with tax lines
* add remove item tests
* split delete allocation tests into two: more and less than total
* remove unused import
* cleanup
* add medusa-js and react endpoints
* pr feedback fixes
* linting
* remove unused relation from query
* remove removed-event and unused imports
* add await
**What**
- include the default sales channel in the result of `get-store` if featureflag is set
Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
**What**
- Add `transformQuery` to get endpoints for product, order and cart
- ensure that the default relations (when getting a singular entity) includes sales channels when enabled
- Add `EmptyQueryParams` class in common types to prevent query parameters while using `transformQuery`
- update product-, order- and cartFactory to include sales channels if provided
- remove `packages/medusa/src/controllers/products/admin-list-products.ts`
**Testing**
- expands sales channel for single order
- expands sales channels for orders with expand parameter
- returns single product with sales channel
- expands sales channels for products with expand parameter
- returns cart with sales channel for single cart
Fixes CORE-293
Co-authored-by: Sebastian Rindom <7554214+srindom@users.noreply.github.com>
Co-authored-by: Adrien de Peretti <25098370+adrien2p@users.noreply.github.com>
**What**
- Add `feature_flags` string array to store response
**Why**
- to provide conditional ui in admin corresponding to enabled features
Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
**What**
- Add tag to indicate methods are part of an experimental feature under development
**Why**
- To notify developers because we cant support featureflags in the same way from the client side libraries.
* feat: add feature flag loading in projects
* fix: make feature flag consume itself
* fix: rename container registration to featureFlagRouter
* fix: refactor
* behavioral feature flags
* add environment to server
* limit "useTemplateDb" to non feature flagged migrations
* filter migrations and entities according to those which are enabled in the environment
* run only migrations that are enabled when running 'medusa migrations run'
* add logging to the featureflag loader
* initial implementation of featureFlagEntity
* column descriptors
* initial startServerWithEnv (to be refactored)
* update commands
* final touches
* update loaders to fix unit tests
* enable all batch job tests
* update seed method
* add api test capabilities
* revert batch job test
* revert formatting changes
* pr feedback
* pr feedback
* remove unused imports
* rename feature flag decorators
* pr feedback
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
**What**
- convert fulfillment service to typescript
I have removed the `transform` parameter from the getFulfillmentItems_ function since it was not being used with different methods, only `validateFulfillmentLineItem_`. Instead I have just reference the validateFulfillmentLineItem_ function directly.
We have the same pattern across some different methods, is there a specific reason or just for future proofing?
* centralize common knowledge and checks for list-customers in repository
* convert customer service to typescript
* fix typing error in update-address
* add await
* add atomic phases
* update types for customerservice
* update api and model types
* pr feedback
* remove Promise.resolve
* typing of buildQuery
* remove atomic phase from private method
* add initial testing files
* prepare for github
* remove empty files
* remove ids
* set user and password for postgres service
* remove node setup
* remove unused flag from yarn install
* correct medusajs package
* arguments for create-medusa project
* make create command into one line
* working directory update
* update workflow
* add build
* run scripts from medusa-cli
* move scripts to medusa-cli
* add install
* get server output
* rename build to install
* update login script to get feedback
* add arguments to login script
* add argument for directory to get-product
* pass cli-test to get-products script
* add wait command
* fix waiting
* update wait-for-server
* echo status
* update start testing
* refactor code into test-action
* add list config for testing
* include shell
* update get-products script
* test to see if action fails when given wrong input
* use custom action for testing devleopment server and extend waiting for server to spin up
* update actions
* remove cache version
* yarn and build in cli-test directory
* update core
* update working directories
* test working dir after cd up
* update
* fix directories
* update directories
* use setup server action
* invoke correct action
* test
* update cli action
* remove action
* test with medusa-dev
* remove medusa dev for now
* test
* include medusa-dev
* remove invalid medusa new command
* try moving project one dir up
* add silent to curl output from live server wait
* update seed data directory
* test
* remove sub workflow
* add matrix and postgres override for medusa-config
* fix matrix syntax
* add database url to job
* update yaml
* cli should fail on logging in
* create setup server action
* update test-server
* update scripts
* run scripts directory instead of cli scripts
* make directories current
* remove tests from cli
* run only on pr
* update name
* remove batch job model (for testing purposes)
* remove ls from test server action
* get content from develop
* undo changes to generate reference
* remove comments from scripts
* test failing command
* redo migrate command failing
* move scripts into interation tests
* Apply suggestions from code review
Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
* add batch job strategy interface
* update plugin loaders
* remove comment
* make map async
* ensure that only one of each strategy is registered
* register strategies plural
* add identifier and batchType properties
* extend batch job strategy identification method
* initial test
* update loaders to accomodate different ways of accessing batch job strategies
* identifier batch type field
* redo merge in plugins
* update interface and load only js files
* use switches instead of elif
* remove comments
* use static properties for strategy registration
* update tests
* fix unit tests
* update test names
* update isBatchJobStrategy method
* add check for TransactionBaseService in services for plugins
* update interfaces export
* update batchjob strategy interface with a prepare script
* update loaders
* update batchjob strategy interface
* remove everything but public interface methods from batchJobStrategy
* add default implementation to prepareBathJobForProcessing
* remove unused import
* add file service interface initial
* pr feedback
* use abstract fileservice for file service plugins
* update plugin loader for services
* implement fileservices with abstractFileService and convert to ts
* update fileservice interface
* remove fileservice loading of old interface
* re-add loading of old fileservice interface
* re-rename digital ocean fileservice to javascript
* revert s3 to js
* revert minio to js
* remove irrelevant method implementation
* rename download stream method to reflect upload stream method
* update fileservice
* use isFileService in loaders
* remove fields from js class
* rename "generatePresignedDownloadUrl" to "getPresignedDownloadUrl"
* make methods abstract in AbstractFileService
* create download stream endpoint (#1583)
* Feat/upload to storage (#1580)
* add test generate endpoint to api
* rename method to getUploadStream
* cleanup generate example
* upload file example
* remove comment
* make vars const
* Feat/create presigned download url (#1582)
* implement "generatePresignedDownloadUrl"
* add get-download-url endpoint for testing
* remove examples
* update index ts
* create generalized method for aws update in DO fileservice
* update bucket configuration
* update interface types
* add typings to fileservice methods
* update service loaders
* update fileservice interface to extend transaction base service
* create download stream endpoint (#1583)
* Feat/upload to storage (#1580)
* add test generate endpoint to api
* rename method to getUploadStream
* cleanup generate example
* upload file example
* remove comment
* make vars const
* Feat/create presigned download url (#1582)
* implement "generatePresignedDownloadUrl"
* add get-download-url endpoint for testing
* remove examples
* update index ts
* create generalized method for aws update in DO fileservice
* update bucket configuration
* update interface types
* update download method name
* revert changes
* add filekey and optional extension to the fileservice result
* add key to the result of getUploadStream
* rename key to filekey
* rename key to filekey in getUploadStream result
* rename key to filekey in getDownloadStream and getPresignedDownloadUrl
* rename key to fileKey for getUploadedFileType
Co-authored-by: olivermrbl <oliver@mrbltech.com>
* add customer groups to price list factory
* add integration test for filtering price lists by customer group
* normalize list price list query
* add customer groups to list-price-list queryparameters
* query based on customergroups if they exist for price lists
* remove verbose flag
* add another price list with a customer group
* remove console.log
* pr feedback
* add query type to repository
* add query type to repository
* set groups to undefined instead of deleting parameter
* remove wildcard destructing
* make buildQuery type specific to price lists
* steal Adriens types
* fix(medusa): support searching for price lists (#1407)
* delete instead of settting groups to undefined
* add groups to query with q
* use simple customer group factory instead of manual creation
* Update simple-customer-group-factory.ts
* remove comma that breaks integration-tests
Co-authored-by: Zakaria El Asri <33696020+zakariaelas@users.noreply.github.com>
* export everything from price lists in core
* medusa-js price list
* feat: add product list for price lists
* feat: add product list for price lists
* add price list to admin module
* add price list hooks initial
* refactor: product list controller
* fix: add integration test for price list products
* update types
* add tests for price lists
* update medusa react tests
* update update request for price lists
* Apply suggestions from code review
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* rename methods
* pr feedback
* list products from price list
* fix errors after merge
* update medusa react with medusa-js method name changes
* redo changes
* update hook names
* fix: routes in msw handler
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
Co-authored-by: Zakaria El Asri <zakaria.elas@gmail.com>
* initial
* add logged in item to cart gets correct price
* customer id or cart_id customer id
* move customer_id to a config
* update unit test
* run pipelines
* add controllers directory and loaders
* update integration tests
* start groups
* move controllers to pure functions
* group filtering for customers
* print errors
* remove verbose flag
* controller refactor
* update imports
* Feat/list customers by customer group (#1114)
* move controllers to pure functions
* add customer group test
* add api for list customer group customers
* remove unused imports
* controller refactor
* update imports
* Update packages/medusa/src/api/routes/admin/customer-groups/get-customer-group-customers.ts
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* fix: dedupe
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* fix babel transform-runtime regenerator required for migrations
* add customer group model
* add migration for customer group
* add customer group model export
* add customer group repository
* add customer group service
* add CustomerGroupRepository to "withTransaction" in CustomerGroupService
* remove unnecessary argument to runtime plugin
* service export ordering
* add create customer group endpoint
* add customergroup to route index in admin
* add customer group service
* add customer groups test
* cleanup
* add customers batch initial
* batch creation of customer groups
* integration testing batch creation
* integration tests
* chaining existing customers creation in repo
* remove commented test
* update unit tests to reflect change in idempotent behavior
* ensure that exceptions are expected
* update idempotency behavior
* update formatting
* update format
* Update packages/medusa/src/repositories/customer-group.ts
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* pr feedback
* add In import
* add seperate model dto
* add integration test
* error handling in repository
* remove unused import
* jsdoc
* Update packages/medusa/src/api/routes/admin/customer-groups/add-customers-batch.ts
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* Update packages/medusa/src/api/routes/admin/customer-groups/add-customers-batch.ts
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* pr review comments
* rename variable
* fix: adds atomic phase clean up callback
* fix: call error handler in new transaction block too
* restore
* error handling
* fix: error handler in no isolation case
* add integration test for missing group on update
* final adjustments to test
* fix pr feedback
* cleanup core for pr
* remove console.log
* remove customergroupservice test from customers
* Apply suggestions from code review
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* add end bracket to customer tests
* remove comments
* change model decorator
* fix integration test merge
* onDelete cascade instead of cascade:true
* remove verbose flag
* fix: dedupe type
* add save to customer groups
* customer model delete cascade
* add await to asyncronous save operations
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* fix babel transform-runtime regenerator required for migrations
* add customer group model
* add migration for customer group
* add customer group model export
* add customer group repository
* add customer group service
* add CustomerGroupRepository to "withTransaction" in CustomerGroupService
* remove unnecessary argument to runtime plugin
* service export ordering
* add create customer group endpoint
* add customergroup to route index in admin
* add customer group service
* add customer groups test
* cleanup
* duplicate error handling
* ducplicate name integration test
* add jsdoc
* customergroup not customer
* pr feedback
* pipeline test
* fix weird merge
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* fix babel transform-runtime regenerator required for migrations
* add customer group model
* add migration for customer group
* add customer group model export
* add customer group repository
* add customer group service
* add CustomerGroupRepository to "withTransaction" in CustomerGroupService
* remove unnecessary argument to runtime plugin
* service export ordering
* add create customer group endpoint
* add customergroup to route index in admin
* add customer group service
* add customer groups test
* cleanup
* duplicate error handling
* ducplicate name integration test
* add jsdoc
* customergroup not customer
* pr feedback
* pipeline test
* fix weird merge
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>