fix: fixed all issues raised in initial PR review
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user