@@ -14,6 +14,18 @@ import { signToken } from '../utils/jwt.js';
1414export async function register ( req , res , next ) {
1515 try {
1616 // Your code here
17+
18+ const { name, email, password} = req . body
19+ const isUserAlreadyExist = await User . findOne ( { email} )
20+
21+ if ( isUserAlreadyExist ) {
22+ res . status ( 409 ) . json ( { error : { message : "Email already exists" } } )
23+ } else {
24+ const user = ( await User . create ( { name, email, password} ) ) . toObject ( )
25+ delete user . password
26+
27+ res . status ( 201 ) . json ( { user} )
28+ }
1729 } catch ( error ) {
1830 next ( error ) ;
1931 }
@@ -33,6 +45,17 @@ export async function register(req, res, next) {
3345export async function login ( req , res , next ) {
3446 try {
3547 // Your code here
48+ const { email, password} = req . body
49+ const user = await User . findOne ( { email} ) . select ( "+password" )
50+ if ( ! user ) return res . status ( 401 ) . json ( { error : { message : "Invalid credentials" } } )
51+ const isPasswordCorrect = await bcrypt . compare ( password , user . password )
52+ if ( ! isPasswordCorrect ) return res . status ( 401 ) . json ( { error : { message : "Invalid credentials" } } )
53+
54+ const token = signToken ( { userId : user . _id , email : user . email , role : user . role } )
55+ const userCopy = user . toObject ( )
56+ delete userCopy . password
57+
58+ return res . status ( 200 ) . json ( { token, user : userCopy } )
3659 } catch ( error ) {
3760 next ( error ) ;
3861 }
@@ -47,6 +70,7 @@ export async function login(req, res, next) {
4770export async function me ( req , res , next ) {
4871 try {
4972 // Your code here
73+ return res . status ( 200 ) . json ( { user : req . user } )
5074 } catch ( error ) {
5175 next ( error ) ;
5276 }
0 commit comments