docs: added gift card documentation guides (#2939)

This commit is contained in:
Shahed Nasser
2023-01-04 18:16:51 +02:00
committed by GitHub
parent c62e309629
commit af7e67e827
10 changed files with 1149 additions and 32 deletions

View File

@@ -28,7 +28,7 @@ Redis is required for batch jobs to work. Make sure you [install Redis](../../t
### Notification Provider
To send an email or another type of notification method, you must have a notification provider installed or configured.
To send an email or another type of notification method, you must have a notification provider installed or configured. You can either install an existing plugin or [create your own](../backend/notification/how-to-create-notification-provider.md).
This document has an example using the [SendGrid](../../add-plugins/sendgrid.mdx) plugin.
@@ -47,26 +47,24 @@ You can learn more about subscribers in the [Subscribers](../backend/subscribers
Create the file `src/subscribers/claim-order.ts` with the following content:
```ts title=src/subscribers/claim-order.ts
import { EventBusService } from "@medusajs/medusa"
type InjectedDependencies = {
eventBusService: EventBusService,
// TODO add necessary dependencies
}
class ClaimOrderSubscriber {
constructor({ eventBusService }: InjectedDependencies) {
constructor(container: InjectedDependencies) {
// TODO subscribe to event
}
}
export default ClaimOrderSubscriber
```
If you want to add any other dependencies, you can add them to the `InjectedDependencies` type.
Youll be adding in the next step the necessary dependencies to the subscriber.
:::tip
:::info
You can learn more about dependency injection in [this documentation](../backend/dependency-container/index.md).
You can learn more about [dependency injection](../backend/dependency-container/index.md) in this documentation.
:::
@@ -74,29 +72,59 @@ You can learn more about dependency injection in [this documentation](../backend
## Step 2: Subscribe to the Event
In the subscriber you created, add the following in the `constructor`:
In this step, youll subscribe to the `order-update-token.created` event to send the customer a notification about their order edit.
There are two ways to do this:
### Method 1: Using the NotificationService
If the notification provider youre using already implements the logic to handle this event, you can subscribe to the event using the `NotificationService`:
```ts title=src/subscribers/claim-order.ts
import { NotificationService } from "@medusajs/medusa"
type InjectedDependencies = {
notificationService: NotificationService
}
class ClaimOrderSubscriber {
constructor({ notificationService }: InjectedDependencies) {
notificationService.subscribe(
"order-update-token.created",
"<NOTIFICATION_PROVIDER_IDENTIFIER>"
)
}
}
export default ClaimOrderSubscriber
```
Where `<NOTIFICATION_PROVIDER_IDENTIFIER>` is the identifier for your notification provider.
:::info
You can learn more about handling events with the Notification Service using [this documentation](../backend/notification/how-to-create-notification-provider.md).
:::
### Method 2: Using the EventBusService
If the notification provider youre using isnt configured to handle this event, or you want to implement some other custom logic, you can subscribe to the event using the `EventBusService`:
```ts title=src/subscribers/claim-order.ts
import { EventBusService } from "@medusajs/medusa"
type InjectedDependencies = {
eventBusService: EventBusService
}
class ClaimOrderSubscriber {
constructor({ eventBusService }: InjectedDependencies) {
eventBusService.subscribe(
"order-update-token.created",
"order-update-token.created",
this.handleRequestClaimOrder
)
}
// ...
}
```
You use the `eventBusService` to subscribe to the `order-update-token.created` event. You pass the method `handleRequestClaimOrder` as a handler to that event. Youll create this method in the next step.
## Step 3: Create Event Handler
In the subscriber, add a new method `handleRequestClaimOrder`:
```ts title=src/subscribers/claim-order.ts
class ClaimOrderSubscriber {
// ...
handleRequestClaimOrder = async (data) => {
// TODO: handle event
@@ -106,6 +134,8 @@ class ClaimOrderSubscriber {
export default ClaimOrderSubscriber
```
When using this method, youll have to handle the logic of sending the confirmation email to the customer inside the handler function, which in this case is `handleRequestClaimOrder`.
The `handleRequestClaimOrder` event receives a `data` object as a parameter. This object holds the following properties:
1. `old_email`: The email associated with the orders.

View File

@@ -0,0 +1,149 @@
# Send Gift Card Code to Customer
In this document, youll learn how to send a customer the gift card code they purchased.
## Overview
Once the customer purchases a gift card, they should receive the code of the gift card so that they can use it in future purchases.
Typically, the code would be sent by email, however, youre free to choose how you deliver the gift card code to the customer.
This document shows you how to track when a gift card has been purchased so that you can send its code to the customer.
:::tip
You can alternatively use the [SendGrid](../../add-plugins/sendgrid.mdx) plugin, which handles sending the email automatically.
:::
---
## Prerequisites
### Medusa Components
It's assumed that you already have a Medusa server installed and set up. If not, you can follow the [quickstart guide](../../quickstart/quick-start.mdx) to get started.
### Redis
Redis is required for batch jobs to work. Make sure you [install Redis](../../tutorial/0-set-up-your-development-environment.mdx#redis) and [configure it with your Medusa server](../../usage/configurations.md#redis).
### Notification Provider
To send an email or another type of notification method, you must have a notification provider installed or configured. You can either install an existing plugin or [create your own](../backend/notification/how-to-create-notification-provider.md).
---
## Step 1: Create a Subscriber
To subscribe to and handle an event, you must create a subscriber.
:::info
You can learn more about subscribers in the [Subscribers](../backend/subscribers/overview.md) documentation.
:::
Create the file `src/subscribers/gift-card.ts` with the following content:
```ts title=src/subscribers/gift-card.ts
type InjectedDependencies = {
// TODO add necessary dependencies
}
class GiftCardSubscriber {
constructor(container: InjectedDependencies) {
// TODO subscribe to event
}
}
export default GiftCardSubscriber
```
Youll be adding in the next step the necessary dependencies to the subscriber.
:::info
You can learn more about [dependency injection](../backend/dependency-container/index.md) in this documentation.
:::
---
## Step 2: Subscribe to the Event
In this step, youll subscribe to the event `gift_card.created` to send the customer a notification about their gift card.
There are two ways to do this:
### Method 1: Using the NotificationService
If the notification provider youre using already implements the logic to handle this event, you can subscribe to the event using the `NotificationService`:
```ts title=src/subscribers/gift-card.ts
import { NotificationService } from "@medusajs/medusa"
type InjectedDependencies = {
notificationService: NotificationService
}
class GiftCardSubscriber {
constructor({ notificationService }: InjectedDependencies) {
notificationService.subscribe(
"gift_card.created",
"<NOTIFICATION_PROVIDER_IDENTIFIER>"
)
}
}
export default GiftCardSubscriber
```
Where `<NOTIFICATION_PROVIDER_IDENTIFIER>` is the identifier for your notification provider. For example, if youre using SendGrid, the identifier is `sendgrid`.
:::info
You can learn more about handling events with the Notification Service using [this documentation](../backend/notification/how-to-create-notification-provider.md).
:::
### Method 2: Using the EventBusService
If the notification provider youre using isnt configured to handle this event, or you want to implement some other custom logic, you can subscribe to the event using the `EventBusService`:
```ts title=src/subscribers/gift-card.ts
import { EventBusService, GiftCardService } from "@medusajs/medusa"
type InjectedDependencies = {
eventBusService: EventBusService
giftCardService: GiftCardService
}
class GiftCardSubscriber {
giftCardService: GiftCardService
constructor({ eventBusService, giftCardService }: InjectedDependencies) {
this.giftCardService = giftCardService
eventBusService.subscribe("gift_card.created", this.handleGiftCard)
}
handleGiftCard = async (data) => {
const giftCard = await this.giftCardService.retrieve(data.id)
// TODO send customer the gift card code
}
}
export default GiftCardSubscriber
```
When using this method, youll have to handle the logic of sending the code to the customer inside the handler function, which in this case is `handleGiftCard`.
The `handleGiftCard` event receives a `data` object as a parameter. This object holds the `id` property which is the ID of the gift card. You can retrieve the full gift card object using the [GiftCardService](../../references/services/classes/GiftCardService.md)
---
## See Also
- [Subscribers overview](../backend/subscribers/overview.md)
- [Notification architecture overview](../backend/notification/overview.md)
- [Gift cards overview](../backend/gift-cards/index.md)