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)

    Install

    npm i loopback-component-history

    DownloadsWeekly Downloads

    17

    Version

    1.1.1

    License

    MIT

    Unpacked Size

    73.4 kB

    Total Files

    26

    Last publish

    Collaborators

    • koliber