import { init } from '@paralleldrive/cuid2'; import { IRepositoryBase } from '../interfaces/repository.base.interface'; export abstract class ObjectBase { abstract ObjectId: string; abstract ObjectName: string; abstract ObjectType: string; abstract TableName: string; protected _createId = init({ length: 10 }); protected _repository: IRepositoryBase; public createId(config?: { length?: number; upperCase?: boolean }): string { let generateId = init({ length: 10, }); let id: string; if (config) { if (config.length) { generateId = init({ length: config.length }); } id = generateId(); if (config.upperCase) { id = id.toUpperCase(); } } else { id = generateId(); } this.ObjectId = id; return id; } public initializeRepository(repo: IRepositoryBase) { this._repository = repo; } public getRepository() { if (!this._repository) { throw new Error('Repository has not been initialized.'); } return this._repository; } }