Oi Wilson! Tudo bem?
Realmente, o @Exclude()
do class-transformer
é utilizado para ocultar campos na serialização de respostas, mas ele não impede que esses campos sejam armazenados no cache do Redis.
Para resolver esse problema, uma abordagem seria manipular os dados antes de armazená-los no cache. Você pode fazer isso manualmente, removendo os campos indesejados antes de salvar no Redis. Aqui está um exemplo prático de como você pode fazer isso:
Interceptar a resposta antes de armazenar no Redis:
Você pode criar um interceptor que irá manipular a resposta antes de ela ser armazenada no Redis.
Remover campos indesejados:
No interceptor, você pode remover os campos que não deseja armazenar no cache.
Aqui está um exemplo de como você pode implementar isso:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable()
export class CacheInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(
map(data => {
// Remova os campos indesejados aqui
if (data && data.senha) {
delete data.senha;
}
return data;
}),
);
}
}
- Aplicar o interceptor:
Você pode aplicar esse interceptor globalmente ou apenas nos endpoints onde você utiliza o Redis.
import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
@Module({
providers: [
{
provide: APP_INTERCEPTOR,
useClass: CacheInterceptor,
},
],
})
export class AppModule {}
Dessa forma, você garante que os campos indesejados não sejam armazenados no Redis, contornando o problema que você mencionou.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.