Skip to content

Commit 10009ef

Browse files
committed
Migrate Neo4j Migration
1 parent fb0027f commit 10009ef

File tree

3 files changed

+32
-26
lines changed

3 files changed

+32
-26
lines changed

src/core/database/migration/migration-discovery.service.ts

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
1-
import { DiscoveryService } from '@golevelup/nestjs-discovery';
21
import { Injectable } from '@nestjs/common';
3-
import { sortBy } from '@seedcompany/common';
2+
import { cmpBy } from '@seedcompany/common';
43
import { startCase } from 'lodash';
54
import { type DateTime } from 'luxon';
5+
import { MetadataDiscovery } from '~/core/discovery';
66
import { type BaseMigration } from './base-migration.service';
7-
import { DB_MIGRATION_KEY } from './migration.decorator';
7+
import { MigrationVersion } from './migration.decorator';
88

99
@Injectable()
1010
export class MigrationDiscovery {
11-
constructor(private readonly discover: DiscoveryService) {}
11+
constructor(private readonly discovery: MetadataDiscovery) {}
1212

1313
async getMigrations() {
14-
const discovered = await this.discover.providersWithMetaAtKey<DateTime>(
15-
DB_MIGRATION_KEY,
16-
);
17-
const mapped = discovered.map((d): DiscoveredMigration => {
18-
const instance = d.discoveredClass.instance as BaseMigration;
19-
const name = instance.constructor.name.replace('Migration', '');
20-
instance.version = d.meta;
21-
return {
22-
version: d.meta,
23-
instance: instance,
24-
name: name,
25-
humanName: startCase(name),
26-
};
27-
});
28-
return sortBy(mapped, (d) => d.version);
14+
return this.discovery
15+
.discover(MigrationVersion)
16+
.classes<BaseMigration>()
17+
.map(({ meta: version, instance }): DiscoveredMigration => {
18+
const name = instance.constructor.name.replace('Migration', '');
19+
instance.version = version;
20+
return {
21+
version,
22+
instance,
23+
name,
24+
humanName: startCase(name),
25+
};
26+
})
27+
.toSorted(cmpBy((d) => d.version));
2928
}
3029
}
3130

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1-
import { applyDecorators, Injectable, SetMetadata } from '@nestjs/common';
1+
import { Injectable } from '@nestjs/common';
2+
import { createMetadataDecorator } from '@seedcompany/nest';
23
import { DateTime } from 'luxon';
4+
import type { AbstractClass } from 'type-fest';
5+
import { type BaseMigration } from './base-migration.service';
36

47
export const DB_MIGRATION_KEY = 'ON_DB_INDEX';
58

6-
export const Migration = (isoTime: string) => {
7-
const dt = DateTime.fromISO(isoTime); // TODO validate, better error
8-
return applyDecorators(Injectable(), SetMetadata(DB_MIGRATION_KEY, dt));
9-
};
9+
export const MigrationVersion = createMetadataDecorator({
10+
key: DB_MIGRATION_KEY,
11+
setter: (isoTime: string) => DateTime.fromISO(isoTime),
12+
types: ['class'],
13+
additionalDecorators: [Injectable()],
14+
});
15+
16+
export const Migration =
17+
(isoTime: string) => (cls: AbstractClass<BaseMigration>) =>
18+
MigrationVersion(isoTime)(cls);

src/core/database/migration/migration.module.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { DiscoveryModule } from '@golevelup/nestjs-discovery';
21
import { Module, type OnModuleInit } from '@nestjs/common';
32
import { ConfigService } from '../../config/config.service';
43
import { DatabaseService } from '../database.service';
@@ -7,7 +6,6 @@ import { MigrationRunner } from './migration-runner.service';
76
import { DatabaseMigrationCommand } from './migration.command';
87

98
@Module({
10-
imports: [DiscoveryModule],
119
providers: [MigrationRunner, MigrationDiscovery, DatabaseMigrationCommand],
1210
})
1311
export class MigrationModule implements OnModuleInit {

0 commit comments

Comments
 (0)