From 9d8a8b1c2cc2ba8d766d7d3f3c98def14a476823 Mon Sep 17 00:00:00 2001 From: anonpenguin Date: Wed, 9 Jul 2025 16:00:00 +0300 Subject: [PATCH] feat: Add static count method to BaseModel and enhance OrbitDBService with debugging logs --- src/framework/models/BaseModel.ts | 6 ++++ src/framework/services/OrbitDBService.ts | 9 +++++ .../blog-scenario/docker/blog-api-server.ts | 35 +++++++++++++++---- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/framework/models/BaseModel.ts b/src/framework/models/BaseModel.ts index 254672f..66400ee 100644 --- a/src/framework/models/BaseModel.ts +++ b/src/framework/models/BaseModel.ts @@ -306,6 +306,12 @@ export abstract class BaseModel { return results.length > 0 ? results[0] : null; } + static async count( + this: typeof BaseModel & (new (data?: any) => T), + ): Promise { + return await new QueryBuilder(this as any).count(); + } + // Relationship operations async load(relationships: string[]): Promise { const framework = this.getFrameworkInstance(); diff --git a/src/framework/services/OrbitDBService.ts b/src/framework/services/OrbitDBService.ts index 4f539a5..5562275 100644 --- a/src/framework/services/OrbitDBService.ts +++ b/src/framework/services/OrbitDBService.ts @@ -36,6 +36,15 @@ export class FrameworkOrbitDBService { } async openDatabase(name: string, type: StoreType): Promise { + console.log('FrameworkOrbitDBService.openDatabase called with:', { name, type }); + console.log('this.orbitDBService:', this.orbitDBService); + console.log('typeof this.orbitDBService.openDB:', typeof this.orbitDBService.openDB); + console.log('this.orbitDBService methods:', Object.getOwnPropertyNames(Object.getPrototypeOf(this.orbitDBService))); + + if (typeof this.orbitDBService.openDB !== 'function') { + throw new Error(`openDB is not a function. Service type: ${typeof this.orbitDBService}, methods: ${Object.getOwnPropertyNames(Object.getPrototypeOf(this.orbitDBService))}`); + } + return await this.orbitDBService.openDB(name, type); } diff --git a/tests/real-integration/blog-scenario/docker/blog-api-server.ts b/tests/real-integration/blog-scenario/docker/blog-api-server.ts index b71985f..747dce3 100644 --- a/tests/real-integration/blog-scenario/docker/blog-api-server.ts +++ b/tests/real-integration/blog-scenario/docker/blog-api-server.ts @@ -627,9 +627,6 @@ class BlogAPIServer { const { OrbitDBService } = await import( '../../../../src/framework/services/RealOrbitDBService' ); - const { FrameworkIPFSService, FrameworkOrbitDBService } = await import( - '../../../../src/framework/services/OrbitDBService' - ); // Initialize IPFS service const ipfsService = new IPFSService({ @@ -648,10 +645,10 @@ class BlogAPIServer { await orbitDBService.init(); console.log(`[${this.nodeId}] OrbitDB service initialized`); - // Wrap services for framework - const frameworkIPFS = new FrameworkIPFSService(ipfsService); - const frameworkOrbitDB = new FrameworkOrbitDBService(orbitDBService); - + // Debug: Check OrbitDB service methods + console.log(`[${this.nodeId}] OrbitDB service methods:`, Object.getOwnPropertyNames(Object.getPrototypeOf(orbitDBService))); + console.log(`[${this.nodeId}] Has openDB method:`, typeof orbitDBService.openDB === 'function'); + // Initialize framework this.framework = new DebrosFramework({ environment: 'test', @@ -669,8 +666,32 @@ class BlogAPIServer { }, }); + // Pass raw services to framework - it will wrap them itself await this.framework.initialize(orbitDBService, ipfsService); console.log(`[${this.nodeId}] DebrosFramework initialized successfully`); + + // Register models with framework + this.framework.registerModel(User, { + scope: 'global', + type: 'docstore' + }); + this.framework.registerModel(UserProfile, { + scope: 'global', + type: 'docstore' + }); + this.framework.registerModel(Category, { + scope: 'global', + type: 'docstore' + }); + this.framework.registerModel(Post, { + scope: 'user', + type: 'docstore' + }); + this.framework.registerModel(Comment, { + scope: 'user', + type: 'docstore' + }); + console.log(`[${this.nodeId}] Models registered with framework`); } }