feat(indexing): Add support for regular index creation in documents and collections

This commit is contained in:
2025-04-07 16:47:16 +00:00
parent 0d2dcec3e2
commit ed1eecbab8
4 changed files with 81 additions and 4 deletions

View File

@@ -83,6 +83,46 @@ export function unI() {
};
}
/**
* Options for MongoDB indexes
*/
export interface IIndexOptions {
background?: boolean;
unique?: boolean;
sparse?: boolean;
expireAfterSeconds?: number;
[key: string]: any;
}
/**
* index - decorator to mark a field for regular indexing
*/
export function index(options?: IIndexOptions) {
return (target: SmartDataDbDoc<unknown, unknown>, key: string) => {
console.log(`called index() on >${target.constructor.name}.${key}<`);
// Initialize regular indexes array if it doesn't exist
if (!target.regularIndexes) {
target.regularIndexes = [];
}
// Add this field to regularIndexes with its options
target.regularIndexes.push({
field: key,
options: options || {}
});
// Also ensure it's marked as saveable
if (!target.saveableProperties) {
target.saveableProperties = [];
}
if (!target.saveableProperties.includes(key)) {
target.saveableProperties.push(key);
}
};
}
export const convertFilterForMongoDb = (filterArg: { [key: string]: any }) => {
// Special case: detect MongoDB operators and pass them through directly
const topLevelOperators = ['$and', '$or', '$nor', '$not', '$text', '$where', '$regex'];
@@ -401,6 +441,11 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
*/
public uniqueIndexes: string[];
/**
* regular indexes with their options
*/
public regularIndexes: Array<{field: string, options: IIndexOptions}> = [];
/**
* an array of saveable properties of a specific doc
*/
@@ -503,4 +548,4 @@ export class SmartDataDbDoc<T extends TImplements, TImplements, TManager extends
}
return identifiableObject;
}
}
}