import { Module, OnModuleInit } from '@nestjs/common';
import { AiService } from './application/ai.service';
import { AiContextService } from './application/ai-context.service';
import { AiToolRegistryService } from './application/ai-tool-registry.service';
import { AiToolExecutorService } from './application/ai-tool-executor.service';
import { NoopAiProvider } from './infrastructure/noop-ai.provider';
import { InventoryStockAiTool } from './infrastructure/inventory-stock.ai-tool';
import { SalesSummaryAiTool } from './infrastructure/sales-summary.ai-tool';
import { PurchasingSummaryAiTool } from './infrastructure/purchasing-summary.ai-tool';
import { RecipeLookupAiTool } from './infrastructure/recipe-lookup.ai-tool';
import { RecipeCostAiTool } from './infrastructure/recipe-cost.ai-tool';
import { RecipeCandidatesAiTool } from './infrastructure/recipe-candidates.ai-tool';
import { RecipeCandidatesService } from './application/recipe-candidates.service';
import { InventoryModule } from '../inventory/inventory.module';
import { ReportingModule } from '../reporting/reporting.module';
import { PurchasingModule } from '../purchasing/purchasing.module';
import { RecipesModule } from '../recipes/recipes.module';
import { CostingModule } from '../costing/costing.module';
import { OrganizationsModule } from '../organizations/organizations.module';
@Module({
imports: [
InventoryModule,
ReportingModule,
PurchasingModule,
RecipesModule,
CostingModule,
OrganizationsModule,
],
providers: [
AiService,
AiContextService,
AiToolRegistryService,
AiToolExecutorService,
NoopAiProvider,
InventoryStockAiTool,
SalesSummaryAiTool,
PurchasingSummaryAiTool,
RecipeLookupAiTool,
RecipeCostAiTool,
RecipeCandidatesService,
RecipeCandidatesAiTool,
],
exports: [
AiService,
AiContextService,
AiToolRegistryService,
AiToolExecutorService,
],
})
export class AiModule implements OnModuleInit {
constructor(
private readonly registry: AiToolRegistryService,
private readonly inventoryStock: InventoryStockAiTool,
private readonly salesSummary: SalesSummaryAiTool,
private readonly purchasingSummary: PurchasingSummaryAiTool,
private readonly recipeLookup: RecipeLookupAiTool,
private readonly recipeCost: RecipeCostAiTool,
private readonly recipeCandidates: RecipeCandidatesAiTool,
) {}
onModuleInit(): void {
this.registry.register(this.inventoryStock);
this.registry.register(this.salesSummary);
this.registry.register(this.purchasingSummary);
this.registry.register(this.recipeLookup);
this.registry.register(this.recipeCost);
this.registry.register(this.recipeCandidates);
}
}
