mirror of
https://github.com/ash-project/ash_archival.git
synced 2024-09-20 21:42:55 +12:00
59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
# Get Started with AshArchival
|
|
|
|
## Installation
|
|
|
|
First, add the dependency to your `mix.exs` file
|
|
|
|
```elixir
|
|
{:ash_archival, "~> 1.0.1"}
|
|
```
|
|
|
|
and add `:ash_archival` to your `.formatter.exs`
|
|
|
|
```elixir
|
|
import_deps: [..., :ash_archival]
|
|
```
|
|
|
|
## Adding to a resource
|
|
|
|
To add archival to a resource, add the extension to the resource:
|
|
|
|
```elixir
|
|
use Ash.Resource,
|
|
extensions: [..., AshArchival.Resource]
|
|
```
|
|
|
|
And thats it! Now, when you destroy a record, it will be archived instead, using an `archived_at` attribute.
|
|
|
|
See [How Does Ash Archival Work?](/documentation/tutorials/get-started-with-ash-archival.md) for what modifications are made to a resource, and read on for info on the tradeoffs of leveraging `d:Ash.Resource.Dsl.resource.base_filter`.
|
|
|
|
## Base Filter
|
|
|
|
Using a `d:Ash.Resource.Dsl.resource.base_filter` for your `archived_at` field has a lot of benefits if you are using `ash_postgres`, but comes with one major drawback, which is that it is not possible to exclude certain read actions from archival. If you wish to use a base filter, you will need to create a separate resource to read from the archived items. We may introduce a way to bypass the base filter at some point in the future.
|
|
|
|
To add a `base_filter` and `base_filter_sql` to your resource:
|
|
|
|
```elixir
|
|
resource do
|
|
base_filter expr(is_nil(archived_at))
|
|
end
|
|
|
|
postgres do
|
|
...
|
|
base_filter_sql "(archived_at IS NULL)"
|
|
end
|
|
```
|
|
|
|
Add `base_filter? true` to the `archive` configuration of your resource to tell it that it doesn't need to add the filter itself.
|
|
|
|
### Benefits of base_filter
|
|
|
|
1. unique indexes will exclude archived items
|
|
2. custom indexes will exclude archived items
|
|
3. check constraints will not be applied to archived items
|
|
|
|
If you want these benefits, add the appropriate `base_filter`.
|
|
|
|
## More
|
|
|
|
See the [Unarchiving guide](/documentation/topics/unarchiving.md) For more.
|