fix(saveableProperties): fix issue where _createdAt and _updatedAt registered saveableProperties for all document types

This commit is contained in:
Philipp Kunz 2024-05-31 18:39:33 +02:00
parent d27dafba2b
commit bda9ac8a07
2 changed files with 29 additions and 14 deletions

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@push.rocks/smartdata',
version: '5.2.2',
version: '5.2.3',
description: 'An advanced library for NoSQL data organization and manipulation using TypeScript with support for MongoDB, data validation, collections, and custom data types.'
}

View File

@ -7,16 +7,26 @@ import { SmartdataDbWatcher } from './smartdata.classes.watcher.js';
export type TDocCreation = 'db' | 'new' | 'mixed';
export function globalSvDb() {
return (target: SmartDataDbDoc<unknown, unknown>, key: string) => {
console.log(`called svDb() on >${target.constructor.name}.${key}<`);
if (!target.globalSaveableProperties) {
target.globalSaveableProperties = [];
}
target.globalSaveableProperties.push(key);
};
}
/**
* saveable - saveable decorator to be used on class properties
*/
export function svDb() {
return (target: SmartDataDbDoc<unknown, unknown>, key: string) => {
console.log(`called svDb() on >${target.constructor.name}.${key}<`);
if (!target.constructor.prototype.saveableProperties) {
target.constructor.prototype.saveableProperties = [];
if (!target.saveableProperties) {
target.saveableProperties = [];
}
target.constructor.prototype.saveableProperties.push(key);
target.saveableProperties.push(key);
};
}
@ -28,16 +38,16 @@ export function unI() {
console.log(`called unI on >>${target.constructor.name}.${key}<<`);
// mark the index as unique
if (!target.constructor.prototype.uniqueIndexes) {
target.constructor.prototype.uniqueIndexes = [];
if (!target.uniqueIndexes) {
target.uniqueIndexes = [];
}
target.constructor.prototype.uniqueIndexes.push(key);
target.uniqueIndexes.push(key);
// and also save it
if (!target.constructor.prototype.saveableProperties) {
target.constructor.prototype.saveableProperties = [];
if (!target.saveableProperties) {
target.saveableProperties = [];
}
target.constructor.prototype.saveableProperties.push(key);
target.saveableProperties.push(key);
};
}
@ -202,22 +212,27 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
/**
* updated from db in any case where doc comes from db
*/
@svDb()
@globalSvDb()
_createdAt: string = (new Date()).toISOString();
/**
* will be updated everytime the doc is saved
*/
@svDb()
@globalSvDb()
_updatedAt: string = (new Date()).toISOString();
/**
* an array of saveable properties of ALL doc
*/
public globalSaveableProperties: string[];
/**
* unique indexes
*/
public uniqueIndexes: string[];
/**
* an array of saveable properties of a doc
* an array of saveable properties of a specific doc
*/
public saveableProperties: string[];
@ -301,7 +316,7 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
*/
public async createSavableObject(): Promise<TImplements> {
const saveableObject: unknown = {}; // is not exposed to outside, so any is ok here
for (const propertyNameString of this.constructor.prototype.saveableProperties) {
for (const propertyNameString of this.saveableProperties) {
saveableObject[propertyNameString] = this[propertyNameString];
}
return saveableObject as TImplements;