* docs: changes based on DX changes * remove fields no longer needed * remove unnecessary parameters * fixes to authenticate middleware usage * add highlight to migrations config * change configuration to http * added missing remote link docs * fix name in sidebar * added notification module docs + updated file module docs * add vale exceptions * fix vale errors * added docs on custom cli scripts
100 lines
2.5 KiB
Plaintext
100 lines
2.5 KiB
Plaintext
export const metadata = {
|
|
title: `${pageNumber} Soft-Deletable Models`,
|
|
}
|
|
|
|
# {metadata.title}
|
|
|
|
In this document, you'll learn how to create soft-deletable data models.
|
|
|
|
## What is a Soft-Deletable Model?
|
|
|
|
A soft-deletable data model is a model whose records aren't actually removed from the database when they're deleted.
|
|
|
|
Instead, their `deleted_at` field is set to the date the record was deleted.
|
|
|
|
When retrieving or listing records of that data model, records having their `deleted_at` field set aren't retrieved unless the `withDeleted` filter is provided.
|
|
|
|
---
|
|
|
|
## How to Create a Soft-Deletable Model?
|
|
|
|
To create a soft-deletable model, first, add the following filter decorator to the data model class:
|
|
|
|
```ts title="src/module/hello/models/my-soft-deletable.ts" highlights={[["7"]]}
|
|
// other imports...
|
|
import { Entity, Filter } from "@mikro-orm/core"
|
|
import { DALUtils } from "@medusajs/utils"
|
|
import { BaseEntity } from "@medusajs/utils"
|
|
|
|
@Entity()
|
|
@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions)
|
|
class MySoftDeletable extends BaseEntity {
|
|
// ...
|
|
}
|
|
|
|
export default MySoftDeletable
|
|
```
|
|
|
|
Then, add a `deleted_at` field to the data model:
|
|
|
|
```ts highlights={[["7"], ["8"]]}
|
|
// other imports...
|
|
import { Property } from "@mikro-orm/core"
|
|
|
|
class MySoftDeletable extends BaseEntity {
|
|
// ...
|
|
|
|
@Property({ columnType: "timestamptz", nullable: true })
|
|
deleted_at: Date | null = null
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Manage Soft-Deletable Models
|
|
|
|
Services extending the service factory have methods to soft delete and restore records for all models specified during its creation.
|
|
|
|
### Soft Delete a Record
|
|
|
|
For example, to soft delete a `MySoftDeletable` record:
|
|
|
|
```ts
|
|
await helloModuleService.softDelete([
|
|
"id_123", "id_321",
|
|
])
|
|
```
|
|
|
|
The method receives an array of IDs of records to delete.
|
|
|
|
### Retrieve Soft-Deleted Records
|
|
|
|
The `retrieve`, `list`, and `listAndCount` methods accept as a second parameter a configuration object.
|
|
|
|
To retrieve soft-deleted records, set `withDeleted` to `true` in the configuration object passed as a second parameter.
|
|
|
|
For example:
|
|
|
|
```ts
|
|
const deletedRecords = await helloModuleService
|
|
.listMySoftDeletables({
|
|
// ...
|
|
}, {
|
|
withDeleted: true,
|
|
})
|
|
```
|
|
|
|
### Restore a Soft-Deleted Record
|
|
|
|
To restore a `MySoftDeletable` record:
|
|
|
|
```ts
|
|
await helloModuleService.restore([
|
|
"id_123", "id_321",
|
|
])
|
|
```
|
|
|
|
The method also receives an array of IDs of records to restore.
|
|
|
|
If the data model isn't the main data model, its method names are `softDelete` and `restore` suffixed with the plural name of the model. For example, `softDeleteMySoftDeletable`.
|