@@ -7,10 +7,11 @@ import jwt from "jsonwebtoken";
7
7
import { generateOTP , sendVerification } from "../utils/sendVerification.js" ;
8
8
import { Verification } from "../models/verification.js" ;
9
9
import validator from "validator" ;
10
+ import { CARequest } from "../models/ca_request.js" ;
10
11
11
12
export const signup = async ( req , res , next ) => {
12
13
try {
13
- const { name, email, password } = req . body ;
14
+ const { name, email, password, referralCode } = req . body ;
14
15
15
16
if ( ! validator . isLength ( name , { min : 2 , max : 50 } ) ) {
16
17
return next (
@@ -30,16 +31,12 @@ export const signup = async (req, res, next) => {
30
31
31
32
let user = await User . findOne ( { email } ) ;
32
33
if ( user ) {
33
- return next ( new ErrorHandler ( "User Already Exist " , 400 ) ) ;
34
+ return next ( new ErrorHandler ( "User Already Exists " , 400 ) ) ;
34
35
}
35
36
36
37
const hashedpswd = await bcrypt . hash ( password , 10 ) ;
37
38
38
- await sendVerification ( email , generateOTP ( ) , name , hashedpswd ) ;
39
- return res . status ( 200 ) . json ( {
40
- status : "success" ,
41
- message : "Email sent for verification" ,
42
- } ) ;
39
+ sendVerification ( email , generateOTP ( ) , name , hashedpswd , referralCode , res ) ;
43
40
} catch ( error ) {
44
41
next ( error ) ;
45
42
}
@@ -65,12 +62,17 @@ export const createGoogleUser = async (
65
62
66
63
export const googleCallback = async ( user , req , res , next ) => {
67
64
try {
68
- const frontendUrl = req . frontendUrl ;
65
+ const { frontendUrl, referralCode } = req ;
69
66
const email = user . emails [ 0 ] . value ;
70
67
let googleUser = await User . findOne ( { email } ) . select ( "+password" ) ;
71
68
72
- if ( ! googleUser . password )
69
+ if ( ! googleUser . password ) {
70
+ if ( referralCode ) {
71
+ googleUser . referredBy = referralCode
72
+ await googleUser . save ( ) ;
73
+ }
73
74
res . redirect ( `${ frontendUrl } setPassword?email=${ email } ` ) ;
75
+ }
74
76
else {
75
77
const refreshToken = await generateRefreshToken ( googleUser ) ;
76
78
const token = jwt . sign ( { _id : googleUser . _id } , process . env . JWT_SECRET , {
@@ -138,6 +140,16 @@ export const passwordSetter = async (req, res, next) => {
138
140
139
141
const hashedpswd = await bcrypt . hash ( password , 10 ) ;
140
142
143
+ const referralCode = user . referredBy ;
144
+ if ( referralCode ) {
145
+ const ca = await CARequest . findOne ( { referralCode } ) ;
146
+ if ( ca && ca . status === 'approved' ) {
147
+ const points = 10 ;
148
+ ca . points += points ;
149
+ await ca . save ( ) ;
150
+ }
151
+ }
152
+
141
153
user . password = hashedpswd ;
142
154
await user . save ( ) ;
143
155
@@ -203,10 +215,20 @@ export const verifyEmail = async (req, res, next) => {
203
215
const verification = await Verification . findOne ( { email } ) ;
204
216
if ( ! verification || verification . code != otp )
205
217
return next ( new ErrorHandler ( "OTP Invalid or Expired" , 400 ) ) ;
218
+
219
+ if ( verification . referralCode ) {
220
+ const ca = await CARequest . findOne ( { referralCode : verification . referralCode } ) ;
221
+ if ( ca && ca . status === "approved" ) {
222
+ const points = 10 ;
223
+ ca . points += points ;
224
+ await ca . save ( ) ;
225
+ }
226
+ }
206
227
const user = await User . create ( {
207
228
name : verification . name ,
208
229
email : verification . email ,
209
230
password : verification . password ,
231
+ referredBy : verification . referralCode
210
232
} ) ;
211
233
const refreshToken = await generateRefreshToken ( user ) ;
212
234
await Verification . deleteOne ( { email } ) ;
0 commit comments