👔 add create account in provision

Add logic to create a new account when provisioning if not yet registered.
This commit is contained in:
Rafi Arrafif
2025-08-30 22:41:42 +07:00
parent 28d2ddad31
commit bf35af294e
5 changed files with 49 additions and 21 deletions

View File

@ -46,13 +46,18 @@ export const googleCallbackService = async (
return await OAuthUserProvisionService(
{
providerName: "google",
openId: userData.sub,
provider: "google",
providerId: userData.sub,
providerToken: accessToken,
providerPayload: userData,
email: userData.email,
username: `goo_${userData.sub}`,
name: userData.name,
avatar: userData.picture,
password: Math.random()
.toString(36)
.slice(2, 16),
},
userData,
userHeaderInfo
);
} catch (error) {

View File

@ -3,22 +3,15 @@ import { UserHeaderInformation } from "../../../../helpers/http/userHeader/getUs
import { findUserService } from "../../../user/services/internal/findUser.service";
import { createUserSessionService } from "../../../userSession/services/createUserSession.service";
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
import { createUserViaOauth } from "../../../user/user.types";
import { createUserService } from "../../../user/services/internal/createUser.service";
export const OAuthUserProvisionService = async (
payload: {
providerName: string;
openId: string;
email: string;
username?: string;
name: string;
avatar?: string;
bio?: string;
},
providerRawCallback: unknown,
payload: createUserViaOauth,
userHeaderInfo: UserHeaderInformation
) => {
try {
const providerId = `${payload.providerName}_${payload.openId}`;
const providerId = payload.providerId;
const findUserResult = (await findUserService({
identifier: providerId,
queryTarget: "providerId",
@ -28,12 +21,8 @@ export const OAuthUserProvisionService = async (
if (findUserResult) {
return await createUserSessionService(findUserResult.id, userHeaderInfo);
} else {
/**
* === 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.
*/
const createdUser = await createUserService(payload);
return await createUserSessionService(createdUser.id, userHeaderInfo);
}
} catch (error) {
ErrorForwarder(error);