1+ const db = require ( "../models" ) ;
2+ const User = db . user ;
3+ const bcrypt = require ( 'bcrypt' ) ;
4+ const jwt = require ( 'jsonwebtoken' ) ;
5+ const logger = require ( '../config/logger' ) ;
6+
7+
8+ const signUp = async ( req , res ) => {
9+ // user signup using email and password bcrypt
10+ const { firstname, lastname, username, email, password} = req . body ;
11+ const salt = bcrypt . genSaltSync ( 10 ) ;
12+ const hash = bcrypt . hashSync ( password , salt ) ;
13+ const user = {
14+ firstname,
15+ lastname,
16+ username,
17+ email,
18+ password : hash
19+ }
20+
21+ const [ row , created ] = await User . findOrCreate ( {
22+ where : { email : user . email } ,
23+ defaults : user ,
24+ } ) ;
25+ if ( created ) {
26+ res . send ( {
27+ "status" : "success" ,
28+ "message" : "User created successfully" ,
29+ data : row
30+ } )
31+ return ;
32+ }
33+ res . send ( {
34+ "status" : "error" ,
35+ "message" : "User already exists" ,
36+ "email" : row . email ,
37+ } )
38+ }
39+
40+ const signIn = async ( req , res ) => {
41+ // user signin using email and password bcrypt
42+ const { email, password} = req . body ;
43+ const user = await User . findOne ( { where : { email} } ) ;
44+ if ( user ) {
45+ const validPassword = bcrypt . compareSync ( password , user . password ) ;
46+ if ( validPassword ) {
47+ // generate jwt token for user
48+ const token = jwt . sign ( {
49+ id : user . id ,
50+ username : user . username ,
51+ email : user . email ,
52+ } , process . env . TOKEN_SECRET , {
53+ expiresIn : '1h'
54+ } ) ;
55+ logger . info ( `User ${ user . username } logged in successfully` ) ;
56+ res . send ( {
57+ "status" : "success" ,
58+ "message" : "User logged in successfully" ,
59+ "token" : token ,
60+ "data" : user
61+ } )
62+ return ;
63+ }
64+ }
65+ res . send ( {
66+ "status" : "error" ,
67+ "message" : "Invalid email or password" ,
68+ } )
69+ }
70+
71+
72+ const getAllUsers = async ( req , res ) => {
73+ const users = await User . findAll ( ) ;
74+ res . send ( {
75+ "status" : "success" ,
76+ "message" : "Users fetched successfully" ,
77+ "data" : users
78+ } ) ;
79+ }
80+
81+
82+ module . exports = {
83+ signUp,
84+ signIn,
85+ getAllUsers
86+ }
0 commit comments