import { HttpException, HttpStatus, Injectable } from "@nestjs/common"; import { InjectModel } from "@nestjs/sequelize"; import { Admin } from "./entities/admin.entity"; import * as bcrypt from "bcrypt"; import { JwtService } from "@nestjs/jwt"; import { ConfigService } from "@nestjs/config"; @Injectable() export class AdminService { constructor( @InjectModel(Admin) private readonly adminModel: typeof Admin, private readonly jwtService: JwtService, private readonly configService: ConfigService, ) {} async register(email: string, password: string): Promise<Admin> { try { if (!email) { throw new HttpException("Email should be entered.", HttpStatus.BAD_REQUEST); } if (!password) { throw new HttpException("Password should be entered.", HttpStatus.BAD_REQUEST); } const existingAdmin = await this.adminModel.findOne({ where: { email } }); if (existingAdmin) { throw new HttpException("Email is already registered.", HttpStatus.CONFLICT); } const hashedPassword = await bcrypt.hash(password, 10); const admin = await this.adminModel.create({ email, password: hashedPassword, role: "admin", }); return admin; } catch (error) { if (error instanceof HttpException) { throw error; } throw new HttpException("An error occurred during registration.", HttpStatus.INTERNAL_SERVER_ERROR); } } async login(email: string, password: string): Promise<{ token: string }> { try { const admin = await this.adminModel.findOne({ where: { email } }); if (!admin) { throw new HttpException("Invalid email or password", HttpStatus.UNAUTHORIZED); } const isValidPassword = await bcrypt.compare(password, admin.password); if (!isValidPassword) { throw new HttpException("Invalid email or password", HttpStatus.UNAUTHORIZED); } const token = this.jwtService.sign( { id: admin.id, role: admin.role }, { secret: this.configService.get<string>("JWT_SECRET"), expiresIn: this.configService.get<string | number>("JWT_EXPIRES") || "1h", }, ); return { token }; } catch (error) { console.log(error); throw new HttpException("An error occurred during login.", HttpStatus.INTERNAL_SERVER_ERROR); } } }