From c1adb767e7f9041a7cd5da75c8a97c92ad17239b Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Wed, 13 Aug 2025 11:13:19 +0700 Subject: [PATCH] :pencil: create documentation for user provision and authentication --- .../services/internal/OAuthUserProvision.service.ts | 13 ++++++------- .../services/createUserSession.service.ts | 5 +++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/modules/auth/services/internal/OAuthUserProvision.service.ts b/src/modules/auth/services/internal/OAuthUserProvision.service.ts index 1e29b0f..02af481 100644 --- a/src/modules/auth/services/internal/OAuthUserProvision.service.ts +++ b/src/modules/auth/services/internal/OAuthUserProvision.service.ts @@ -17,12 +17,6 @@ export const OAuthUserProvisionService = async ( providerRawCallback: unknown, userHeaderInfo: UserHeaderInformation ) => { - /** - * Create auth session if user already exist, - * create user account and give them auth session if not - * - * This is just example!! - */ try { const providerId = `${payload.providerName}_${payload.openId}`; const findUserResult = (await findUserService({ @@ -34,7 +28,12 @@ export const OAuthUserProvisionService = async ( if (findUserResult) { return await createUserSessionService(findUserResult.id, userHeaderInfo); } else { - return "Not Found"; + /** + * === TODO === + * If the user is not found, + * create a new one with the data obtained from the OAuth provider, + * then create a user session and authenticate it immediately. + */ } } catch (error) { ErrorForwarder(error); diff --git a/src/modules/userSession/services/createUserSession.service.ts b/src/modules/userSession/services/createUserSession.service.ts index 303e22a..cefb850 100644 --- a/src/modules/userSession/services/createUserSession.service.ts +++ b/src/modules/userSession/services/createUserSession.service.ts @@ -10,9 +10,11 @@ export const createUserSessionService = async ( userHeaderInfo: UserHeaderInformation ) => { try { + // set the date when the token will expire const generateTokenExpirationDate = Date.now() + Number(process.env.SESSION_EXPIRE) * 1000; + // construct all data to fit the user session input query const constructData = { userId, isAuthenticated: true, @@ -23,8 +25,10 @@ export const createUserSessionService = async ( validUntil: new Date(generateTokenExpirationDate), } as Prisma.UserSessionUncheckedCreateInput; + // insert user session into database const createUserSession = await createUserSessionRepository(constructData); + // caching user session data into Redis const createRedisKey = `${process.env.APP_NAME}:users:${userId}:sessions:${createUserSession.id}`; await redis.hset(createRedisKey, { userId, @@ -33,6 +37,7 @@ export const createUserSessionService = async ( }); await redis.expire(createRedisKey, Number(process.env.SESSION_EXPIRE)); + // create a jwt token with a payload containing the created user session, then return jwt return jwtEncode(createUserSession); } catch (error) { ErrorForwarder(error);