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

1.1.1 • Public • Published

loopback-component-history

Travis (.org) branch npm npm bundle size GitHub

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-component-history

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-component-history";

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

    constructor(data?: Partial<User>) {
        super(data);
    }
}

Tip

Don't use unique indexes in your models, instead add unique property to model definition

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,
        unique: true,
    })
    username: string;
}

History Repository Mixin

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

Example

Change your repository from:

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

To:

import { HistoryRepositoryMixin } from "loopback-component-history";

export class UserRepository extends HistoryRepositoryMixin<
    User,
    UserRelations
>()<Constructor<DefaultCrudRepository<User, string, UserRelations>>>(
    DefaultCrudRepository
) {
    // ...
}

Contributors

License

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

Dependents (1)

Package Sidebar

Install

npm i loopback-component-history

Weekly Downloads

1

Version

1.1.1

License

MIT

Unpacked Size

73.4 kB

Total Files

26

Last publish

Collaborators

  • koliber