web-service/apps/catalog/src/catalog.module.ts

78 lines
2.7 KiB
TypeScript

import { Module, OnModuleInit } from '@nestjs/common';
import { CatalogController } from './catalog.controller';
import { CatalogService } from './services/catalog.service';
import { ClientsModule } from '@nestjs/microservices';
import { makeKnex, makeTypeOrm, natsClient } from '@freeblox/shared';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import knex from 'knex';
import { ContentEntity } from './database/entities/content.entity';
import { ContentRevisionEntity } from './database/entities/content-revision.entity';
import {
ContentModerationEntity,
ContentModerationBanEntity,
} from './database/entities/content-moderation.entity';
import { ContentAssetEntity } from './database/entities/content-asset.entity';
import { ContentPriceEntity } from './database/entities/content-price.entity';
import { ContentOwnershipEntity } from './database/entities/content-ownership.entity';
import { ContentTradeEntity } from './database/entities/content-trade.entity';
import { ContentFavoriteEntity } from './database/entities/content-favorite.entity';
import { ContentVoteEntity } from './database/entities/content-vote.entity';
import { ContentReportEntity } from './database/entities/content-report.entity';
import {
ContentCategoryContentTypeEntity,
ContentCategoryEntity,
} from './database/entities/content-category.entity';
import { CreateContentService } from './services/create-content.service';
const entities = [
ContentEntity,
ContentRevisionEntity,
ContentModerationEntity,
ContentModerationBanEntity,
ContentAssetEntity,
ContentPriceEntity,
ContentOwnershipEntity,
ContentTradeEntity,
ContentFavoriteEntity,
ContentVoteEntity,
ContentReportEntity,
ContentCategoryEntity,
ContentCategoryContentTypeEntity,
];
@Module({
imports: [
ConfigModule.forRoot({
ignoreEnvFile: process.env.NODE_ENV === 'development',
load: [makeKnex('catalog', __dirname), makeTypeOrm('catalog')],
}),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
...config.get('typeorm'),
entities,
}),
}),
TypeOrmModule.forFeature(entities),
ClientsModule.register([
natsClient('catalog'),
natsClient('auth'),
natsClient('player'),
natsClient('assets'),
]),
],
controllers: [CatalogController],
providers: [CatalogService, CreateContentService],
})
export class CatalogModule implements OnModuleInit {
constructor(private readonly config: ConfigService) {}
async onModuleInit() {
const knexInstance = knex(this.config.get('knex'));
await knexInstance.migrate.latest();
await knexInstance.seed.run();
}
}