feat(doc): Implement support for beforeSave, afterSave, beforeDelete, and afterDelete lifecycle hooks in document save and delete operations to allow custom logic execution during these critical moments.
This commit is contained in:
parent
db2767010d
commit
f5d5e20a97
@ -1,5 +1,13 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-04-23 - 5.14.0 - feat(doc)
|
||||||
|
Implement support for beforeSave, afterSave, beforeDelete, and afterDelete lifecycle hooks in document save and delete operations to allow custom logic execution during these critical moments.
|
||||||
|
|
||||||
|
- Calls beforeSave hook if defined before performing insert or update.
|
||||||
|
- Calls afterSave hook after a document is saved.
|
||||||
|
- Calls beforeDelete hook before deletion and afterDelete hook afterward.
|
||||||
|
- Ensures _updatedAt timestamp is refreshed during save operations.
|
||||||
|
|
||||||
## 2025-04-22 - 5.13.1 - fix(search)
|
## 2025-04-22 - 5.13.1 - fix(search)
|
||||||
Improve search query parsing for implicit AND queries by preserving quoted substrings and better handling free terms, quoted phrases, and field:value tokens.
|
Improve search query parsing for implicit AND queries by preserving quoted substrings and better handling free terms, quoted phrases, and field:value tokens.
|
||||||
|
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/smartdata',
|
name: '@push.rocks/smartdata',
|
||||||
version: '5.13.1',
|
version: '5.14.0',
|
||||||
description: 'An advanced library for NoSQL data organization and manipulation using TypeScript with support for MongoDB, data validation, collections, and custom data types.'
|
description: 'An advanced library for NoSQL data organization and manipulation using TypeScript with support for MongoDB, data validation, collections, and custom data types.'
|
||||||
}
|
}
|
||||||
|
@ -550,12 +550,16 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
|
|||||||
* may lead to data inconsistencies, but is faster
|
* may lead to data inconsistencies, but is faster
|
||||||
*/
|
*/
|
||||||
public async save() {
|
public async save() {
|
||||||
|
// allow hook before saving
|
||||||
|
if (typeof (this as any).beforeSave === 'function') {
|
||||||
|
await (this as any).beforeSave();
|
||||||
|
}
|
||||||
// tslint:disable-next-line: no-this-assignment
|
// tslint:disable-next-line: no-this-assignment
|
||||||
const self: any = this;
|
const self: any = this;
|
||||||
let dbResult: any;
|
let dbResult: any;
|
||||||
|
// update timestamp
|
||||||
this._updatedAt = new Date().toISOString();
|
this._updatedAt = new Date().toISOString();
|
||||||
|
// perform insert or update
|
||||||
switch (this.creationStatus) {
|
switch (this.creationStatus) {
|
||||||
case 'db':
|
case 'db':
|
||||||
dbResult = await this.collection.update(self);
|
dbResult = await this.collection.update(self);
|
||||||
@ -567,6 +571,10 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
|
|||||||
default:
|
default:
|
||||||
console.error('neither new nor in db?');
|
console.error('neither new nor in db?');
|
||||||
}
|
}
|
||||||
|
// allow hook after saving
|
||||||
|
if (typeof (this as any).afterSave === 'function') {
|
||||||
|
await (this as any).afterSave();
|
||||||
|
}
|
||||||
return dbResult;
|
return dbResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -574,7 +582,17 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
|
|||||||
* deletes a document from the database
|
* deletes a document from the database
|
||||||
*/
|
*/
|
||||||
public async delete() {
|
public async delete() {
|
||||||
await this.collection.delete(this);
|
// allow hook before deleting
|
||||||
|
if (typeof (this as any).beforeDelete === 'function') {
|
||||||
|
await (this as any).beforeDelete();
|
||||||
|
}
|
||||||
|
// perform deletion
|
||||||
|
const result = await this.collection.delete(this);
|
||||||
|
// allow hook after delete
|
||||||
|
if (typeof (this as any).afterDelete === 'function') {
|
||||||
|
await (this as any).afterDelete();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user