---
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 backend, run the following command after updating the backend:

```bash
npx medusa migrations run
```

### Run Migration Script

Following the fix gift cards calculation, you also need to run a migration script after updating the backend.

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 backend:

```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](../../development/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` parameter.

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.
