Files
medusa-store/docs/content/advanced/backend/upgrade-guides/1-7-1.md
Shahed Nasser 8ba27a2e28 docs: changed details related to new payment method signatures (#2876)
* docs: changed details related to new method signatures

* updated the information regarding update_requests

* small changes to the text

* lint fixes

* fixed constructor

* fixes based on review
2023-01-05 11:55:27 +02:00

129 lines
4.0 KiB
Markdown

---
description: 'Actions Required for v.1.7.1'
---
# v1.7.1
Version `1.7.1` of Medusa introduces the `JobSchedulerService` which changes how scheduled/cron jobs are created.
## Overview
Version `1.7.1` of Medusa introduces a new service `JobSchedulerService` that handles all logic and functionality related to created scheduled (previously named cron jobs).
With this introduction, the previous use of `EventBus` to create a cron job has been deprecated of using the `JobSchedulerService`.
In addition, this version features some fixes to gift cards that requires running migrations, and changes to how payment providers are implemented.
---
## Actions Required
### Run Migrations
In the directory of your Medusa server, run the following command after updating the server:
```bash
medusa migrations run
```
### Run Migration Script
Following the fix gift cards calculation, you also need to run a migration script after updating the server.
Start by adding the following environment variables in `.env`:
```bash
TYPEORM_CONNECTION=postgres
TYPEORM_URL=<DATABASE_URL>
TYPEORM_USERNAME=<DATABASE_USERNAME>
TYPEORM_PASSWORD=<DATABASE_PASSWORD>
TYPEORM_DATABASE=<DATABASE_DATABASE>
TYPEORM_ENTITIES=./node_modules/@medusajs/medusa/dist/models/*.js
TYPEORM_MIGRATIONS=./node_modules/@medusajs/medusa/dist/migrations/*.js
```
Make sure to replace `<DATABASE_URL>`, `<DATABASE_USERNAME>`, `<DATABASE_PASSWORD>`, and `<DATABASE_DATABASE>` with your database connection details.
Then, run the following command in the root directory of your Medusa server:
```bash
node ./node_modules/@medusajs/medusa/dist/scripts/gift-card-tax-rate-migration.js
```
### Change to JobSchedulerService
In your loader file that creates a cron job, replace the use of `eventBus` to `jobSchedulerService`:
```ts
const myJob = async (container, options) => {
const jobSchedulerService = container.resolve("jobSchedulerService")
jobSchedulerService.create("my-job", {}, "0 0 * * *", async () => {
// ...
})
}
export default myJob
```
You can learn more in the [How to Create a Scheduled Job](../scheduled-jobs/create.md) documentation.
### Change to Payment Provider
This version of Medusa introduces a change in how payment providers are implemented. Mainly, the signature of the `createPayment` and `updatePayment` methods have changed, and the old signature is now deprecated.
Although this change is currently backwards compatible, it is recommended to change the signature of these methods to the following:
<!-- eslint-disable max-len -->
```ts
import { Cart, PaymentSessionData, PaymentContext, PaymentSessionResponse } from "@medusajs/medusa"
// ...
class MyPaymentService extends AbstractPaymentService<TransactionBaseService> {
// ...
async createPayment(
context: Cart & PaymentContext
): Promise<PaymentSessionResponse> {
// ...
}
async updatePayment(
paymentSessionData: PaymentSessionData,
context: Cart & PaymentContext
): Promise<PaymentSessionResponse> {
// ...
}
}
```
Where `context` in both `createPayment` and `updatePayment` is made up of the following properties:
```ts
type PaymentContext = {
cart: {
context: Record<string, unknown>
id: string
email: string
shipping_address: Address | null
shipping_methods: ShippingMethod[]
}
currency_code: string
amount: number
resource_id?: string
customer?: Customer
}
```
So, you can pass the previous `cart` parameter inside the new `context` paramter.
Furthermore, these methods are now expected to return `PaymentSessionResponse`. It is made up of the following properties:
```ts
type PaymentSessionResponse = {
update_requests: { customer_metadata: Record<string, unknown> }
session_data: Record<string, unknown>
}
```
Where `session_data` would include the previously returned data from these methods. The property `update_requests` allows you to pass data from the payment provider plugin to the core to update internal resources. Currently, it can only be used to update the `metadata` field of the customer entity.