Commit Graph
100 Commits
Author SHA1 Message Date
Adrien de PerettiandGitHub ec5415ea1a chore(modules-sdk, medusa): Cleanup migration helpers (#7342)
**What**
Cleanup the migrations scripts
2024-05-15 15:52:26 +00:00
Adrien de PerettiandGitHub 13ce60b999 fix(medusa, modules-sdk): Fix migrate command and fix revert support (#7340) 2024-05-15 15:46:23 +02:00
Adrien de PerettiandGitHub 63623422fe chore(): Autoload module resources (#7291)
**What**
- automatically build and consume connection and container loader if not exported by the module
- therefore load the services and repositories automatically, including baseRepository
- automatically build run and revert migrations if not provided
- cleaup modules to remove extra unnecessary bits and pieces
- remove the `initializeFactory` in favor of using `medusaApp`

Should drastically improve the module building DX by removing a lot of boilerplate to handle by the user, that plus the base entity should simplify quite a lot the flow cc @shahednasser 

**Note**
I had to choose a way to identify connection and container loader from the exported loader from the module. I decided to go with named function `connectionLoader` and `containerLoader`, also, now the factories will return named function so if the user use the factories we are providing to build those loaders, the function will also be named and identified
2024-05-13 12:12:36 +00:00
Adrien de PerettiandGitHub e5904f8c75 fix(medusa): Missing middlewares export (#7289) 2024-05-10 15:43:43 +00:00
Adrien de PerettiandGitHub 45e2228a07 chore(utils): Provide a mikro orm base entity (#7286)
**What**
Provide a new mikro orm base entity in order to abstract away the on init and on create which include the id auto generation if not provided. The main goal is to reduce complexity in entity definition
2024-05-10 09:27:33 +00:00
Adrien de PerettiandGitHub 8db62827ac chore: remove generated client types (#7259)
* chores: rm generated client types

* chores: rm generated client types

* update lock file

* fix yarn
2024-05-07 15:36:29 +02:00
Adrien de PerettiandGitHub 71f4f46cb9 chore(medusa): cleanup medusa package (#7206) 2024-05-07 12:48:49 +02:00
Adrien de PerettiandGitHub a736e728b8 fix: package.json run test integration in packages (#7249) 2024-05-06 19:25:37 +02:00
adrien2p 36eff7f10a wip 2024-05-06 13:52:30 +02:00
93f6e60c17 chore(): Modules providers reorganization (#7234)
Co-authored-by: Riqwan Thamir <rmthamir@gmail.com>
2024-05-05 10:08:07 +02:00
Adrien de PerettiandGitHub 520867b074 feat(fulfillment, core-flows): Apply correct address and context + cleanup (#7230)
The tests will be added in subsequent requests where the worklows are being worked on
2024-05-03 15:44:22 +00:00
Adrien de PerettiandGitHub 224ebb2154 chore: remove legacy plugins (#7224)
* chore(): remove more legacy plugins

* chore(): remove more legacy plugins

* rm plugins
2024-05-03 14:47:16 +02:00
Adrien de PerettiandGitHub bbccd6481d chore(): start moving some packages to the core directory (#7215) 2024-05-03 13:37:41 +02:00
Adrien de PerettiandGitHub 46ded00c08 chore: Remove legacy files plugins (#7216)
**What**
rm legacy file plugins
2024-05-03 08:01:40 +00:00
Adrien de PerettiandGitHub 0140fd63ab chore(): rm payment plugins (#7217) 2024-05-03 08:42:03 +02:00
Adrien de PerettiandGitHub 4eae25e1ef chore(): Reorganize modules (#7210)
**What**
Move all modules to the modules directory
2024-05-02 15:33:34 +00:00
Adrien de PerettiandGitHub 7a351eef09 feat(workflows-sdk): Execute workflows as step in other workflows (#7183) 2024-05-02 11:29:28 -03:00
Adrien de PerettiandGitHub 25b0ccc60a fix(fulfillment): Update shipping options rules (#7204)
**What**
Fix the update shipping options to apply the rules update properly and remove unused code
2024-05-02 12:30:13 +00:00
Adrien de PerettiandGitHub e26cda4b6a feat(medusa, core-flows, types): Allow to update the rules from a shipping options (#7175)
**What**
Add support for the following operations
- update rules from the update shipping options end point
- update rules from the batch update end point

Also added some improvements, that can be revisited later
- Add a rule value normalizer, jsonb will transform the input value to a [primitive](https://www.postgresql.org/docs/current/datatype-json.html#JSON-TYPE-MAPPING-TABLE) when possible meaning that passing `"true"` will result in storing `true` and not the string. The normalizer takes care of that
2024-04-30 16:45:17 +00:00
Adrien de PerettiandGitHub 08a9297f76 feat(medusa): Remove require id from update shipping options validator (#7166)
* feat(medusa): Remove require id from update shipping options validator

* update type apply

* Create great-stingrays-clap.md
2024-04-29 11:35:40 +02:00
Adrien de PerettiandGitHub c78915c7c5 feat: Add support for shipping options prices update (#7028) 2024-04-11 18:34:55 +02:00
Adrien de PerettiandGitHub eac4d2d87a fix(): workflow sdk step return function type infer (#7047) 2024-04-10 15:49:09 +02:00
Adrien de PerettiandGitHub e1a0960e20 feat: delete shipping options (#6993) 2024-04-09 15:30:22 +02:00
Adrien de PerettiandGitHub f132929c7e feat(*): shipping options update API (#6987)
**What**
- Update the `updateShippingOptions` module service API to follow the newest convention
- Add upsert support for shipping options
- update shipping options workflow
- update shipping options api end point and validation
- update shipping options all integration tests

FIXES CORE-1926
2024-04-07 16:28:59 +00:00
Adrien de PerettiandGitHub 667c8609cc fix(modules-sdk): Fix remote query selection (#6989)
Fix remote query selection for different relations levels as part of a single processed query
2024-04-07 14:07:31 +00:00
Adrien de PerettiandGitHub 528ef4ca90 fix(modules-sdk): Select all should send undefined instead of an empty array (#6982) 2024-04-06 21:37:22 +02:00
Adrien de PerettiandGitHub bc06ad2db4 feat: Clean up shipping options management (#6977)
**What**
- cleanup existing route on some aspects but not all
- add new create shipping options end point and types
- add set of integration tests
- cleanup existing fulfillment routes
- align existing integration tests
- transform old type to zod types and validators
- fix stock location route
2024-04-06 16:52:05 +00:00
Adrien de PerettiandGitHub 65794f4bb5 feat: Create shipping options workflow (#6962)
**What**

- Create main workflow
- Update create pricing rule types step to be idempotent
- update remote joiner to support granular isList confguration on field aliases
- Add full workflow integration tests
2024-04-06 11:51:48 +00:00
Adrien de PerettiandGitHub 232322d035 Chores: Do not disable foreign keys by default (#6973) 2024-04-06 11:20:35 +02:00
Adrien de PerettiandGitHub ee73031d0e feat: Shipping options API (#6957)
**What**
Add support for shipping options management API

PARTIALLY FIXES CORE-1918
2024-04-05 14:23:45 +00:00
Adrien de PerettiandGitHub 21990fcd4b feat(utils): Support free text configuration (#6942)
**What**
- Add support for searchable entity properties to configure default free text search when providing a `q` filter
- `@Searchable` decorator to mark a property or relation to be searchable form the current entity

FIXES CORE-1910
2024-04-05 13:59:40 +00:00
Adrien de PerettiandGitHub 71aeda7347 fix(workflows-sdk): Handle result from a trasnformer after a step fail (#6951)
* fix(workflows-sdk): Handle result from a trasnformer after a step fail

* Create plenty-ravens-lay.md

* fix
2024-04-05 08:59:28 +02:00
Adrien de PerettiandGitHub e944a627f0 feat: region payment providers management workflows/api (#6864) 2024-04-04 20:41:34 +02:00
Adrien de PerettiandGitHub 12fcb655cd chore: Ensure Redis connection is ready with callback (#6924)
* chore(workflow-engine-redis): await for the connection callback

* cleanup

* cleanup

* Create early-rice-marry.md

* cleanup
2024-04-04 20:40:41 +02:00
Adrien de PerettiandGitHub 49f16ab08d fix(medusa): Fix get-query-config backward compatiblity (#6913) 2024-04-03 17:14:29 +02:00
Adrien de PerettiandGitHub b3a3993423 fix(medusa-test-utils): recompute driver options (#6917)
* fix(medusa-test-utils): recompute driver options

* Create seven-bears-reply.md

* Update seven-bears-reply.md
2024-04-03 11:59:29 +02:00
Adrien de PerettiandGitHub 27f4f0d724 fix(fulfillment): Wrong type usage (#6914)
**What**
Fix the types used in the fulfillment module service interface
2024-04-02 16:22:57 +00:00
Adrien de PerettiandGitHub 82a176e30e chore(medusa-test-utils):Handle errors gracefully (#6901)
**What**
- Better error handling and error message
- update deps management and dynamic import/require
- Pass a new flag to the modules loaders for the module loaders to be able to act depending on it. In that case, the module can determine what should be run or not. e.g in the workflow engine redis, when we are only partially loading the module, we do not want to set the Distributed transaction storage
2024-04-02 14:10:17 +00:00
8fd1488938 chore: medusa shutdown (#6865)
* chore: medusa shutdown

* continue

* use shutdown

* on application shutdown

* consume shutdown

* more connection close

* more cleanup

* more cleanup

* update lock

* revert package

* graceful shutdown

* Create yellow-apples-attack.md

* graceful shutdown

* graceful shutdown

---------

Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
Co-authored-by: Riqwan Thamir <rmthamir@gmail.com>
2024-03-29 09:22:29 -03:00
Adrien de PerettiandGitHub 6ee2ee845c fix(): medusa test runner (#6857) 2024-03-28 10:33:40 +01:00
Adrien de PerettiandGitHub cf3c9b13b5 Fix/pricing data manipulation (#6845)
**What**
- Fix returned data order
- improve implentation
- rm unnecessary promises and/or promise all
- replace promise.all for promiseAll
2024-03-27 17:51:17 +00:00
Adrien de PerettiandGitHub d4d1f9b2f2 fix: integration tests modules expectations (#6848)
**What**
- fix tests
- cleanup deprecated jest conf
2024-03-27 15:39:20 +00:00
Adrien de PerettiandGitHub 5d9aea053c fix(utils): Mikro orm prop filtering should check existence (#6842)
**What**
- Should return non decorated but visible properties.
- Should only prevent circular on non scalar fields
2024-03-27 14:31:26 +00:00
Adrien de PerettiandGitHub e0b02a1012 feat(utils): custom serialization that allows for non self ref (#6836)
* feat(utils): custom serialization that allows for non self ref

* Create fast-teachers-greet.md

* cleanup + tests

* cleanup + tests

* fix import

* fix map to pk relations
2024-03-27 12:31:04 +01:00
f7f667cf18 Fix/pricing create price lists (#6818)
* chore: rename price set money amounts to prices

* chore: remove more stuff

* chore: more deletions

* chore: delete more stuff

* chore: fix module tests

* chore: skip product create test

* chore: undo package changes

* chore: remove log

* chore: added changeset

* Fix/pricing create missmatch (#6802)

* fix pricing using index and mixing data

* cleanup

* cleanup

* cleanup

* Ensure data order

* finished

* fix(pricing): createPriceLists_ should not rely on indexes

* feedback

* Create spotty-mirrors-thank.md

---------

Co-authored-by: Riqwan Thamir <rmthamir@gmail.com>
2024-03-26 10:42:14 +01:00
1ef9c78cea chore: Deprecate extra in favor of driver options (#6772)
**What**
Deprecate databse_extra in favor of database_driver_options

Co-authored-by: Sebastian Rindom <7554214+srindom@users.noreply.github.com>
2024-03-21 14:45:11 +00:00
Adrien de PerettiandGitHub c658bd0233 feat(fulfillment): Events management (#6730)
**What**
This pr includes some cleanup and refactoring around the abstract event emitter method for the module service to not rely on a named class property but instead on resolution naming.

Includes fulfillment set events on creation. 

The idea is that if that pr allows us to align and agreed on the approach as well as including the cleanup for other pr to use, If this gets merged I ll continue with another pr to do the rest of the event management


partially fix CORE-1735
2024-03-20 12:44:26 +00:00
Adrien de PerettiandGitHub 06f22bb48a fis(orchestration): Properly handle select all (#6742)
**What**
Fix select `*` without breaking select none `[]`
2024-03-20 12:09:54 +00:00
Adrien de PerettiandGitHub 4b06c17dc0 fix(workflows-sdk): Value resolver should resolve non StepResponse (#6726) 2024-03-18 21:07:04 +01:00
Adrien de PerettiandGitHub e77a02aca5 feat(): Update transformer middleware and API (#6647)
**What**
Update all transform middleware to support the new API
- deprecate `defaultRelations`
- deprecate `allowedRelations`
- Add `defaults` and `allowed` in replacement for `defaultFields` and `allowedFields` respectively
- in the `defaults` it is possible to specify a field such as `*variants` in order to be recognized as a relation only without specifying any property
- add support for `remoteQueryConfig` assigned to req like we have for `listConfig` and `retrieveConfig`
- add support to override `allowed|allowedFields` if a previous middleware have set it up on the req.allowed
- The api now accepts `fields` as the only accepted fields to manage the requested props and relations, the `expand` property have been deprecated. New supported symbols have been added in complement of the fields
  - `+` (e.g `/store/products?fields=+description`) to specify that description should be added as part of the returned data among the other defined fields
  - `-` (e.g `/store/products?fields=-description`) to specify that description should be removed as part of the returned data
  - `*` (e.g `/store/products?fields=*variants`) to specify that the variants relations should be added as part of the returned data among the other defined fields without having to specify which property of the variants should be returned. In the `defaults` config of the transform middleware it is also possible to use this symbol
  - In the case no symbol is provided, it will replace the default fields and mean that only the specified fields must be returned

About the allowed validation, all fields in the `defaults` configuration must be present in the `allowed` configuration. 
In case the `defaults` contains full relation selection (e.g `*product.variants`) it should be present in the `allowed` as `product.variants`. In case in the `defaults` you add `product.variants.id`, it will be allowed if the `allowed` configuration includes either `product.variants.id` as full match or `product.variants` as it means that we allow all properties from `product.variants`

Also, support for `*` selection on the remote query/joiner have been added


**Note**
All v2 end points refactoring can be done separately
2024-03-18 08:37:59 +00:00
Adrien de PerettiandGitHub 3188e703b3 feat(fulfillment): Separate list and context rules validation (#6674)
**What**

- Add method to validate fulfillment option from the provider
- Separate list/list and count from context rules validation and add listShippingOptionsForContext

FIXES CORE-1861
2024-03-15 13:25:51 +00:00
Adrien de PerettiandGitHub 87e63c024e feat(fulfillment): Migration backward compatibility (#6672)
**What**
- Update migration for backward compatibility. This does not take into account data migration and table cleanup (@olivermrbl do we have a general tasks for the modules on that subject)?
- Rename fulfillment provider id to provider id
- add integration tests to ensure the migration backward compatibility
- add new module type for the options to be used in the medusa config for example

FIXES CORE-1724
2024-03-12 13:53:33 +00:00
Adrien de PerettiandGitHub d9d5afc3cf feat(fulfillment): Soft deletes (#6630)
**What**
- Ensure soft delete works properly according to the soft delete configuration and validate all relation of the entire data model
- Add is_enabled to the providers in order to manage new providers to enabled or disabled
- include joiner config update

FIXES CORE-1853
FIXES CORE-1830
FIXES CORE-1719
2024-03-11 15:56:08 +00:00
Adrien de PerettiandGitHub 0c9018eddc fix: integration tests modules 2 (#6599)
Currently, if the v2 flag is not enabled it can lead to issues if the modules are part of the medusa config as they will get loaded anyway leading to issues if the migrations did not ran
2024-03-06 13:26:42 +00:00
Adrien de PerettiandGitHub f0ef0a8784 fix: integration-tests/modules (#6595) 2024-03-06 11:45:34 +00:00
Adrien de PerettiandGitHub 51bb6f1e89 Chore/integration tests modules utils (#6581)
new wrapper for medusa integration tests.
for now it is only applied to the modules directory, but it could be used in the api integration tests or any other integrations that requires a db and a server up and running. 

It is not perfect, but I wanted to have something working and centralised before improving it, also avoiding too many conflicts with other prs
2024-03-06 10:03:07 +00:00
Adrien de PerettiandGitHub 62a7bcc30c Feat(fulfillment): service provider registration + fulfillment management (#6524)
**What**
- Create the fulfillment manual package with a first iteration API 
- Create a new `AbstractFulfillmentProviderService` and `IFulfillmentProvider`
- Modify the module service interface to add new methods to manipulate the fulfillment and the communication with the external provider
  - create (no bulk)
  - cancel (no bulk)
  - update (no bulk)
  - list
  - listAndCount
  - retrieve
- Add new methods to the service provider service to include communication with the third party provider
  - get options
  - create
  - cancel
  - validate data
  - validate option
- Update/create interfaces and DTO's
- fix repository serializer to allow non entity to be passed without throwing
- split module tests into multiple files to simplify navigation
- Add integration tests to validate fulfillments manipulation and external provider loading + communication

FIXES CORE-1729
FIXES CORE-1785
FIXES CORE-1784
FIXES CORE-1766
2024-03-05 11:11:14 +00:00
Adrien de PerettiandGitHub e501e9effa chore: Run packages integration tests concurrently and not in band (#6576) 2024-03-04 14:17:07 +01:00
Adrien de PerettiandGitHub 56d97ebef9 chore(medusa-test-utils): Add logger by default (#6558)
**What**
Add the logger dependency using the console by default if not provided
2024-03-01 13:02:45 +00:00
Adrien de PerettiandGitHub b3d826497b chore(utils): Improve big number decorator (#6525)
**What**
- Re add the ability to use the original column name as part of a select in both select in and joined strategy
- The undefined error message will now display the original column name instead of the underscored one
2024-02-27 15:48:45 +00:00
Adrien de PerettiandGitHub ac829fc67f feat(fulfillment): List shipping options filtered by context anmd rules (#6507)
**What**
Should be able to list the shipping options with or without a context, when a context is provided all the rules of the shipping options must be valid for the shipping options to be returned.

FIXES CORE-1765
2024-02-26 14:59:55 +00:00
Adrien de PerettiandGitHub 56cbf88115 chore(utils): Soft delete should allow self referencing circular deps (#6504)
**What**
Self referencing circular dep should not be an error and should be accepted
2024-02-26 09:37:46 +00:00
Adrien de PerettiandGitHub 168f02f138 chore(util): Detect circular dependencies on soft delete (#6489) 2024-02-24 14:21:43 +01:00
Adrien de PerettiandGitHub 788c4a1e36 feat(fulfillment): Shipping options, rules CRUD + rules based context filtering (#6455)
**What**
- Update shipping options with its rules and type
- create/update rules independently
- context based validation fundation
- 🔴 list shipping options with context rules fitlering will come in a separate pr to keep this one smaller

FIXES CORE-1743
FIXES CORE-1764
2024-02-23 11:14:33 +00:00
Adrien de PerettiandGitHub 36a61658f9 feat(utils): Fix big number decorator and cleanup (#6473)
**What**
- Fix big number decorator and cleanup
2024-02-22 16:58:41 +00:00
f611865553 fix(workflows-sdk): Fix StepFunction typings and custom step name (#6468)
* fix(workflows=sdk): Fix StepFunction typings and custom step name

* Create smart-nails-switch.md

* fixes

* fixes

* fixes

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2024-02-22 11:59:53 +01:00
Adrien de PerettiandGitHub e0750bae40 chore(medusa-test-utils): Add debug option to the module test runner (#6462)
**What**
Add a debug options to the test runner, for now it will only switch the db to log the query but it could evolve to do more debug.
2024-02-21 13:01:03 +00:00
Adrien de PerettiandGitHub c319edb8e0 chore(utils): Add default ordering to the internal service factory list/listAndCount (#6436)
**What**
Default ordering. By default, only the top level entity ordering is applied using the primary keys, the relations are default ordered by the foreign keys.

It include tests fixing for deterministic data ordering
2024-02-20 11:07:39 +00:00
Adrien de PerettiandGitHub 1d91b7429b feat(fulfillment): implementation part 2 (#6408)
**What**

> [!NOTE]  
> I can see this pr becoming huge, so I d like to get this partial one merged 👍 


- Fixes shared connection usage (mikro orm compare the instance to its own package and therefore was resulting in not trully reusing the provided connection leading to exhausting the connection pool as multiple connections was created and end up not being all destroyed properly under the hood, discovered in my integration tests)
- Create shipping options method implementation
- DTO's definition and service interface update
- integration tests 
- Re work of the indexes with new util update
- Test runner utils to remove a big chunk of the boilerplate of the packages integrations

FIXES CORE-1742
2024-02-19 12:33:46 +00:00
Adrien de PerettiandGitHub fafde4f54d feat(fulfillment): Module service implementation first iteration (#6381) 2024-02-14 18:43:42 +01:00
Adrien de PerettiandGitHub 6500f18b9b chore(): Prevent from soft deleting all entities (#6396)
**What**
The internal service abstraction should return idempotently if an empty array is given in order to prevent full soft deletion of the full data
2024-02-14 14:29:10 +00:00
Adrien de PerettiandGitHub e85463b2a7 chore(): Fix database test utils and utils (#6383)
**What**
Fix the test utils database to trully run the migrations, the migration path is deprecated and not used anymore as umzung infer the path under the hood. It also fix the schema so that it is possible to specify different schema if needed.

The index helper can now create named constraints for uniqueness. 

extracted [from](https://github.com/medusajs/medusa/pull/6381)
2024-02-12 18:07:15 +00:00
Adrien de PerettiandGitHub 1fd0457c15 feat(fulfillment): Init dtos work (#6329)
* feat(fulfillment): Init dtos work

* update DTO partially

* WIP

* more interfaces

* continue service definition

* cleanup

* cleanup

* preliminary filters

* cleanup

* cleanup

* Create angry-planets-wave.md
2024-02-12 11:28:31 +01:00
Adrien de PerettiandGitHub b91a1ca5b8 chore: cleanup inspection (#6358) 2024-02-09 14:40:09 +01:00
Adrien de PerettiandGitHub 3fd68d1979 feat(fulfillment): Initialize models work (#6328)
**What**
Initialize work on the fulfillment module entities.

This pr finally also include the indexes as i was working on some utilities i though it would make sense to test them directly.

Also this pr add a new utility to generate proper index for our entity properties. It also include a new monkey patch for the migration generator to handle most of if exists/not exists cases. The monkey patch is a workaround the fact that the transpilation does work well with the ECMA used by mikro orm and therefore we end up with some constructor issue when mikro orm try to instanciate the custom generator class extension.

**Comment**

- The rule part will likely evolved when we reach the point of rule filtering based data, so no need for details review I believe

FIXES CORE-1714
FIXES CORE-1715
FIXES CORE-1718
FIXES CORE-1722
FIXES CORE-1723


Current schema diagram
![fulfillment-models](https://github.com/medusajs/medusa/assets/25098370/0d7900ad-2cdc-4879-9f49-90d1577eb516)
2024-02-08 16:39:05 +00:00
Adrien de PerettiandGitHub 12054f5c01 feat: Fulfillment module basic structure (#6319)
**What**
Scafold the fulfillment module basic structure

**Bonus**
Simplified module scaffolding with new factories and less directories to manage
- mikro orm connection loader factory
- initialize factory

FIXES CORE-1709
FIXES CORE-1710
2024-02-06 13:29:36 +00:00
Adrien de PerettiandGitHub a7be5d7b6d chore: Abstract module service (#6188)
**What**
- Remove services that do not have any custom business and replace them with a simple interfaces
- Abstract module service provide the following base implementation
  - retrieve
  - list
  - listAndCount
  - delete
  - softDelete
  - restore

The above methods are created for the main model and also for each other models for which a config is provided

all method such as list, listAndCount, delete, softDelete and restore are pluralized with the model it refers to

**Migration**
- [x] product
- [x] pricing
- [x] promotion
- [x] cart
- [x] auth
- [x] customer
- [x] payment
- [x] Sales channel
- [x] Workflow-*


**Usage**

**Module**

The module service can now extend the ` ModulesSdkUtils.abstractModuleServiceFactory` which returns a class with the default implementation for each method and each model following the standard naming convention mentioned above.
This factory have 3 template arguments being the container, the main model DTO and an object representing the other model with a config object that contains at list the DTO and optionally a singular and plural property in case it needs to be set manually. It looks like the following:

```ts
export default class PricingModuleService</* ... */>
  extends ModulesSdkUtils.abstractModuleServiceFactory<
    InjectedDependencies,
    PricingTypes.PriceSetDTO,
    {
      Currency: { dto: PricingTypes.CurrencyDTO }
      MoneyAmount: { dto: PricingTypes.MoneyAmountDTO }
      PriceSetMoneyAmount: { dto: PricingTypes.PriceSetMoneyAmountDTO }
      PriceSetMoneyAmountRules: {
        dto: PricingTypes.PriceSetMoneyAmountRulesDTO
      }
      PriceRule: { dto: PricingTypes.PriceRuleDTO }
      RuleType: { dto: PricingTypes.RuleTypeDTO }
      PriceList: { dto: PricingTypes.PriceListDTO }
      PriceListRule: { dto: PricingTypes.PriceListRuleDTO }
    }
  >(PriceSet, generateMethodForModels, entityNameToLinkableKeysMap)
  implements PricingTypes.IPricingModuleService
{
// ...
}
```

In the above, the singular and plural can be inferred as there is no tricky naming. Also, the default implementation does not remove the fact that you need to provides all the overloads etc in your module service interface. The above will provide a default implementation following the interface `AbstractModuleService` which is also auto generated, hence you will have the following methods available:

**for the main model**
- list
- retrieve
- listAndCount 
- delete
- softDelete
- restore


**for the other models**
- list**MyModels**
- retrieve**MyModel**
- listAndCount**MyModels**
- delete**MyModels**
- softDelete**MyModels**
- restore**MyModels**

**Internal module service**

The internal module service can now extend `ModulesSdkUtils.internalModuleServiceFactory` which takes only one template argument which is the container type. 
All internal services provides a default implementation for all retrieve, list, listAndCount, create, update, delete, softDelete, restore methods which follow the following interface `ModulesSdkTypes.InternalModuleService`:

```ts
export interface InternalModuleService<
  TEntity extends {},
  TContainer extends object = object
> {
  get __container__(): TContainer

  retrieve(
    idOrObject: string,
    config?: FindConfig<any>,
    sharedContext?: Context
  ): Promise<TEntity>
  retrieve(
    idOrObject: object,
    config?: FindConfig<any>,
    sharedContext?: Context
  ): Promise<TEntity>

  list(
    filters?: FilterQuery<any> | BaseFilterable<FilterQuery<any>>,
    config?: FindConfig<any>,
    sharedContext?: Context
  ): Promise<TEntity[]>

  listAndCount(
    filters?: FilterQuery<any> | BaseFilterable<FilterQuery<any>>,
    config?: FindConfig<any>,
    sharedContext?: Context
  ): Promise<[TEntity[], number]>

  create(data: any[], sharedContext?: Context): Promise<TEntity[]>
  create(data: any, sharedContext?: Context): Promise<TEntity>

  update(data: any[], sharedContext?: Context): Promise<TEntity[]>
  update(data: any, sharedContext?: Context): Promise<TEntity>
  update(
    selectorAndData: {
      selector: FilterQuery<any> | BaseFilterable<FilterQuery<any>>
      data: any
    },
    sharedContext?: Context
  ): Promise<TEntity[]>
  update(
    selectorAndData: {
      selector: FilterQuery<any> | BaseFilterable<FilterQuery<any>>
      data: any
    }[],
    sharedContext?: Context
  ): Promise<TEntity[]>

  delete(idOrSelector: string, sharedContext?: Context): Promise<void>
  delete(idOrSelector: string[], sharedContext?: Context): Promise<void>
  delete(idOrSelector: object, sharedContext?: Context): Promise<void>
  delete(idOrSelector: object[], sharedContext?: Context): Promise<void>
  delete(
    idOrSelector: {
      selector: FilterQuery<any> | BaseFilterable<FilterQuery<any>>
    },
    sharedContext?: Context
  ): Promise<void>

  softDelete(
    idsOrFilter: string[] | InternalFilterQuery,
    sharedContext?: Context
  ): Promise<[TEntity[], Record<string, unknown[]>]>

  restore(
    idsOrFilter: string[] | InternalFilterQuery,
    sharedContext?: Context
  ): Promise<[TEntity[], Record<string, unknown[]>]>

  upsert(data: any[], sharedContext?: Context): Promise<TEntity[]>
  upsert(data: any, sharedContext?: Context): Promise<TEntity>
}
```

When a service is auto generated you can use that interface to type your class property representing the expected internal service.

**Repositories**

The repositories can now extend `DALUtils.mikroOrmBaseRepositoryFactory` which takes one template argument being the entity or the template entity and provides all the default implementation. If the repository is auto generated you can type it using the `RepositoryService` interface. Here is the new interface typings.

```ts
export interface RepositoryService<T = any> extends BaseRepositoryService<T> {
  find(options?: FindOptions<T>, context?: Context): Promise<T[]>

  findAndCount(
    options?: FindOptions<T>,
    context?: Context
  ): Promise<[T[], number]>

  create(data: any[], context?: Context): Promise<T[]>

  // Becareful here, if you have a custom internal service, the update data should never be the entity otherwise
 // both entity and update will point to the same ref and create issues with mikro orm
  update(data: { entity; update }[], context?: Context): Promise<T[]>

  delete(
    idsOrPKs: FilterQuery<T> & BaseFilterable<FilterQuery<T>>,
    context?: Context
  ): Promise<void>

  /**
   * Soft delete entities and cascade to related entities if configured.
   *
   * @param idsOrFilter
   * @param context
   *
   * @returns [T[], Record<string, string[]>] the second value being the map of the entity names and ids that were soft deleted
   */
  softDelete(
    idsOrFilter: string[] | InternalFilterQuery,
    context?: Context
  ): Promise<[T[], Record<string, unknown[]>]>

  restore(
    idsOrFilter: string[] | InternalFilterQuery,
    context?: Context
  ): Promise<[T[], Record<string, unknown[]>]>

  upsert(data: any[], context?: Context): Promise<T[]>
}
```
2024-02-02 14:20:32 +00:00
Adrien de PerettiandGitHub 738e9115ec feat(workflows-sdk): run, registerStepSuccess and registerStepFailure shortcut (#6164)
**What**

Currently, when exporting a workflow using the workflowExport util, it is mandatory to first call the resulted function passing the container before being able to call run, registerStepSuccess or failure on it. Now, it is possible to either continue that way, or to directly call the run, registerStepSuccess or failure on the exported workflow and at that moment it is possible to pass a container if needed

e.g
```ts
const workflow = exportWorkflow("id" as any, "result_step", prepare)
const wfRunner = workflow(container)
wfRunner.run(...) // Here the container is not expected
```
or
```ts
const workflow = exportWorkflow("id" as any, "result_step", prepare)
workflow.run(...) // Here we can now pass an optional container 
```
2024-01-22 19:14:18 +00:00
Adrien de PerettiandGitHub 5e655dd59b chore: Hide repository creation if they are not custom + add upsert support by default (#6127) 2024-01-19 15:09:38 +01:00
130c641e5c chore: Abstract module services (#6087)
**What**
Create a service abstraction for the modules internal service layer. The objective is to reduce the effort of building new modules when the logic is the same or otherwise allow to override the default behavior.

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
2024-01-18 09:20:08 +00:00
Adrien de PerettiandGitHub 72bc52231c chore(utils): Update base repository to infer primary keys and support composite (#6062) 2024-01-14 17:13:25 +01:00
b6ac768698 chore: abstract the modules repository (#6035)
**What**
Reduce the work effort to create repositories when building new modules by abstracting the most common cases into the base class default implementation returned by a factory

- [x] Migrate all modules

Co-authored-by: Riqwan Thamir <5105988+riqwan@users.noreply.github.com>
2024-01-10 13:12:02 +00:00
Adrien de PerettiandGitHub a9b4214503 chore(utils, product): Attempt to simplify module scripts export (#6021) 2024-01-09 20:20:05 +01:00
Adrien de PerettiandGitHub fbee006e51 chore(medusa, orchestration, utils, workflows-sdk): add transaction options support and cleanup (#6020)
* chore(medusa, orchestration, utils, workflows-sdk): add transaction options support and cleanup
2024-01-08 10:07:12 -03:00
Adrien de PerettiandGitHub 47be2ad723 fix(medusa): Order by using joins and pagination (#5990) 2024-01-07 13:58:30 +01:00
bf63c4e6a3 feat(orchestration, workflows-sdk): Add events management and implementation to manage async workflows (#5951)
* feat(orchestration, workflows-sdk): Add events management and implementation to manage async workflows

* Create fresh-boxes-scream.md

* cleanup

* fix: resolveValue input ref

* resolve value recursive

* chore: resolve result value only for new api

* chore: save checkpoint before scheduling

* features

* fix: beginTransaction checking existing transaction

---------

Co-authored-by: Carlos R. L. Rodrigues <rodrigolr@gmail.com>
Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
2024-01-05 14:40:58 +01:00
Adrien de PerettiandGitHub 37fba9a168 fix(medusa): cart completion payment sessions (#5995)
* fix(medusa): cart completion payment sessions

* Create seven-moose-scream.md

* fix unit tests
2024-01-04 20:40:08 +01:00
Adrien de PerettiandGitHub 7f62ab1b58 fix(medusa-payment-stripe): Fix error handling (#5991) 2024-01-04 09:04:43 +01:00
Adrien de PerettiandGitHub 278b7fb203 fix(medusa): Update cart sales channel should not remove all line items (#5980) 2024-01-03 14:06:07 +01:00
Adrien de PerettiandGitHub a0dd18c12a feat(workflows-sdk): Allow primitive values to be passed as well as WorkflowDataProperties (#5953)
* feat(workflows-sdk): Allow primitive values to be passed as well as WorkflowDataProperties

* feat(workflows-sdk): improve playground tests

* Create nine-shrimps-reply.md
2023-12-22 07:39:28 +01:00
Adrien de PerettiandGitHub 8402f46970 feat(workflows-sdk): Allow a step to not define an expected input (#5775)
**What**
Allow a step to not define an expected input, previously even if no input was expected, an object was always expected to be passed to the stepFunction inside the workflow composition. Now
```ts
const stepWithoutArgs = createStep("step1", () => {
  return new StepResponse("string")
})

const stepWithoutExepectedInput = createStep("step2", (_: {}, context) => {
  console.log("input", _) // {}
  return new StepResponse("string")
})

const workflow = createWorkflow("workflow1", () => {
  stepWithoutArgs()
  return stepWithoutExepectedInput()
})

workflow()
  .run()
  .then((res) => {
    console.log(res.result) // string
  })
```
2023-12-21 13:41:58 +00:00
Adrien de PerettiandGitHub c41f3002f3 fix(utils): More resilient object from string path (#5929)
**What**
More resilient util in case an undefined, nu,, '' value is passed as part of the relations
2023-12-21 09:28:13 +00:00
Adrien de PerettiandGitHub 45996d58a2 chore(medusa, interfaces): Uniformise class checks (#5869)
**What**
One problem with local development can be the dependencies management. To mitigate that, transform checks from an instance of to value check as well as harmonize utils function to be part of the class as a static method instead of separate utilities. By using this approach we are not dependent of the origin of the class and therefore it should ease the user experience.

**NOTE**
As a next step to discuss, we should probably move the interfaces from the interfaces/medusa package to the utils package. Then we can deprecate the interfaces package and remove it at a later time
2023-12-19 13:26:57 +00:00
Adrien de PerettiandGitHub 496dcf10c4 feat(medusa): Prevent cart completion conflict (#5814) 2023-12-19 10:47:41 +01:00
Adrien de PerettiandGitHub 9cc787cac4 feat(workflows-sdk): Configurable retries upon step creation (#5728)
**What**
- Allow to create step that can be configured to have a max retry
- Step end retry mechanism on permanent failure

Also added an API to override a step configuration from within the createWorkflow
```ts
const step = createStep({ name: "step", maxRetries: 3 }, async (_, context) => {
  return new StepResponse({ output: "output" })
})

const workflow = createWorkflow("workflow", function () {
  const res = step().config({ maxRetries: 5 }) // This will override the original maxRetries of 3
})
```

**NOTE**
We can maybe find another name than config on the step workflow data to override the step config.
2023-12-19 09:38:27 +00:00
Adrien de PerettiandGitHub 1a2f513d53 fix(medusa): Passport loader resolving to early (#5901)
* fix(medusa): Passport loader resolving to early

* fix(medusa): Passport loader resolving to early

* Create hungry-bikes-give.md
2023-12-18 17:02:51 +01:00
Adrien de PerettiandGitHub 2826605b01 fix(medusa): Order edit confirmation conflict line items update (#5867)
* fix(medusa): Order edit confirmation conflict line items update

* naming

* Create serious-flowers-provide.md

* another proposal

* fixes
2023-12-14 14:52:27 +01:00
Adrien de PerettiandGitHub b5748ab59e chore(medusa): Prefer logger instead of console.log (#5846)
* chore(medusa): Prefer logger instead of console.log

* Create nasty-comics-leave.md

* fix imports
2023-12-13 16:09:48 +01:00
Adrien de PerettiandGitHub 85cda7ce37 feat(medusa, core-workflows, product): slightly improve create cart workflow (#5725) 2023-12-07 17:05:23 +01:00
Adrien de PerettiandGitHub 946db51a9b chore(): Add engines to all package.json if needed (#5812) 2023-12-07 17:03:50 +01:00