import { Injectable } from '@nestjs/common'; import { TypeOrmCrudService } from '@nestjsx/crud-typeorm'; import { User } from '../entities/user.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { hashPassword } from './password-to-hash.interceptor'; import { randomBytes } from 'crypto'; import { PasswordResetTokensService } from './password-reset-tokens.service'; import { MailerService } from '../mailer/mailer.service'; @Injectable() export class UsersService extends TypeOrmCrudService { constructor( @InjectRepository(User) public usersRepository: Repository, public passwordResetTokenService: PasswordResetTokensService, public mailerService: MailerService, ) { super(usersRepository); } async registerUser(req, userDto) { userDto.passwordHash = await hashPassword(randomBytes(32).toString('utf8')); const newUser: User = await this.createOne(req, userDto); const token = await this.passwordResetTokenService.repository.save({ user: newUser, }); this.mailerService.sendWelcomeEmail(newUser, token); return newUser; } markDeleted(id: number) { this.usersRepository.softDelete({ id }); return; } }