mikheevm
mikheevm

Reputation: 711

How can I use service in a helper class in nest.js?

I import the redis module in app.module.ts file:

@Module({
  imports: [
    TypegooseModule.forRoot('mongodb://mongo:27017/test', {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useCreateIndex: true,
    }),
    RedisModule.register({ url: 'redis://sessions' }),
    UsersModule,
    AuthModule,
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

I would like to create a helper class SessionManager that would manage user's sessions (store, update, delete them in Redis), e.g something like this:

import { RedisService } from 'nestjs-redis';
import { User } from 'src/users/schemas/user.schema';
import { IUserSessions } from '../interfaces/Session.interface';

class SessionManager {
  constructor(private redisService: RedisService) {}

  saveUserSession(user: User, userAgent: string) {}

  static getSessionsByUserId(userId: string): IUserSessions {
    const client = this.redisService.getClient()
    const sessions = client.hmgetall(userId)

    return sessions
  }
}

export default SessionManager

and use it in my auth.service.ts. How do I do that? Does it have to be represented as some Nest.js entity (module or provider)?

Upvotes: 4

Views: 5493

Answers (1)

mikheevm
mikheevm

Reputation: 711

Ended up creating a separate sessions module, adding my service as a Provider and exporting it, then using it in my desired module:

import { Module } from '@nestjs/common';
import { SessionsService } from './sessions.service';

@Module({
  providers: [SessionsService],
  exports: [SessionsService]
})
export class SessionsModule {}

Upvotes: 1

Related Questions