fix(types): resolve TypeScript errors across multiple packages

- bot-services: Add registerAsync to AI, Calendar, Clock, Todo modules
- bot-services: Add convenience methods to ClockService for bot handlers
- bot-services: Make CreateEventInput.endTime optional with sensible defaults
- bot-services: Fix empty interface ESLint errors (use type aliases)
- questions-backend: Add missing schema columns (isDefault, sortOrder, deletedAt)
- questions-backend: Fix or() return type handling in question service
- questions-web: Add guard for undefined question ID in route params
- skilltree-web: Fix DBSchema type by not extending idb interface directly
- calendar-web: Fix Check icon prop (use weight instead of strokeWidth)
- matrix-mana-bot: Update clock handler to use new service methods

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Till-JS 2026-01-29 13:33:01 +01:00
parent 91143a497b
commit 1733580d05
14 changed files with 314 additions and 37 deletions

View file

@ -1,8 +1,13 @@
import { Module, DynamicModule } from '@nestjs/common';
import { Module, DynamicModule, Provider, Type, ModuleMetadata } from '@nestjs/common';
import { AiService } from './ai.service';
import { AiServiceConfig } from './types';
export interface AiModuleOptions extends Partial<AiServiceConfig> {}
export type AiModuleOptions = Partial<AiServiceConfig>;
export interface AiModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
useFactory: (...args: unknown[]) => Promise<AiModuleOptions> | AiModuleOptions;
inject?: (Type<unknown> | string | symbol)[];
}
@Module({})
export class AiModule {
@ -42,4 +47,29 @@ export class AiModule {
exports: [AiService],
};
}
/**
* Register asynchronously with factory function
*/
static registerAsync(options: AiModuleAsyncOptions): DynamicModule {
const configProvider: Provider = {
provide: 'AI_SERVICE_CONFIG',
useFactory: options.useFactory,
inject: options.inject || [],
};
return {
module: AiModule,
imports: options.imports || [],
providers: [
configProvider,
{
provide: AiService,
useFactory: (config: Partial<AiServiceConfig>) => new AiService(config),
inject: ['AI_SERVICE_CONFIG'],
},
],
exports: [AiService],
};
}
}