Refactor storage architecture with modular IndexedDB services
Implements a more flexible, modular approach to IndexedDB storage: - Introduces IStore interface for dynamic store creation - Adds specialized services for each entity (BookingService, CustomerService, etc.) - Moves serialization logic to entity-specific classes - Improves dependency injection and extensibility Enables easier addition of new entity types with minimal configuration
This commit is contained in:
parent
88cccb3456
commit
2aa9d06fab
13 changed files with 1048 additions and 236 deletions
16
src/index.ts
16
src/index.ts
|
|
@ -29,6 +29,11 @@ import { IndexedDBEventRepository } from './repositories/IndexedDBEventRepositor
|
|||
import { ApiEventRepository } from './repositories/ApiEventRepository';
|
||||
import { IndexedDBService } from './storage/IndexedDBService';
|
||||
import { OperationQueue } from './storage/OperationQueue';
|
||||
import { IStore } from './storage/IStore';
|
||||
import { BookingStore } from './storage/bookings/BookingStore';
|
||||
import { CustomerStore } from './storage/customers/CustomerStore';
|
||||
import { ResourceStore } from './storage/resources/ResourceStore';
|
||||
import { EventStore } from './storage/events/EventStore';
|
||||
|
||||
// Import workers
|
||||
import { SyncManager } from './workers/SyncManager';
|
||||
|
|
@ -94,6 +99,17 @@ async function initializeCalendar(): Promise<void> {
|
|||
// Register configuration instance
|
||||
builder.registerInstance(config).as<Configuration>();
|
||||
|
||||
// Register storage stores (IStore implementations)
|
||||
// Open/Closed Principle: Adding new entity only requires adding one line here
|
||||
builder.registerType(BookingStore).as<IStore>();
|
||||
builder.registerType(CustomerStore).as<IStore>();
|
||||
builder.registerType(ResourceStore).as<IStore>();
|
||||
builder.registerType(EventStore).as<IStore>();
|
||||
|
||||
// Resolve all IStore implementations and register as array
|
||||
const stores = container.resolveTypeAll<IStore>();
|
||||
builder.registerInstance(stores).as<IStore[]>();
|
||||
|
||||
// Register storage and repository services
|
||||
builder.registerType(IndexedDBService).as<IndexedDBService>();
|
||||
builder.registerType(OperationQueue).as<OperationQueue>();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue