docs: updates to use DML and other changes (#7834)

- Change existing data model guides and add new ones for DML
- Change module's docs around service factory + remove guides that are now necessary
- Hide/remove all mentions of module relationships, or label them as coming soon.
- Change all data model creation snippets to use DML
- use `property` instead of `field` when referring to a data model's properties.
- Fix all snippets in commerce module guides to use new method suffix (no more main model methods)
- Rework recipes, removing/hiding a lot of sections as a lot of recipes are incomplete with the current state of DML.


### Other changes

- Highlight fixes in some guides
- Remove feature flags guide
- Fix code block styles when there are no line numbers.

### Upcoming changes in other PRs

- Re-generate commerce module references (for the updates in the method names)
- Ensure that the data model references are generated correctly for models using DML.
- (probably at a very later point) revisit recipes
This commit is contained in:
Shahed Nasser authored and GitHub committed 2024-06-26 07:55:59 +00:00
1 parent 62dacdda75
commit 0462cc5acf
126 files changed
+1808 -14242

No files matched your search

@@ -10,7 +10,7 @@ In this document, you’ll learn about promotion actions and how they’re compu
The Promotion Module's main service has a [computeActions method](/references/promotion/computeActions) that returns an array of actions to perform on a cart when one or more promotions are applied.
Actions inform you what adjustment must be made to a cart item or shipping method. Each action is an object having the `action` field indicating the type of action.
Actions inform you what adjustment must be made to a cart item or shipping method. Each action is an object having the `action` property indicating the type of action.
---
@@ -17,7 +17,7 @@ The [ApplicationMethod data model](/references/promotion/models/ApplicationMetho
<Table.Row>
<Table.HeaderCell>
Field
Property
</Table.HeaderCell>
<Table.HeaderCell>
@@ -71,7 +71,7 @@ The [ApplicationMethod data model](/references/promotion/models/ApplicationMetho
When the promotion is applied to a cart item or a shipping method, you can restrict which items/shipping methods the promotion is applied to.
The `ApplicationMethod` data model has a collection of `PromotionRule` records to restrict which items or shipping methods the promotion applies to. The `target_rules` field represents this relation.
The `ApplicationMethod` data model has a collection of `PromotionRule` records to restrict which items or shipping methods the promotion applies to. The `target_rules` property represents this relation.
![A diagram showcasing the target_rules relation between the ApplicationMethod and PromotionRule data models](https://res.cloudinary.com/dza7lstvk/image/upload/v1709898273/Medusa%20Resources/application-method-target-rules_hqaymz.jpg)
@@ -83,7 +83,7 @@ In this example, the promotion is only applied on products in the cart having th
When the promotion’s type is `buyget`, you must specify the “buy X” condition. For example, a cart must have two shirts before the promotion can be applied.
The application method has a collection of `PromotionRule` items to define the “buy X” rule. The `buy_rules` field represents this relation.
The application method has a collection of `PromotionRule` items to define the “buy X” rule. The `buy_rules` property represents this relation.
![A diagram showcasing the buy_rules relation between the ApplicationMethod and PromotionRule data models](https://res.cloudinary.com/dza7lstvk/image/upload/v1709898453/Medusa%20Resources/application-method-buy-rules_djjuhw.jpg)
@@ -78,19 +78,19 @@ A promotion can be restricted by a set of rules, each rule is represented by the
![A diagram showcasing the relation between Promotion and PromotionRule](https://res.cloudinary.com/dza7lstvk/image/upload/v1709833196/Medusa%20Resources/promotion-promotion-rule_msbx0w.jpg)
A `PromotionRule`'s `attribute` field indicates the field's name to which this rule is applied. For example, `customer_group_id`. Its value is stored in the `PromotionRuleValue` data model. So, a rule can have multiple values.
A `PromotionRule`'s `attribute` property indicates the property's name to which this rule is applied. For example, `customer_group_id`. Its value is stored in the `PromotionRuleValue` data model. So, a rule can have multiple values.
When testing whether a promotion can be applied to a cart, the rule's `attribute` field and its values are tested on the cart itself. For example, the cart's customer must be part of the customer group(s) indicated in the promotion rule's value.
When testing whether a promotion can be applied to a cart, the rule's `attribute` property and its values are tested on the cart itself. For example, the cart's customer must be part of the customer group(s) indicated in the promotion rule's value.
---
## Flexible Rules
The `PromotionRule`'s `operator` field adds more flexibility to the rule’s condition rather than simple equality (`eq`).
The `PromotionRule`'s `operator` property adds more flexibility to the rule’s condition rather than simple equality (`eq`).
For example, to restrict the promotion to only `VIP` and `B2B` customer groups:
- Add a `PromotionRule` with its `attribute` field set to `customer_group_id` and `operator` field to `in`.
- Add a `PromotionRule` with its `attribute` property set to `customer_group_id` and `operator` property to `in`.
- Add two `PromotionRuleValue` associated with the rule: one with the value `VIP` and the other `B2B`.
![A diagram showcasing the relation between PromotionRule and PromotionRuleValue when a rule has multiple values](https://res.cloudinary.com/dza7lstvk/image/upload/v1709897383/Medusa%20Resources/promotion-promotion-rule-multiple_hctpmt.jpg)
@@ -25,7 +25,7 @@ In this document, you’ll find common examples of how you can use the Promotion
const promotionModuleService: IPromotionModuleService =
request.scope.resolve(ModuleRegistrationName.PROMOTION)
const promotion = await promotionModuleService.create({
const promotion = await promotionModuleService.createPromotions({
code: "10%OFF",
type: "standard",
application_method: {
@@ -55,7 +55,7 @@ In this document, you’ll find common examples of how you can use the Promotion
await initializePromotionModule()
const body = await request.json()
const promotion = await promotionModuleService.create({
const promotion = await promotionModuleService.createPromotions({
code: "10%OFF",
type: "standard",
application_method: {
@@ -155,7 +155,7 @@ In this document, you’ll find common examples of how you can use the Promotion
const promotionModuleService: IPromotionModuleService =
request.scope.resolve(ModuleRegistrationName.PROMOTION)
const promotion = await promotionModuleService.create({
const promotion = await promotionModuleService.createPromotions({
code: "10%OFF",
type: "standard",
application_method: {
@@ -191,7 +191,7 @@ In this document, you’ll find common examples of how you can use the Promotion
const promotionModuleService =
await initializePromotionModule()
const promotion = await promotionModuleService.create({
const promotion = await promotionModuleService.createPromotions({
code: "10%OFF",
type: "standard",
application_method: {
@@ -236,7 +236,7 @@ In this document, you’ll find common examples of how you can use the Promotion
request.scope.resolve(ModuleRegistrationName.PROMOTION)
res.json({
promotions: await promotionModuleService.list(),
promotions: await promotionModuleService.listPromotions(),
})
}
```
@@ -256,7 +256,7 @@ In this document, you’ll find common examples of how you can use the Promotion
await initializePromotionModule()
return NextResponse.json({
promotions: await promotionModuleService.list(),
promotions: await promotionModuleService.listPromotions(),
})
}
```
@@ -17,7 +17,7 @@ A promotion discounts an amount or percentage of a cart's items, shipping method
The Promotion Module allows you to store and manage promotions.
```ts
const promotion = await promotionModuleService.create({
const promotion = await promotionModuleService.createPromotions({
code: "10%OFF",
type: "standard",
application_method: {
@@ -34,7 +34,7 @@ const promotion = await promotionModuleService.create({
A promotion has rules that restricts when it's applied. For example, you can create a promotion that's only applied to VIP customers.
```ts
const promotion = await promotionModuleService.create({
const promotion = await promotionModuleService.createPromotions({
code: "10%OFF",
type: "standard",
application_method: {
@@ -94,7 +94,7 @@ For example:
request.scope.resolve(ModuleRegistrationName.PROMOTION)
res.json({
promotions: await promotionModuleService.list(),
promotions: await promotionModuleService.listPromotions(),
})
}
```
@@ -113,7 +113,7 @@ For example:
const promotionModuleService: IPromotionModuleService =
container.resolve(ModuleRegistrationName.PROMOTION)
const promotions = await promotionModuleService.list()
const promotions = await promotionModuleService.listPromotions()
}
```
@@ -131,7 +131,7 @@ For example:
const promotionModuleService: IPromotionModuleService =
container.resolve(ModuleRegistrationName.PROMOTION)
const promotions = await promotionModuleService.list()
const promotions = await promotionModuleService.listPromotions()
})
```