boot method

Future<void> boot()

Boots the application by initializing core services and providers.

Sets up:

Then boots all registered providers and triggers onBooted callbacks.

Sets status to AppStatus.ready on success, or AppStatus.error on failure.

Implementation

Future<void> boot() async {
  status = AppStatus.booting;
  setKeys();

  // Default Router
  final router = Router();
  container.bindInstance<Router>(router);

  // Default View Engine
  final settings = {"viewsPath": 'lib/src/http/views', "publicPath": 'lib/src/http/public'};
  final engine = TemplateEngine(viewsDirectory: settings['viewsPath']!, publicDirectory: settings['publicPath']!);

  // Enable caching for performance
  // Enabled by default for performance
  engine.shouldCache = true;
  // engine.shouldCache = config?.get('view.cache', true) ?? true;
  container.bindInstance<TemplateEngine>(engine);

  // Default Static Files Server
  final staticFilesServer = StaticFilesServer();
  container.bindInstance<StaticFilesServer>(staticFilesServer);

  // Default UUID Generator
  final Uuid uuid = Uuid();
  container.bindInstance<Uuid>(uuid);

  switch(Model.defaultDisk) {
    case .file:
    case DatabaseDisk.s3:
    case DatabaseDisk.sqlite:
      await _initSQLite();
    case DatabaseDisk.pgsql:
      await _initSQLite();
      await _initPostgres();
  }




  await container.initialize();

  try {
    // Boot all registered providers
    for (final provider in _providers) {
      try {
        await provider.boot(container);
      } catch (e, stack) {
        throw ProviderException.unbooted(type: provider.runtimeType, trace: stack);
      }
    }

    // Execute post-boot callbacks
    for (final callback in _bootedCallbacks) {
      callback();
    }

    status = AppStatus.ready;
  } catch (e, stack) {
    status = AppStatus.error;
    archeryLogger.error("Error booting app", {"origin": "App.boot", "error": e.toString(), "stack": stack.toString()});
    rethrow;
  }
}