import { Injectable, UnauthorizedException } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { JwtService } from '@nestjs/jwt'; import * as bcrypt from 'bcrypt'; import { PrismaService } from '../prisma/prisma.service'; import { LoginDto } from './dto/login.dto'; @Injectable() export class AuthService { constructor( private readonly prisma: PrismaService, private readonly jwt: JwtService, private readonly config: ConfigService, ) {} async login(dto: LoginDto) { const user = await this.prisma.user.findUnique({ where: { email: dto.email.toLowerCase() }, }); if (!user || !user.isActive) { throw new UnauthorizedException('ایمیل یا رمز عبور نادرست است'); } const ok = await bcrypt.compare(dto.password, user.passwordHash); if (!ok) { throw new UnauthorizedException('ایمیل یا رمز عبور نادرست است'); } const payload = { sub: user.id, email: user.email, role: user.role, }; return { accessToken: await this.jwt.signAsync(payload), user: { id: user.id, email: user.email, name: user.name, role: user.role, }, }; } async me(userId: string) { const user = await this.prisma.user.findUnique({ where: { id: userId }, select: { id: true, email: true, name: true, role: true, isActive: true, createdAt: true, }, }); if (!user || !user.isActive) { throw new UnauthorizedException(); } return user; } }