Refactors repository layer and IndexedDB architecture
Eliminates redundant repository abstraction layer by directly using EntityService methods Implements key improvements: - Removes unnecessary repository wrappers - Introduces polymorphic DataSeeder for mock data loading - Renames IndexedDBService to IndexedDBContext - Fixes database injection timing with lazy access pattern - Simplifies EventManager to use services directly Reduces code complexity and improves separation of concerns
This commit is contained in:
parent
5648c7c304
commit
dcd76836bd
10 changed files with 1260 additions and 574 deletions
13
src/index.ts
13
src/index.ts
|
|
@ -23,18 +23,16 @@ import { HeaderManager } from './managers/HeaderManager';
|
|||
import { WorkweekPresets } from './components/WorkweekPresets';
|
||||
|
||||
// Import repositories and storage
|
||||
import { IEventRepository } from './repositories/IEventRepository';
|
||||
import { MockEventRepository } from './repositories/MockEventRepository';
|
||||
import { MockBookingRepository } from './repositories/MockBookingRepository';
|
||||
import { MockCustomerRepository } from './repositories/MockCustomerRepository';
|
||||
import { MockResourceRepository } from './repositories/MockResourceRepository';
|
||||
import { IndexedDBEventRepository } from './repositories/IndexedDBEventRepository';
|
||||
import { IApiRepository } from './repositories/IApiRepository';
|
||||
import { ApiEventRepository } from './repositories/ApiEventRepository';
|
||||
import { ApiBookingRepository } from './repositories/ApiBookingRepository';
|
||||
import { ApiCustomerRepository } from './repositories/ApiCustomerRepository';
|
||||
import { ApiResourceRepository } from './repositories/ApiResourceRepository';
|
||||
import { IndexedDBService } from './storage/IndexedDBService';
|
||||
import { IndexedDBContext } from './storage/IndexedDBContext';
|
||||
import { OperationQueue } from './storage/OperationQueue';
|
||||
import { IStore } from './storage/IStore';
|
||||
import { BookingStore } from './storage/bookings/BookingStore';
|
||||
|
|
@ -126,7 +124,7 @@ async function initializeCalendar(): Promise<void> {
|
|||
|
||||
|
||||
// Register storage and repository services
|
||||
builder.registerType(IndexedDBService).as<IndexedDBService>();
|
||||
builder.registerType(IndexedDBContext).as<IndexedDBContext>();
|
||||
builder.registerType(OperationQueue).as<OperationQueue>();
|
||||
|
||||
// Register Mock repositories (development/testing - load from JSON files)
|
||||
|
|
@ -144,9 +142,6 @@ async function initializeCalendar(): Promise<void> {
|
|||
builder.registerType(CustomerService).as<IEntityService<ICustomer>>();
|
||||
builder.registerType(ResourceService).as<IEntityService<IResource>>();
|
||||
|
||||
// Register IndexedDB repositories (offline-first)
|
||||
builder.registerType(IndexedDBEventRepository).as<IEventRepository>();
|
||||
|
||||
// Register workers
|
||||
builder.registerType(SyncManager).as<SyncManager>();
|
||||
builder.registerType(DataSeeder).as<DataSeeder>();
|
||||
|
|
@ -190,8 +185,8 @@ async function initializeCalendar(): Promise<void> {
|
|||
const app = builder.build();
|
||||
|
||||
// Initialize database and seed data BEFORE initializing managers
|
||||
const indexedDBService = app.resolveType<IndexedDBService>();
|
||||
await indexedDBService.initialize();
|
||||
const indexedDBContext = app.resolveType<IndexedDBContext>();
|
||||
await indexedDBContext.initialize();
|
||||
|
||||
const dataSeeder = app.resolveType<DataSeeder>();
|
||||
await dataSeeder.seedIfEmpty();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue