Skip to content

Commit

Permalink
link social login with userModel
Browse files Browse the repository at this point in the history
  • Loading branch information
wayneleon1 committed May 6, 2024
1 parent b93afb9 commit 94d3c2e
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 114 deletions.
38 changes: 0 additions & 38 deletions src/controller/user.ts

This file was deleted.

25 changes: 22 additions & 3 deletions src/controller/userController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,31 @@ export const deleteAllUsers = async (req: Request, res: Response) => {

export const getAllUsers = async (req: Request, res: Response) => {
try {
// Find all users
const users = await userRepository.find();
// Return the users
return res.status(200).json(users);
} catch (error) {
// Return an error message if something goes wrong
return res.status(500).json({ message: 'Failed to fetch users' });
}
};

// Function to delete a user
export const deleteUser = async (req: Request, res: Response) => {
try {
const id: number = parseInt(req.params.id);

const recordToDelete = await userRepository.findOne({
where: { id },
});

if (!recordToDelete) {
return res.status(404).json({ error: 'Record not found.' });
}
await userRepository.remove(recordToDelete);

return res.status(200).json({ message: 'Record deleted successfully.' });
} catch (error) {
return res
.status(500)
.json({ error: 'An error occurred while deleting the record.' });
}
};
1 change: 0 additions & 1 deletion src/database/models/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export * from './userModel';
export * from './userSocial';
14 changes: 13 additions & 1 deletion src/database/models/userModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,21 @@ export class UserModel {
@Column()
email: string;

@Column()
@Column({ default: null })
password: string;

@Column({ default: null })
googleId: string;

@Column({ default: null })
facebookId: string;

@Column({ default: null })
picture: string;

@Column({ default: null })
provider: string;

@Column({ default: 'buyer' })
userType: 'vendor' | 'buyer';

Expand Down
28 changes: 0 additions & 28 deletions src/database/models/userSocial.ts

This file was deleted.

99 changes: 60 additions & 39 deletions src/middlewares/passport-setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import passport, { use } from 'passport';
import GooglePassport from 'passport-google-oauth20';
import FacebookPassport from 'passport-facebook';
import dbConnection from '../database';
import { UserSocial } from '../database/models';
import { UserModel } from '../database/models';
import dotenv from 'dotenv';
dotenv.config();

const userRepository = dbConnection.getRepository(UserSocial);
const userRepository = dbConnection.getRepository(UserModel);

passport.serializeUser((user: any, done) => {
done(null, user.id);
Expand All @@ -28,27 +28,32 @@ passport.use(
callbackURL: process.env.GOOGLE_CALLBACK_URL || '',
},
async (accessToken: any, refreshToken: any, profile: any, done: any) => {
// check if user is already exit in db
const existUser = await userRepository.findOneBy({
googleId: profile.id,
});
try {
// check if user is already exit in db
const existUser = await userRepository.findOneBy({
googleId: profile.id,
});

if (existUser) {
// already have the user
console.log('user already exist in db:', existUser);
done(null, existUser);
} else {
// if not , create the user in db
const user = new UserSocial();
user.firstName = profile.name.givenName;
user.lastName = profile.name.familyName;
user.email = profile.emails[0].value;
user.googleId = profile.id;
user.picture = profile.photos[0].value;
user.provider = profile.provider;
await userRepository.save(user);
console.log('User successfuly saved:', user);
done(null, user);
if (existUser) {
// already have the user
console.log('user already exist in db:', existUser);
done(null, existUser);
} else {
// if not , create a new user in db
const newUser = new UserModel({
firstName: profile.name.givenName,
lastName: profile.name.familyName,
email: profile.emails[0].value,
googleId: profile.id,
picture: profile.photos[0].value,
provider: profile.provider,
});
const user = await userRepository.save(newUser);
console.log('User successfully registered');
done(null, user);
}
} catch (error) {
console.log('error occured while registaring', error);
}
}
)
Expand All @@ -75,25 +80,41 @@ passport.use(
console.log('user already exist in db:', existUser);
done(null, existUser);
} else {
// if not , create the user in db
try {
// check if user is already exit in db
const existUser = await userRepository.findOneBy({
googleId: profile.id,
});

if (existUser) {
// already have the user
console.log('user already exist in db:', existUser);
done(null, existUser);
} else {
// if not , create a new user in db

// Here we have to check user email because there is people that register with facebook that never verify their email account and there is people that sign up with a phone number, in both those cases their emails will always be undefined.
let email = profile.email || profile.emails[0].value;
if (!email) {
console.log('this user has no email in his FB');
let err = { message: 'this user is missing an email' };
return done(err);
// Here we have to check user email because there is people that register with facebook that never verify their email account and there is people that sign up with a phone number, in both those cases their emails will always be undefined.
let email = profile.email || profile.emails[0].value;
if (!email) {
console.log('this user has no email in his FB');
let err = { message: 'this user is missing an email' };
return done(err);
}
const newUser = new UserModel({
firstName: profile.name.givenName,
lastName: profile.name.familyName,
email: email,
facebookId: profile.id,
picture: profile.photos[0].value,
provider: profile.provider,
});
const user = await userRepository.save(newUser);
console.log('User successfully registered');
done(null, user);
}
} catch (error) {
console.log('An error occurred while registering the user:', error);
}
const user = new UserSocial();
user.firstName = profile.name.givenName;
user.lastName = profile.name.familyName;
user.email = email;
user.facebookId = profile.id;
user.picture = profile.photos[0].value;
user.provider = profile.provider;
await userRepository.save(user);
console.log('User successfuly saved:', user);
done(null, user);
}
}
)
Expand Down
7 changes: 3 additions & 4 deletions src/routes/userRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@ import {
confirmEmail,
deleteAllUsers,
getAllUsers,
deleteUser,
} from '../controller/userController';
import { allUsers, deleteUser } from '../controller/user';

const route = Router();
route.post('/register', registerUser);
route.get('/getAllUsers', getAllUsers);
route.get('/confirm', confirmEmail);
route.delete('/deleteAllUsers', deleteAllUsers);
route.delete('/delete/:id', deleteUser);

route.get('/users', allUsers);
route.delete('/deleteAllUsers', deleteAllUsers);

export default route;

0 comments on commit 94d3c2e

Please sign in to comment.