npm.io
6.1.0 • Published 6 years ago

loopback-history-extension

Licence
MIT
Version
6.1.0
Deps
5
Size
30 kB
Vulns
0
Weekly
0

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)

Keywords