think/packages/server/src/app.module.ts

115 lines
3.3 KiB
TypeScript
Raw Normal View History

2022-05-16 09:23:59 +00:00
import { CollectorEntity } from '@entities/collector.entity';
import { CommentEntity } from '@entities/comment.entity';
import { DocumentEntity } from '@entities/document.entity';
import { DocumentAuthorityEntity } from '@entities/document-authority.entity';
import { MessageEntity } from '@entities/message.entity';
import { TemplateEntity } from '@entities/template.entity';
2022-02-20 11:51:55 +00:00
import { UserEntity } from '@entities/user.entity';
2022-05-16 09:23:59 +00:00
import { ViewEntity } from '@entities/view.entity';
2022-02-20 11:51:55 +00:00
import { WikiEntity } from '@entities/wiki.entity';
import { WikiUserEntity } from '@entities/wiki-user.entity';
2022-05-21 06:39:56 +00:00
import { getLogFileName } from '@helpers/log.helper';
2022-02-20 11:51:55 +00:00
import { CollectorModule } from '@modules/collector.module';
import { CommentModule } from '@modules/comment.module';
2022-05-16 09:23:59 +00:00
import { DocumentModule } from '@modules/document.module';
import { FileModule } from '@modules/file.module';
2022-02-20 11:51:55 +00:00
import { MessageModule } from '@modules/message.module';
import { TemplateModule } from '@modules/template.module';
2022-05-16 09:23:59 +00:00
import { UserModule } from '@modules/user.module';
2022-02-20 11:51:55 +00:00
import { ViewModule } from '@modules/view.module';
2022-05-16 09:23:59 +00:00
import { WikiModule } from '@modules/wiki.module';
2022-05-21 06:39:56 +00:00
import { forwardRef, Inject, Module } from '@nestjs/common';
2022-05-16 09:23:59 +00:00
import { ConfigModule, ConfigService } from '@nestjs/config';
2022-05-21 06:39:56 +00:00
import { Cron, ScheduleModule } from '@nestjs/schedule';
2022-05-16 09:23:59 +00:00
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { getConfig } from '@think/config';
2022-05-21 06:39:56 +00:00
import * as fs from 'fs-extra';
import { LoggerModule } from 'nestjs-pino';
import * as path from 'path';
import pino from 'pino';
2022-02-20 11:51:55 +00:00
const ENTITIES = [
UserEntity,
WikiEntity,
WikiUserEntity,
DocumentAuthorityEntity,
DocumentEntity,
CollectorEntity,
CommentEntity,
MessageEntity,
TemplateEntity,
ViewEntity,
];
const MODULES = [
UserModule,
WikiModule,
DocumentModule,
CollectorModule,
FileModule,
CommentModule,
MessageModule,
TemplateModule,
ViewModule,
];
2022-05-21 06:39:56 +00:00
const ONE_DAY = 24 * 60 * 60 * 1000;
2022-02-20 11:51:55 +00:00
@Module({
imports: [
ConfigModule.forRoot({
cache: true,
load: [getConfig],
isGlobal: true,
}),
2022-05-21 06:39:56 +00:00
ScheduleModule.forRoot(),
process.env.NODE_ENV === 'production' &&
LoggerModule.forRoot({
pinoHttp: {
stream: pino.destination({
dest: `./logs/${getLogFileName(new Date())}`,
minLength: 4096,
mkdir: true,
sync: false,
}),
},
}),
2022-02-20 11:51:55 +00:00
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => {
return {
type: 'mysql',
entities: ENTITIES,
keepConnectionAlive: true,
...config.get('db.mysql'),
} as TypeOrmModuleOptions;
},
}),
...MODULES,
2022-05-21 06:39:56 +00:00
].filter(Boolean),
2022-02-20 11:51:55 +00:00
controllers: [],
providers: [],
})
2022-05-21 06:39:56 +00:00
export class AppModule {
constructor(
@Inject(forwardRef(() => ConfigService))
private readonly configService: ConfigService
) {}
/**
* 9
*/
@Cron('0 0 9 * * *')
deleteLog() {
let retainDays = this.configService.get('server.logRetainDays');
const startDate = new Date(new Date().valueOf() - retainDays * ONE_DAY).valueOf();
do {
const filepath = path.join(__dirname, '../logs', getLogFileName(startDate, retainDays));
fs.removeSync(filepath);
retainDays -= 1;
} while (retainDays > 0);
}
}