Skip to content

Commit 120ccb1

Browse files
committed
Refactor app.module.ts to update MigrationsService import and add MigrationsModule
1 parent ce9eb5f commit 120ccb1

File tree

7 files changed

+157
-125
lines changed

7 files changed

+157
-125
lines changed

src/app.module.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import { MailerModule } from '@nestjs-modules/mailer';
2020
import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter';
2121
import { MailadmService } from '~/settings/mailadm.service';
2222
import { FactorydriveModule } from '@the-software-compagny/nestjs_module_factorydrive';
23-
import { MigrationsService } from './migrations.service';
23+
import { MigrationsService } from './migrations/migrations.service';
24+
import { MigrationsModule } from './migrations/migrations.module';
2425

2526
@Module({
2627
imports: [
@@ -93,11 +94,11 @@ import { MigrationsService } from './migrations.service';
9394
CoreModule.register(),
9495
ManagementModule.register(),
9596
SettingsModule.register(),
97+
MigrationsModule.register(),
9698
],
9799
controllers: [AppController],
98100
providers: [
99101
AppService,
100-
MigrationsService,
101102
{
102103
provide: APP_GUARD,
103104
useClass: AuthGuard('jwt'),

src/management/identities/identities.service.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ export class IdentitiesService extends AbstractServiceSchema {
5151
data?: IdentitiesUpsertDto,
5252
options?: QueryOptions<T>,
5353
): Promise<[HttpStatus.OK | HttpStatus.CREATED, ModifyResult<Query<T, T, any, T>>]> {
54-
5554
data = this.transformNullsToString(data);
5655
const identity = await this.model.findOne<Identities>(filters).exec();
5756
this.logger.log(`Upserting identity with filters ${JSON.stringify(filters)}`);
@@ -76,7 +75,7 @@ export class IdentitiesService extends AbstractServiceSchema {
7675
'inetOrgPerson.employeeNumber and inetOrgPerson.employeeType are required for create identity.',
7776
);
7877
}
79-
if ( data.inetOrgPerson?.employeeNumber.indexOf('174981') >= 0 || data.inetOrgPerson?.employeeNumber.indexOf('162982') >= 0 ){
78+
if (data.inetOrgPerson?.employeeNumber.indexOf('174981') >= 0 || data.inetOrgPerson?.employeeNumber.indexOf('162982') >= 0) {
8079
console.log('test');
8180
}
8281
//controle si l identité est fusionnée si c est la bonne à mettre à jour puisqu elle a 2 employeeNumber

src/migrations.service.ts

Lines changed: 0 additions & 93 deletions
This file was deleted.

src/migrations/1316027432511-employee-number.ts

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { Logger } from "@nestjs/common"
2+
import { InjectConnection } from "@nestjs/mongoose"
3+
import { Connection } from "mongoose"
4+
5+
export default class EmployeeNumber1616027432511 {
6+
public constructor(@InjectConnection() private connection: Connection) {
7+
8+
}
9+
10+
public async up(): Promise<void> {
11+
Logger.log('EmployeeNumber1616027432511 up')
12+
13+
Logger.log('this.connection.readyState', this.connection.readyState)
14+
15+
return new Promise((resolve) => {
16+
const interval = setInterval(() => {
17+
Logger.log('EmployeeNumber1616027432511 up in progress')
18+
}, 1_000)
19+
20+
setTimeout(() => {
21+
clearInterval(interval)
22+
Logger.log('EmployeeNumber1616027432511 up done')
23+
24+
resolve()
25+
}, 5_000)
26+
})
27+
}
28+
29+
public async down(): Promise<void> {
30+
Logger.log('EmployeeNumber1616027432511 down')
31+
}
32+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { DynamicModule, Logger, Module } from '@nestjs/common';
2+
import { glob } from 'glob';
3+
import chalk from 'chalk';
4+
import { MigrationsService } from './migrations.service';
5+
6+
@Module({
7+
imports: [],
8+
providers: [
9+
MigrationsService,
10+
],
11+
})
12+
export class MigrationsModule {
13+
public static async register(): Promise<DynamicModule> {
14+
const jobs = [];
15+
const files = await glob(`./jobs/*.js`, {
16+
cwd: __dirname,
17+
root: __dirname,
18+
});
19+
20+
for (const file of files) {
21+
const migration = await import(`${__dirname}/${file}`);
22+
23+
if (!migration.default) {
24+
Logger.log(chalk.yellow(`Migration ${chalk.bold('<' + file + '>')} does not have a default export !`));
25+
return;
26+
}
27+
28+
jobs.push(migration.default);
29+
}
30+
31+
return {
32+
module: this,
33+
providers: [
34+
...Reflect.getMetadata('providers', this),
35+
...jobs,
36+
],
37+
}
38+
}
39+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { Injectable, Logger, OnModuleInit } from '@nestjs/common'
2+
import { InjectModel } from '@nestjs/mongoose'
3+
import { Model } from 'mongoose'
4+
import { glob } from 'glob'
5+
import readline from 'readline'
6+
import chalk from 'chalk'
7+
8+
function startLoader(message) {
9+
let currentFrame = 0;
10+
const spinnerFrames = ['-', '\\', '|', '/'];
11+
12+
const loaderInterval = setInterval(() => {
13+
readline.cursorTo(process.stdout, 0);
14+
process.stdout.write(`${spinnerFrames[currentFrame]} ${message} `);
15+
currentFrame = (currentFrame + 1) % spinnerFrames.length;
16+
}, 100);
17+
18+
return loaderInterval;
19+
}
20+
21+
function stopLoader(loaderInterval) {
22+
clearInterval(loaderInterval);
23+
readline.cursorTo(process.stdout, 0);
24+
process.stdout.clearLine(0);
25+
}
26+
27+
@Injectable()
28+
export class MigrationsService implements OnModuleInit {
29+
private readonly logger = new Logger(`${chalk.bold.red(MigrationsService.name)}\x1b[33m`)
30+
31+
protected migrations = new Map<string, any>()
32+
33+
public constructor() { }
34+
35+
public async onModuleInit() {
36+
await this.runMigrations()
37+
}
38+
39+
public async runMigrations() {
40+
this.logger.log(chalk.yellow('Checking migrations files...'));
41+
await this._loadMigrationsFiles()
42+
43+
44+
const loader = startLoader('Migration en cours...');
45+
await this._executeMigrations();
46+
stopLoader(loader);
47+
}
48+
49+
private async _loadMigrationsFiles() {
50+
const files = await glob(`./migrations/*.js`, {
51+
cwd: __dirname,
52+
root: __dirname,
53+
});
54+
55+
for (const file of files) {
56+
const migration = await import(`${__dirname}/${file}`);
57+
58+
if (!migration.default) {
59+
this.logger.log(chalk.yellow(`Migration ${chalk.bold('<' + file + '>')} does not have a default export !`));
60+
return;
61+
}
62+
63+
this.migrations.set(file, migration)
64+
}
65+
}
66+
67+
private async _executeMigrations() {
68+
console.log('this.migrations.keys()', this.migrations.keys())
69+
for (const key of this.migrations.keys()) {
70+
const migration = this.migrations.get(key);
71+
const instance = new migration.default();
72+
73+
if (typeof instance.up !== 'function') {
74+
this.logger.log(chalk.yellow(`Migration ${chalk.bold('<' + key + '>')} does not have an up method !`));
75+
break;
76+
}
77+
78+
this.logger.log(chalk.yellow(`Running migration ${chalk.bold('<' + key + '>')}...`));
79+
await instance.up();
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)