11const JWT = require("jsonwebtoken")
22const bcrypt = require("bcrypt")
33const crypto = require("crypto")
4+
45const User = require("./../models/user.model");
56const Token = require("./../models/token.model");
7+ const MailServ = require("./../services/mail.service");
68const CustomError = require("./../utils/custom-error");
7- const { JWT_SECRET, BCRYPT_SALT, url } = require("./../config")
9+ const { JWT_SECRET, BCRYPT_SALT, url } = require("./../config");
10+
811
912class AuthService {
13+ // User sign up
1014 async signup(data) {
1115 let user = await User.findOne({ email: data.email })
1216 if (user) throw new CustomError("Email already exists");
@@ -15,14 +19,19 @@ class AuthService {
1519 const token = JWT.sign({ id: user._id, role: user.role }, JWT_SECRET);
1620 await user.save();
1721
22+ // Request email verification
23+ await this.RequestEmailVerification(user.email)
24+
1825 return data = {
1926 uid: user._id,
2027 email: user.email,
2128 role: user.role,
29+ verified: user.isVerified,
2230 token: token
2331 };
2432 }
2533
34+ // User sign in
2635 async signin(data) {
2736 if (!data.email) throw new CustomError("Email is required");
2837 if (!data.password) throw new CustomError("Password is required");
@@ -46,6 +55,7 @@ class AuthService {
4655 };
4756 }
4857
58+ // Update user password
4959 async updatePassword(userId, data) {
5060 const user = await User.findOne({ _id: userId });
5161 if (!user) throw new CustomError("User dose not exist")
@@ -64,6 +74,7 @@ class AuthService {
6474 return
6575 }
6676
77+ // Sends a verification mail to user email
6778 async RequestEmailVerification(email) {
6879 const user = await User.findOne({ email })
6980 if (!user) throw new CustomError("Email does not exist")
@@ -83,16 +94,19 @@ class AuthService {
8394
8495 const link = `${url.CLIENT_URL}/email-verification?uid=${user._id}&verifyToken=${verifyToken}`
8596
86- //send Mail
87- return link
97+ // Send Mail
98+ await new MailServ(user).sendEmailVerificationMail(link)
99+
100+ return
88101 }
89102
103+ // Verify user
90104 async VerifyEmail(data) {
91105 const { userId, verifyToken } = data
92106
93107 const user = await User.findOne({ _id: userId })
94- if(!user) throw new CustomError("User does not exist")
95- if(user.isVerified) throw new CustomError("Email is already verified")
108+ if (!user) throw new CustomError("User does not exist")
109+ if (user.isVerified) throw new CustomError("Email is already verified")
96110
97111 let VToken = await Token.findOne({ userId })
98112 if (!VToken) throw new CustomError("Invalid or expired password reset token")
@@ -110,6 +124,7 @@ class AuthService {
110124 return
111125 }
112126
127+ // Sends a reset password mail to user email
113128 async RequestPasswordReset(email) {
114129 const user = await User.findOne({ email })
115130 if (!user) throw new CustomError("Email does not exist")
@@ -128,10 +143,13 @@ class AuthService {
128143
129144 const link = `${url.CLIENT_URL}/reset-password?uid=${user._id}&resetToken=${resetToken}`
130145
131- //send mail
132- return link
146+ // Send Mail
147+ await new MailServ(user).sendPasswordResetMail(link)
148+
149+ return
133150 }
134151
152+ // Resets user password
135153 async resetPassword(data) {
136154 const { userId, resetToken, password } = data
137155
@@ -148,10 +166,10 @@ class AuthService {
148166 { $set: { password: hash } },
149167 { new: true })
150168
151- await RToken.deleteOne()
169+ await RToken.deleteOne()
152170
153171 return
154172 }
155173}
156174
157- module.exports = new AuthService();
175+ module.exports = new AuthService();
0 commit comments