Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Service-Soft/lbx-change-sets
This package helps you to track changes made on your entities automatically using a base repository class to extend from
https://github.com/Service-Soft/lbx-change-sets
change-set change-tracking loopback loopback-extension restore rollback soft-delete
Last synced: 23 days ago
JSON representation
This package helps you to track changes made on your entities automatically using a base repository class to extend from
- Host: GitHub
- URL: https://github.com/Service-Soft/lbx-change-sets
- Owner: Service-Soft
- License: mit
- Created: 2023-05-15T10:44:25.000Z (over 1 year ago)
- Default Branch: dev
- Last Pushed: 2024-06-03T16:04:52.000Z (8 months ago)
- Last Synced: 2024-06-03T18:46:12.856Z (8 months ago)
- Topics: change-set, change-tracking, loopback, loopback-extension, restore, rollback, soft-delete
- Language: TypeScript
- Homepage:
- Size: 1010 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.MD
- License: LICENSE.md
Awesome Lists containing this project
- awesome-angular - lbx-change-sets - This package helps you to track changes made on your entities automatically using a base repository class to extend from. (Table of contents / Third Party Components)
README
# lbx-change-sets
This package helps you to track changes made on your entities automatically using a base repository class to extend from:
- Automatically generate change sets containing information about WHO, WHEN and WHAT was changed on your entities.
- Be able to rollback a single or multiple entities to the state of a specified change set or date. (The reset gets also tracked)
- Be able to "softly" delete entities, which have a delete flag on them.
- Be able to restore a single or multiple "softly" deleted entities.# Usage
## Register the component
The minimum required code changes to use the library to its full extend is simply registering it in the `application.ts` constructor:
```ts
import { ChangeRepository, ChangeSetRepository, LbxChangeSetsComponent } from 'lbx-change-sets';//...
this.component(LbxChangeSetsComponent);
this.repository(ChangeRepository);
this.repository(ChangeSetRepository);
//...
```## Change Set
### Create an entity that should use change sets
All entities that should make use of the change set functionality need to extend `ChangeSetEntity`:```ts
import { ChangeSetEntity } from 'lbx-change-sets';
// ...
@model()
export class TestChangeSetEntity extends ChangeSetEntity {
@property({
type: 'string',
required: true
})
firstName: string;@property({
type: 'string',
required: true
})
lastName: string;constructor(data?: Partial) {
super(data);
}
}
```
### Create the repository for that entity
The repository needs to extend `CrudChangeSetRepository`:
```ts
import { CrudChangeSetRepository } from 'lbx-change-sets';
// ...
export class TestChangeSetEntityRepository extends CrudChangeSetRepository<
TestChangeSetEntity,
typeof TestChangeSetEntity.prototype.id,
TestRelations
> {
constructor(
@inject('datasources.db')
dataSource: DbDataSource,
@repository.getter('ChangeSetRepository')
changeSetRepositoryGetter: Getter,
@repository(ChangeRepository)
changeRepository: ChangeRepository,
@repository(ChangeSetRepository)
changeSetRepository: ChangeSetRepository,
@inject.getter(SecurityBindings.USER)
getUserProfile: Getter
) {
super(TestChangeSetEntity, dataSource, changeSetRepositoryGetter, changeRepository, changeSetRepository, getUserProfile);
}
}
```### Enjoy!
That's it. Whenever you user the default actions of the repository like "create" or "updateById" a change set will be generated automatically.If you use transactions they will be used to guarantee that change sets are only generated when the base operation worked.
> INFO: If you have complex relations that should be tracked or rolled back you will probably need to override the corresponding methods.
### Get change sets
All existing change sets are available via the normal `@hasMany` property "changeSets" on your entity and repository. You can however also get them via the `ChangeSetRepository` and `ChangeRepository`.### Rollback
To rollback you can simply call the methods `rollback[ToDate | ToChangeSet...]` on your repository.### Exclude properties from change set creation
If you have some properties that you don't want to have in your change sets, you can exlude them by overriding the `keysToExcludeFromChangeSets` array in your repository. By default this already doesn't track the entities id.## Change Set & Soft Delete
If you want to use the soft delete features aswell, you can basically follow the same steps above but extend from `ChangeSetSoftDeleteEntity` and `CrudChangeSetSoftDeleteRepository`.They provide the same functionality mentionend above and some more:
### soft delete
To softly delete a single or multiple entities you can use the respoitories `softDelete[ById | All...]` methods.### restore
To softly delete a single or multiple entities you can use the respoitories `restore[ById | All...]` methods.### convenience methods
Because most times you probably want to only return or update entities that aren't deleted, the repository provides some convenience methods for that:
- findNonDeleted: `find`, but limited to not deleted entities
- findDeleted: `find`, but limited to deleted entities
- updateAllNonDeleted: `updateAll`, but limited to not deleted entities
- updateAllDeleted: `updateAll`, but limited to deleted entities
- rollbackAllNonDeletedToDate: `rollbackAllToDate`, but limited to not deleted entities
- rollbackAllDeletedToDate: `rollbackAllToDate`, but limited to deleted entities
- deleteAllDeleted: `deleteAll`, but limited to deleted entities