import { Injectable, ForbiddenException } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from './user.entity'; import * as bcrypt from 'bcrypt'; @Injectable() export class AuthService { constructor( @InjectRepository(User) private usersRepository: Repository, private jwtService: JwtService, ) { } async validateUser(login: string, password: string): Promise { const user = await this.usersRepository.findOne({ where: { login } }); if (user && user.password === password) { const { password, ...result } = user; return { ...result, role: user.role }; } return null; } async login(user: any) { const payload = { username: user.login, sub: user.id, role: user.role }; return { access_token: this.jwtService.sign(payload), }; } async getAllUsers(): Promise { return this.usersRepository.find(); } async createUser(login: string, password: string, role: 'user' | 'admin' = 'user'): Promise { // const hashedPassword = await bcrypt.hash(password, 10); const user = this.usersRepository.create({ login, password, //hashedPassword, role }); return this.usersRepository.save(user); } async deleteUser(id: number): Promise { const user = await this.usersRepository.findOne({ where: { id } }); if (user && user.role === 'admin') { throw new ForbiddenException('Cannot delete admin user'); } await this.usersRepository.delete(id); } async isAdmin(userId: number): Promise { const user = await this.usersRepository.findOne({ where: { id: userId } }); return user?.role === 'admin'; } }