create use cases for auth

This commit is contained in:
andres
2023-06-15 23:10:07 +02:00
parent 612b2326f9
commit 131fec67de
20 changed files with 315 additions and 239 deletions

View File

@@ -0,0 +1,30 @@
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'
import { Logger } from '@nestjs/common'
import { UsersRepository } from '../../users/infrastructure/users.repository'
import jwt from 'jsonwebtoken'
export class LogoutCommand {
constructor(public readonly refreshToken: string) {}
}
@CommandHandler(LogoutCommand)
export class LogoutHandler implements ICommandHandler<LogoutCommand> {
constructor(private readonly usersRepository: UsersRepository) {}
private readonly logger = new Logger(LogoutHandler.name)
async execute(command: LogoutCommand) {
const token = command.refreshToken
const secretKey = process.env.JWT_SECRET_KEY
if (!secretKey) throw new Error('JWT_SECRET_KEY is not defined')
try {
const decoded: any = jwt.verify(token, secretKey)
return this.usersRepository.revokeToken(decoded.userId, token)
} catch (e) {
this.logger.log(`Decoding error: ${e}`)
return null
}
}
}