Files
dinggadingga-backend/src/app.module.ts
MastersGame 1a04bafa0b feat(sync): synchronize customer orders from Hiboutik sales
For each customer sale not yet stored as completed, fetch the full sale
(GET /sales/:id) and upsert it as a STORE order keyed on hiboutikSaleId.
Lines are replaced on each upsert and linked to the matching product
version when it still exists. Quotations are skipped, orders are never
deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 10:48:54 +01:00

78 lines
3.6 KiB
TypeScript

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { ConfigModule } from '@nestjs/config';
import { HiboutikService } from './services/hiboutik/hiboutik.service';
import { CategoryHiboutikRepository } from './hiboutik/category.hiboutik.repository';
import { CategoryConverter } from './models/converter/category.converter';
import { ProductHiboutikRepository } from './hiboutik/product.hiboutik.repository';
import { HttpModule } from '@nestjs/axios';
import { CategoryDatabaseRepository } from './database/category.database.repository';
import { PrismaModule } from '../prisma/prisma.module';
import { HiboutikClient } from './hiboutik/hiboutik.client';
import { BrandHiboutikRepository } from './hiboutik/brand.hiboutik.repository';
import { BrandDatabaseRepository } from './database/brand.database.repository';
import { BrandConverter } from './models/converter/brand.converter';
import { SupplierHiboutikRepository } from './hiboutik/supplier.hiboutik.repository';
import { SupplierDatabaseRepository } from './database/supplier.database.repository';
import { SupplierConverter } from './models/converter/supplier.converter';
import { StockHiboutikRepository } from './hiboutik/stock.hiboutik.repository';
import { ProductConverter } from './models/converter/product.converter';
import { ProductDatabaseRepository } from './database/product.database.repository';
import { ProductVersionDatabaseRepository } from './database/productVersion.database.repository';
import { CustomerHiboutikRepository } from './hiboutik/customer.hiboutik.repository';
import { CustomerDatabaseRepository } from './database/customer.database.repository';
import { CustomerConverter } from './models/converter/customer.converter';
import { OrderConverter } from './models/converter/order.converter';
import { OrderDatabaseRepository } from './database/order.database.repository';
import { SaleHiboutikRepository } from './hiboutik/sale.hiboutik.repository';
import { CustomerAddressConverter } from './models/converter/customerAddress.converter';
import { CustomerAddressDatabaseRepository } from './database/customerAddress.database.repository';
import { BrandHiboutikService } from './services/hiboutik/brand.hiboutik.service';
import { CategoryHiboutikService } from './services/hiboutik/category.hiboutik.service';
import { CustomerHiboutikService } from './services/hiboutik/customer.hiboutik.service';
import { SupplierHiboutikService } from './services/hiboutik/supplier.hiboutik.service';
import { ProductHiboutikService } from './services/hiboutik/product.hiboutik.service';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
HttpModule.register({ timeout: 30_000 }),
PrismaModule,
],
controllers: [AppController],
providers: [
BrandConverter,
BrandDatabaseRepository,
BrandHiboutikRepository,
BrandHiboutikService,
CategoryConverter,
CategoryDatabaseRepository,
CategoryHiboutikRepository,
CategoryHiboutikService,
CustomerAddressConverter,
CustomerAddressDatabaseRepository,
CustomerHiboutikRepository,
CustomerDatabaseRepository,
CustomerConverter,
CustomerHiboutikService,
HiboutikClient,
HiboutikService,
OrderConverter,
OrderDatabaseRepository,
ProductConverter,
ProductDatabaseRepository,
ProductHiboutikRepository,
ProductHiboutikService,
ProductVersionDatabaseRepository,
SaleHiboutikRepository,
StockHiboutikRepository,
SupplierConverter,
SupplierDatabaseRepository,
SupplierHiboutikRepository,
SupplierHiboutikService,
],
})
export class AppModule {}