Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save alanfoandrade/fe3e19deaea9f76c82ed9deb1314a321 to your computer and use it in GitHub Desktop.
Save alanfoandrade/fe3e19deaea9f76c82ed9deb1314a321 to your computer and use it in GitHub Desktop.
import { injectable, inject } from 'tsyringe';
import path from 'path';
import AppError from '@shared/errors/AppError';
import IMailProvider from '@shared/container/providers/MailProvider/models/IMailProvider';
import IUsersRepository from '../repositories/IUsersRepository';
import IUserTokensRepository from '../repositories/IUserTokensRepository';
interface IRequest {
email: string;
}
@injectable()
class SendForgotPasswordEmailService {
constructor(
@inject('UsersRepository')
private usersRepository: IUsersRepository,
@inject('MailProvider')
private mailProvider: IMailProvider,
@inject('UserTokensRepository')
private userTokensRepository: IUserTokensRepository,
) {}
get key(): string {
return 'ForgotPasswordEmail';
}
public async execute({ email }: IRequest): Promise<void> {
const user = await this.usersRepository.findByEmail(email);
if (!user) {
throw new AppError('User does not exists.');
}
const { token } = await this.userTokensRepository.generate(user.id);
const forgotPasswordTemplate = path.resolve(
__dirname,
'..',
'views',
'forgot_password.hbs',
);
this.mailProvider.sendMail({
to: {
name: user.name,
email: user.email,
},
subject: '[GoBarber] Recuperação de senha',
templateData: {
file: forgotPasswordTemplate,
variables: {
name: user.name,
link: `${process.env.APP_WEB_URL}/reset-password?token=${token}`,
},
},
});
}
}
export default SendForgotPasswordEmailService;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment