Skip to content

Ecto extensions to support auditing data changes in your Schema.

Notifications You must be signed in to change notification settings

diagnosia/ecto_audit

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EctoAudit

Ecto extensions to support auditing data changes in your Schema.

Installation

Add EctoAudit as a dependency in your mix.exs file.

defp deps do
  [
    {:ecto_audit, "~> 0.1.0"}
  ]
end

After you are done, run mix deps.get to fetch the dependencies.

TODO

[ ] Add mix commands to automate adding the Migration/Schema files

Usage

Update your Repo

Add the line use EctoAudit.Repo to your Ecto Repo file to import the EctoAudit functionality to your project.

defmodule MyApp.Repo do
  use Ecto.Repo, otp_app: :my_app
  use EctoAudit.Repo
end

Add Migrations for each auditable schema

The following migration is required to store the changes to your schema. In this example the Schema is called "people", but you will need to update this to reflect the name of the schema you wish to keep track of.

defmodule MyApp.Repo.Migrations.CreateUserHistory do
  use Ecto.Migration

  def change do
    create table(:users_history) do
      add :user_id, :integer
      add :changes, :map
      add :committed_by, :integer
      add :committed_at, :utc_datetime

      timestamps()
    end

  end
end

Add History Schema for each auditable schema

As per the migration above, a schema similar to the following will be required for each auditable schema.

defmodule MyApp.UserHistory do
  use Ecto.Schema
  import Ecto.Changeset
  alias MyApp.UserHistory

  schema "users_history" do
    field :user_id, :integer
    field :changes, :map
    field :committed_at, :utc_datetime
    field :committed_by, :integer

    timestamps()
  end

  @doc false
  def changeset(%UserHistory{} = user_history, attrs) do
    user_history
    |> cast(attrs, [:user_id, :changes, :committed_by, :committed_at])
    |> validate_required([:user_id, :changes, :committed_by, :committed_at])
  end
end

Perform audited Inserts / Updates

To audit the inserts / updates in project you can now use the Repo.audited_insert and Repo.audited_update functions. These will both perform inserts/updates as normal but will also insert a log of the changes (and the user who made them) to the _history tables created earlier.

About

Ecto extensions to support auditing data changes in your Schema.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Elixir 100.0%