기존 User 테이블에 각 유저별 알람설정을 할 수 있도록 새로운 테이블을 조인하여 붙여놓았는데 새로 등록하는 회원들은 디폴트 알람설정값이 생성되고 있으나 기존 회원들은 값이 없어서 에러가 발생 => 일괄적으로 디폴트 값을 생성해야할 필요가 있음
1) 지속적으로 이루어지지는 않으나 일시적으로 동작해야하는 코드가 있음
2) DB에서 직접 쿼리를 사용하지 않기(너무 위험)
3) 스크립트를 커맨드로 실행시켜서 적용하기
$ npm install nestjs-command
% npm install -S -D @types/yargs
공식 : https://gitlab.com/aa900031/nestjs-command
./src/cli.ts
import { NestFactory } from '@nestjs/core';
import { CommandModule, CommandService } from 'nestjs-command';
import { createConnection } from 'typeorm';
import { AppModule } from './app.module';
createConnection('default').then(async (connection) => {
const app = await NestFactory.createApplicationContext(AppModule, {
logger: ['error'],
});
try {
await app.select(CommandModule).get(CommandService).exec();
await app.close();
} catch (error) {
console.error(error);
await app.close();
process.exit(1);
}
});
$ nest g mo task
./task/task.module.ts
import { TypeOrmModule } from '@nestjs/typeorm';
import { CommandModule } from 'nestjs-command';
import { Module } from '@nestjs/common';
import { SomeTask } from './some.task';
import { User } from '../auth/entities/user.entity';
import { AlarmConfig } from '../auth/entities/alarmConfig.entity';
@Module({
imports: [CommandModule, TypeOrmModule.forFeature([User, AlarmConfig])], // repository를 주입받기 위한 typeorm설정
exports: [],
providers: [SomeTask], //스크립트 내용이 들어갈 클래스
})
export class TaskModule {}
./task/some.task.ts
import { InjectRepository } from '@nestjs/typeorm';
import { Command } from 'nestjs-command';
import { Repository } from 'typeorm';
import { AlarmConfig } from '../auth/entities/alarmConfig.entity';
import { User } from '../auth/entities/user.entity';
export class SomeTask {
constructor(
@InjectRepository(User) private userRepo: Repository<User>,
@InjectRepository(AlarmConfig) private alarmConfigRepo: Repository<AlarmConfig>,
) {}
@Command({
command: 'create:alarmconfig', // 함수의 커맨드명령어 설정
describe: '알람설정이 안된 유저의 디폴트값 생성', // 해당 커맨드의 설명
})
async createAlarmConfig() {
// 여기에 코드를 작성하면 된다.
// 보통 Nestjs + typeorm 작성하듯이 똑같습니다.
}
}
$ npx nestjs-command <커맨드명령어>
$ npx nestjs-command create:alarmconfig //위의 스크립트에 설정된 커맨드 예시
$ NODE_ENV='development' npx nestjs-command create:alarmconfig
이런식으로 커맨드 입력하면 스크립트가 자동 실행됩니다~