Skip to content

Commit 8c678cd

Browse files
committed
refactor: streamline Redis integration and remove microservice queue adapter
- Removed the deprecated microservice queue adapter and related interfaces to simplify the codebase. - Updated Redis connection handling in the BullMQ adapter to utilize a more reliable options parsing method. - Refactored the SESAME_MS_BETA configuration handling, removing unnecessary complexity from the queue module. - Enhanced the lifecycle hooks service to skip unnecessary lifecycle events for operational state changes. - Improved the identity search functionality by integrating dynamic search fields and updating related components. - Updated Nuxt.js configuration to support new WebSocket proxy settings and loading bar defaults.
1 parent eef1f55 commit 8c678cd

25 files changed

Lines changed: 179 additions & 521 deletions

apps/api/.env.example

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# SESAME_LOG_LEVEL="info"
22
# SESAME_NAME_QUEUE="sesame"
3-
# SESAME_MS_BETA=1
43
SESAME_JWT_SECRET="zeaezazeaezazaeeazrftrqezfqfqszewfsqddfqsqsqsdqdsqdsqdzsdqzsdqzs"
54
# Docker (make dev) : hostname du conteneur Redis sur le réseau dev
65
SESAME_REDIS_URI="redis://sesame-redis:6379/0"

apps/api/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
"@nestjs/core": "^10.4.8",
2929
"@nestjs/event-emitter": "^3.0.1",
3030
"@nestjs/jwt": "^10.2.0",
31-
"@nestjs/microservices": "^10.4.16",
3231
"@nestjs/mongoose": "^10.1.0",
3332
"@nestjs/passport": "^10.0.3",
3433
"@nestjs/platform-express": "^10.4.8",
Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
import { RedisOptions } from 'ioredis';
22

3-
/** Options NestJS Redis transport (ioredis + retryAttempts/retryDelay). */
4-
export type RedisMicroserviceTransportOptions = RedisOptions & {
5-
retryAttempts?: number;
6-
retryDelay?: number;
7-
};
8-
93
/**
104
* Convertit SESAME_REDIS_URI en options ioredis (host/port/db) pour le transport Redis NestJS.
11-
* Plus fiable que `url` seul avec ClientsModule / createMicroservice.
5+
* Plus fiable que `url` seul.
126
*/
137
export function redisOptionsFromUri(uri: string, extra?: RedisOptions): RedisOptions {
148
const parsed = new URL(uri);
@@ -24,16 +18,3 @@ export function redisOptionsFromUri(uri: string, extra?: RedisOptions): RedisOpt
2418
...extra,
2519
};
2620
}
27-
28-
/** Options recommandées pour @nestjs/microservices (pub/sub Redis). */
29-
export function redisMicroserviceTransportOptions(uri: string): RedisMicroserviceTransportOptions {
30-
return {
31-
...redisOptionsFromUri(uri, {
32-
maxRetriesPerRequest: null,
33-
enableReadyCheck: true,
34-
lazyConnect: false,
35-
}),
36-
retryAttempts: 0,
37-
retryDelay: 0,
38-
};
39-
}

apps/api/src/_common/interfaces/sesame-job-event.interface.ts

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

apps/api/src/_common/queue/bullmq-queue.adapter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export class BullmqQueueAdapter implements SesameQueueAdapter {
4242

4343
this._queue = new Queue(queueName, { connection });
4444
this._queueEvents = new QueueEvents(queueName, { connection });
45+
await this._queueEvents.waitUntilReady();
4546
this._eventsEmitter = new BullmqQueueEventsEmitter(this._queueEvents);
4647
this._logger.log(`BullMQ queue "${queueName}" ready`);
4748
}

apps/api/src/_common/queue/microservice-queue.adapter.ts

Lines changed: 0 additions & 158 deletions
This file was deleted.
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
export const SESAME_QUEUE = Symbol('SESAME_QUEUE');
2-
export const SESAME_DAEMON_CLIENT = 'SESAME_DAEMON';
Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,26 @@
1-
import { DynamicModule, Global, Module } from '@nestjs/common';
2-
import { ConfigModule, ConfigService } from '@nestjs/config';
3-
import { ClientsModule, Transport } from '@nestjs/microservices';
4-
import { getRedisConnectionToken } from '@nestjs-modules/ioredis';
5-
import Redis from 'ioredis';
6-
import { redisMicroserviceTransportOptions } from '~/_common/functions/redis-options-from-uri';
7-
import { BullmqQueueAdapter } from './bullmq-queue.adapter';
8-
import { MicroserviceQueueAdapter } from './microservice-queue.adapter';
9-
import { SESAME_DAEMON_CLIENT, SESAME_QUEUE } from './sesame-queue.constants';
10-
import { SesameQueueAdapter } from '~/_common/interfaces/sesame-job.interface';
11-
import { ClientProxy } from '@nestjs/microservices';
1+
import { DynamicModule, Global, Module } from '@nestjs/common'
2+
import { ConfigModule, ConfigService } from '@nestjs/config'
3+
import { getRedisConnectionToken } from '@nestjs-modules/ioredis'
4+
import Redis from 'ioredis'
5+
import { BullmqQueueAdapter } from './bullmq-queue.adapter'
6+
import { SESAME_QUEUE } from './sesame-queue.constants'
7+
import { SesameQueueAdapter } from '~/_common/interfaces/sesame-job.interface'
128

139
@Global()
1410
@Module({})
1511
export class SesameQueueModule {
1612
public static register(): DynamicModule {
17-
const msBeta = process.env['SESAME_MS_BETA'] === '1';
18-
1913
return {
2014
module: SesameQueueModule,
21-
imports: msBeta
22-
? [
23-
ClientsModule.registerAsync([
24-
{
25-
name: SESAME_DAEMON_CLIENT,
26-
imports: [ConfigModule],
27-
inject: [ConfigService],
28-
useFactory: (config: ConfigService) => ({
29-
transport: Transport.REDIS,
30-
options: redisMicroserviceTransportOptions(config.get<string>('ioredis.uri')),
31-
}),
32-
},
33-
]),
34-
]
35-
: [],
15+
imports: [ConfigModule],
3616
providers: [
3717
{
3818
provide: SESAME_QUEUE,
39-
useFactory: (config: ConfigService, redis: Redis, client?: ClientProxy): SesameQueueAdapter => {
40-
if (msBeta) {
41-
return new MicroserviceQueueAdapter(client, config);
42-
}
43-
return new BullmqQueueAdapter(redis, config);
44-
},
45-
inject: msBeta
46-
? [ConfigService, getRedisConnectionToken(), SESAME_DAEMON_CLIENT]
47-
: [ConfigService, getRedisConnectionToken()],
19+
useFactory: (config: ConfigService, redis: Redis): SesameQueueAdapter => new BullmqQueueAdapter(redis, config),
20+
inject: [ConfigService, getRedisConnectionToken()],
4821
},
4922
],
5023
exports: [SESAME_QUEUE],
51-
};
24+
}
5225
}
5326
}

apps/api/src/app.module.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { MongooseModule, MongooseModuleOptions } from '@nestjs/mongoose';
99
import mongoose from 'mongoose';
1010
import { RedisModule } from '@nestjs-modules/ioredis';
1111
import { RedisOptions } from 'ioredis';
12+
import { redisOptionsFromUri } from '~/_common/functions/redis-options-from-uri';
1213
import { AppController } from './app.controller';
1314
import { AppService } from './app.service';
1415
import { RequestContextModule } from 'nestjs-request-context';
@@ -115,21 +116,25 @@ import { MfaGuard } from './_common/guards/mfa.guard';
115116
options: config.get<RedisOptions>('ioredis.options'),
116117
}),
117118
}),
118-
...(process.env['SESAME_MS_BETA'] !== '1'
119-
? [
120-
BullModule.forRootAsync({
121-
imports: [ConfigModule],
122-
inject: [ConfigService],
123-
useFactory: async (configService: ConfigService) => ({
124-
connection: {
125-
host: configService.get('ioredis.host'),
126-
port: configService.get('ioredis.port'),
127-
},
128-
blockingConnection: true,
129-
}),
130-
}),
131-
]
132-
: []),
119+
BullModule.forRootAsync({
120+
imports: [ConfigModule],
121+
inject: [ConfigService],
122+
useFactory: async (configService: ConfigService) => {
123+
const uri = configService.get<string>('ioredis.uri')
124+
const redisOptions = redisOptionsFromUri(uri)
125+
126+
return {
127+
connection: {
128+
host: redisOptions.host,
129+
port: redisOptions.port,
130+
...(redisOptions.username ? { username: redisOptions.username } : {}),
131+
...(redisOptions.password ? { password: redisOptions.password } : {}),
132+
...(typeof redisOptions.db === 'number' ? { db: redisOptions.db } : {}),
133+
},
134+
blockingConnection: true,
135+
}
136+
},
137+
}),
133138
SesameQueueModule.register(),
134139
AccessControlModule.forRootAsync({
135140
imports: [CoreModule],

apps/api/src/config.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ export const validationSchema = Joi.object({
4444
.string()
4545
.default('sesame'),
4646

47-
SESAME_MS_BETA: Joi
48-
.string()
49-
.valid('0', '1')
50-
.default('0'),
51-
5247
SESAME_HTTPS_ENABLED: Joi
5348
.string()
5449
.valid('0', '1', 'true', 'false', 'on', 'off')
@@ -215,8 +210,6 @@ export interface ConfigInstance {
215210
lang: string
216211
logLevel: string
217212
nameQueue: string
218-
/** Transport Redis microservice NestJS (remplace BullMQ côté API/daemon). */
219-
msBeta: boolean
220213
/** Si true, Express applique trust proxy (1 hop) pour les adresses IP client derrière un proxy. */
221214
trustProxy: boolean
222215
bodyParser: {
@@ -318,7 +311,6 @@ export default (): ConfigInstance => ({
318311
lang: process.env['LANG'] || 'en',
319312
logLevel: process.env['SESAME_LOG_LEVEL'] || 'info',
320313
nameQueue: process.env['SESAME_NAME_QUEUE'] || 'sesame',
321-
msBeta: process.env['SESAME_MS_BETA'] === '1',
322314
trustProxy: /^(1|true|on|yes)$/i.test(process.env['SESAME_TRUST_PROXY'] || ''),
323315
bodyParser: {
324316
limit: '500mb',

0 commit comments

Comments
 (0)