loopback-component-history
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:
-
UID
: A unique record identifier of the history -
BeginDate
: Record creation date -
EndDate
: Record deletion date -
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
- Change your model parent class from
Entity
toHistoryEntity
- 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)