loopback-history-extension
TypeScript icon, indicating that this package has built-in type declarations

6.1.0 • Public • Published

loopback-history-extension

Saving history of Create, Update, Delete of a table sometimes is a big problem in data model design level.

A good approach for saving history is about adding some columns to your tables:

  1. UID: A unique record identifier of the history
  2. BeginDate: Record creation date
  3. EndDate: Record deletion date
  4. ID: History of one data is accessable using their same ID
  • Per every Create we will create a new record in table
  • Per every Update we will invalid last history, create new record
  • Per every Delete we will invalid last history

Now, using this simple extension you can add all history features to your models and repositories.


Installation

npm i --save loopback-history-extension

Usage

History Model

  1. Change your model parent class from Entity to HistoryEntity
  2. Remove id property from your model declaration

Example

Change your model from:

@model()
export class User extends Entity {
    @property({
        type: "string",
        unique: true,
        id: true
    })
    id: string;
 
    @property({
        type: "string",
        default: ""
    })
    username: string;
 
    constructor(data?: Partial<User>) {
        super(data);
    }
}

To:

import { HistoryEntity } from "loopback-history-extension";
 
@model()
export class User extends HistoryEntity {
    @property({
        type: "string",
        default: ""
    })
    username: string;
 
    constructor(data?: Partial<User>) {
        super(data);
    }
}

Tip

Don't use unique columns in your models

Convert your model from:

export class User extends Entity {
    @property({
        type: "string",
        required: true,
        index: {
            unique: true
        }
    })
    username: string;
}

To:

export class User extends HistoryEntity {
    @property({
        type: "string",
        required: true
    })
    username: string;
}

History Repository Mixin

Change your repository parent class from DefaultCrudRepository to HistoryCrudRepositoryMixin()()

Example

Change your repository from:

export class UserRepository extends DefaultCrudRepository<
    User,
    typeof User.prototype.id,
    UserRelations
> {
    // ...
}

To:

import { HistoryCrudRepositoryMixin } from "loopback-history-extension";
 
export class UserRepository extends HistoryCrudRepositoryMixin<
    User,
    UserRelations
>()() {
    // ...
}

Contributions

License

This project is licensed under the MIT license.
Copyright (c) KoLiBer (koliberr136a1@gmail.com)

Package Sidebar

Install

npm i loopback-history-extension

Weekly Downloads

25

Version

6.1.0

License

MIT

Unpacked Size

30.5 kB

Total Files

22

Last publish

Collaborators

  • koliber