import { Injectable, BadRequestException } from '@nestjs/common' import { PasswordService } from 'src/users/password.service' import { Token, TokenPayload } from './dto/token.dto' import { JwtService } from '@nestjs/jwt' import { ConfigService } from '@nestjs/config' import { UsersService } from 'src/users/users.service' import { CreateUserDto } from 'src/users/dto/create-user.dto' @Injectable() export class AuthService { constructor( private passwordService: PasswordService, private jwtService: JwtService, private configService: ConfigService, private userService: UsersService, ) {} async register(payload: CreateUserDto) { const user = await this.userService.createUser(payload) return this.generateTokens({ userId: user.id }) } async login(email: string, password: string) { const user = await this.userService.findUser({ email }) const passwordValid = await this.passwordService.validatePassword( password, user.password, ) if (!passwordValid) { throw new BadRequestException('Invalid password') } return this.generateTokens({ userId: user.id }) } private generateTokens(payload: TokenPayload): Token { const accessToken = this.jwtService.sign(payload, { secret: this.configService.get( 'JWT_ACCESS_SECRET', 'JWT_ACCESS_SECRET', ), expiresIn: '30min', }) const refreshToken = this.jwtService.sign(payload, { secret: this.configService.get( 'JWT_REFRESH_SECRET', 'JWT_REFRESH_SECRET', ), expiresIn: '7d', }) return { accessToken, refreshToken } } }