Skip to content

Commit 1103f26

Browse files
KalleVsamarpanB
authored andcommitted
fix(sequelize): init Sequelize instance in constructor
This resolves initialization errors in Loopback 4 observers attempting to use repositories extending the Sequelize CRUD repository. Signed-off-by: KalleV <kvirtaneva@gmail.com>
1 parent fde4744 commit 1103f26

4 files changed

Lines changed: 32 additions & 5 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './test.observer';
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import {lifeCycleObserver, type LifeCycleObserver} from '@loopback/core';
2+
import {repository} from '@loopback/repository';
3+
import {UserRepository} from '../repositories';
4+
5+
/**
6+
* Test observer for validating that the Sequelize repositories are available in Loopback Observers during server startup.
7+
*/
8+
@lifeCycleObserver('test')
9+
export class TestObserver implements LifeCycleObserver {
10+
constructor(
11+
@repository(UserRepository)
12+
private userRepository: UserRepository,
13+
) {}
14+
15+
async start(): Promise<void> {
16+
try {
17+
await this.userRepository.find();
18+
} catch (error) {
19+
// For the repository tests, the database schema is not created until after the server is initialized:
20+
// extensions/sequelize/src/__tests__/integration/repository.integration.ts
21+
if (!error.message.includes('no such table: User')) {
22+
throw error;
23+
}
24+
}
25+
}
26+
}

extensions/sequelize/src/__tests__/integration/repository.integration.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,6 +1114,7 @@ describe('Sequelize CRUD Repository (integration)', () => {
11141114
'task.controller',
11151115
'scoped-task.controller',
11161116
],
1117+
observers: ['index', 'test.observer'],
11171118
};
11181119

11191120
const copyFilePromises: Array<Promise<unknown>> = [];

extensions/sequelize/src/sequelize/sequelize.datasource.base.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,7 @@ export class SequelizeDataSource implements LifeCycleObserver {
4545
} is not supported.`,
4646
);
4747
}
48-
}
4948

50-
sequelize?: Sequelize;
51-
sequelizeConfig: SequelizeOptions;
52-
async init(): Promise<void> {
53-
const {config} = this;
5449
const {
5550
connector,
5651
file,
@@ -86,7 +81,11 @@ export class SequelizeDataSource implements LifeCycleObserver {
8681
} else {
8782
this.sequelize = new Sequelize(this.sequelizeConfig);
8883
}
84+
}
8985

86+
sequelize: Sequelize;
87+
sequelizeConfig: SequelizeOptions;
88+
async init(): Promise<void> {
9089
await this.sequelize.authenticate();
9190
debug('Connection has been established successfully.');
9291
}

0 commit comments

Comments
 (0)