fix: fixed all issues raised in initial PR review

This commit is contained in:
Balu Babu
2023-01-30 18:55:53 +05:30
parent a8d50223aa
commit 3afc89db6b
21 changed files with 6640 additions and 152 deletions

View File

@@ -74,11 +74,11 @@ describe('findUserById', () => {
});
});
describe('createUserMagic', () => {
describe('createUserViaMagicLink', () => {
test('should successfully create user and account for magic-link given valid inputs', async () => {
mockPrisma.user.create.mockResolvedValueOnce(user);
const result = await userService.createUserMagic(
const result = await userService.createUserViaMagicLink(
'dwight@dundermifflin.com',
);
expect(result).toEqual(user);

View File

@@ -19,8 +19,8 @@ export class UserService {
/**
* Find User with given email id
*
* @param {string} email User's email
* @returns {Promise<O.None | O.Some<User>>} Option of found User
* @param email User's email
* @returns Option of found User
*/
async findUserByEmail(email: string) {
try {
@@ -38,8 +38,8 @@ export class UserService {
/**
* Find User with given ID
*
* @param {string} userUid User ID
* @returns {Promise<O.None | O.Some<User>>} Option of found User
* @param userUid User ID
* @returns Option of found User
*/
async findUserById(userUid: string) {
try {
@@ -54,13 +54,37 @@ export class UserService {
}
}
/**
* Update User with new generated hashed refresh token
*
* @param refreshTokenHash Hash of newly generated refresh token
* @param userUid User uid
* @returns Either of User with updated refreshToken
*/
async UpdateUserRefreshToken(refreshTokenHash: string, userUid: string) {
try {
const user = await this.prisma.user.update({
where: {
uid: userUid,
},
data: {
refreshToken: refreshTokenHash,
},
});
return E.right(user);
} catch (error) {
return E.left(USER_NOT_FOUND);
}
}
/**
* Create a new User when logged in via a Magic Link
*
* @param {string} email User's Email
* @returns {Promise<User>} Created User
* @param email User's Email
* @returns Created User
*/
async createUserMagic(email: string) {
async createUserViaMagicLink(email: string) {
const createdUser = await this.prisma.user.create({
data: {
email: email,
@@ -79,23 +103,30 @@ export class UserService {
/**
* Create a new User when logged in via a SSO provider
*
* @param {string} accessToken User's access token generated by providers
* @param {string} refreshToken User's refresh token generated by providers
* @param {any} profile Data received from SSO provider on the users account
* @returns {Promise<User>} Created User
* @param accessTokenSSO User's access token generated by providers
* @param refreshTokenSSO User's refresh token generated by providers
* @param profile Data received from SSO provider on the users account
* @returns Created User
*/
async createUserSSO(accessToken: string, refreshToken: string, profile) {
async createUserSSO(
accessTokenSSO: string,
refreshTokenSSO: string,
profile,
) {
const userDisplayName = !profile.displayName ? null : profile.displayName;
const userPhotoURL = !profile.photos ? null : profile.photos[0].value;
const createdUser = await this.prisma.user.create({
data: {
displayName: !profile.displayName ? null : profile.displayName,
displayName: userDisplayName,
email: profile.emails[0].value,
photoURL: !profile.photos ? null : profile.photos[0].value,
photoURL: userPhotoURL,
accounts: {
create: {
provider: profile.provider,
providerAccountId: profile.id,
providerRefreshToken: refreshToken,
providerAccessToken: accessToken,
providerRefreshToken: refreshTokenSSO,
providerAccessToken: accessTokenSSO,
},
},
},
@@ -107,11 +138,11 @@ export class UserService {
/**
* Create a new Account for a given User
*
* @param {AuthUser} user User object
* @param {string} accessToken User's access token generated by providers
* @param {string} refreshToken User's refresh token generated by providers
* @param {any} profile Data received from SSO provider on the users account
* @returns {Promise<Account>} Created Account
* @param user User object
* @param accessToken User's access token generated by providers
* @param refreshToken User's refresh token generated by providers
* @param profile Data received from SSO provider on the users account
* @returns Created Account
*/
async createProviderAccount(
user: AuthUser,
@@ -139,9 +170,9 @@ export class UserService {
/**
* Update User displayName and photoURL
*
* @param {AuthUser} user User object
* @param {any} profile Data received from SSO provider on the users account
* @returns {Promise<E.Right<User> | E.Left<"user/not_found">>} Updated user object
* @param user User object
* @param profile Data received from SSO provider on the users account
* @returns Updated user object
*/
async updateUserDetails(user: AuthUser, profile) {
try {