Adds comprehensive mock data repositories and seeding infrastructure
Implements polymorphic data seeding mechanism for initial application setup - Adds Mock repositories for Event, Booking, Customer, and Resource entities - Creates DataSeeder to automatically populate IndexedDB from JSON sources - Enhances index.ts initialization process with data seeding step - Adds mock JSON data files for comprehensive test data Improves offline-first and development testing capabilities
This commit is contained in:
parent
871f5c5682
commit
5648c7c304
11 changed files with 1641 additions and 40 deletions
39
src/index.ts
39
src/index.ts
|
|
@ -4,7 +4,7 @@ import { eventBus } from './core/EventBus';
|
|||
import { ConfigManager } from './configurations/ConfigManager';
|
||||
import { Configuration } from './configurations/CalendarConfig';
|
||||
import { URLManager } from './utils/URLManager';
|
||||
import { IEventBus } from './types/CalendarTypes';
|
||||
import { ICalendarEvent, IEventBus } from './types/CalendarTypes';
|
||||
|
||||
// Import all managers
|
||||
import { EventManager } from './managers/EventManager';
|
||||
|
|
@ -25,6 +25,9 @@ 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';
|
||||
|
|
@ -46,6 +49,7 @@ import { ResourceService } from './storage/resources/ResourceService';
|
|||
|
||||
// Import workers
|
||||
import { SyncManager } from './workers/SyncManager';
|
||||
import { DataSeeder } from './workers/DataSeeder';
|
||||
|
||||
// Import renderers
|
||||
import { DateHeaderRenderer, type IHeaderRenderer } from './renderers/DateHeaderRenderer';
|
||||
|
|
@ -65,6 +69,9 @@ import { EventStackManager } from './managers/EventStackManager';
|
|||
import { EventLayoutCoordinator } from './managers/EventLayoutCoordinator';
|
||||
import { IColumnDataSource } from './types/ColumnDataSource';
|
||||
import { DateColumnDataSource } from './datasources/DateColumnDataSource';
|
||||
import { IBooking } from './types/BookingTypes';
|
||||
import { ICustomer } from './types/CustomerTypes';
|
||||
import { IResource } from './types/ResourceTypes';
|
||||
|
||||
/**
|
||||
* Handle deep linking functionality after managers are initialized
|
||||
|
|
@ -122,26 +129,27 @@ async function initializeCalendar(): Promise<void> {
|
|||
builder.registerType(IndexedDBService).as<IndexedDBService>();
|
||||
builder.registerType(OperationQueue).as<OperationQueue>();
|
||||
|
||||
// Register API repositories (backend sync)
|
||||
// Each entity type has its own API repository implementing IApiRepository<T>
|
||||
builder.registerType(ApiEventRepository).as<IApiRepository<any>>();
|
||||
builder.registerType(ApiBookingRepository).as<IApiRepository<any>>();
|
||||
builder.registerType(ApiCustomerRepository).as<IApiRepository<any>>();
|
||||
builder.registerType(ApiResourceRepository).as<IApiRepository<any>>();
|
||||
// Register Mock repositories (development/testing - load from JSON files)
|
||||
// Each entity type has its own Mock repository implementing IApiRepository<T>
|
||||
builder.registerType(MockEventRepository).as<IApiRepository<ICalendarEvent>>();
|
||||
builder.registerType(MockBookingRepository).as<IApiRepository<IBooking>>();
|
||||
builder.registerType(MockCustomerRepository).as<IApiRepository<ICustomer>>();
|
||||
builder.registerType(MockResourceRepository).as<IApiRepository<IResource>>();
|
||||
|
||||
builder.registerType(DateColumnDataSource).as<IColumnDataSource>();
|
||||
// Register entity services (sync status management)
|
||||
// Register entity services (sync status management)
|
||||
// Open/Closed Principle: Adding new entity only requires adding one line here
|
||||
builder.registerType(EventService).as<IEntityService<any>>();
|
||||
builder.registerType(BookingService).as<IEntityService<any>>();
|
||||
builder.registerType(CustomerService).as<IEntityService<any>>();
|
||||
builder.registerType(ResourceService).as<IEntityService<any>>();
|
||||
builder.registerType(EventService).as<IEntityService<ICalendarEvent>>();
|
||||
builder.registerType(BookingService).as<IEntityService<IBooking>>();
|
||||
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>();
|
||||
|
||||
// Register renderers
|
||||
builder.registerType(DateHeaderRenderer).as<IHeaderRenderer>();
|
||||
|
|
@ -181,6 +189,13 @@ async function initializeCalendar(): Promise<void> {
|
|||
// Build the container
|
||||
const app = builder.build();
|
||||
|
||||
// Initialize database and seed data BEFORE initializing managers
|
||||
const indexedDBService = app.resolveType<IndexedDBService>();
|
||||
await indexedDBService.initialize();
|
||||
|
||||
const dataSeeder = app.resolveType<DataSeeder>();
|
||||
await dataSeeder.seedIfEmpty();
|
||||
|
||||
// Get managers from container
|
||||
const eb = app.resolveType<IEventBus>();
|
||||
const calendarManager = app.resolveType<CalendarManager>();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue