🚩 add provision flow in oauth
Create a flow where if the user logs in with a registered Google account, they are immediately authenticated, but if no account is found, create a new one.
This commit is contained in:
@ -0,0 +1,22 @@
|
||||
import { userModel } from "../../user.model";
|
||||
import {
|
||||
getUserDataIncludeOptions,
|
||||
getUserDataOptions,
|
||||
} from "../../user.types";
|
||||
|
||||
export const findUserByProviderIdRepository = async (
|
||||
providerId: string,
|
||||
include?: getUserDataOptions["include"]
|
||||
) => {
|
||||
return await userModel.findUnique({
|
||||
where: {
|
||||
providerId,
|
||||
},
|
||||
include: include
|
||||
? (Object.fromEntries(include.map((key) => [key, true])) as Record<
|
||||
getUserDataIncludeOptions,
|
||||
true
|
||||
>)
|
||||
: undefined,
|
||||
});
|
||||
};
|
||||
@ -4,12 +4,14 @@ import { AppError } from "../../../../helpers/error/instances/app";
|
||||
import { findUserByIdRepository } from "../../repositories/read/findUserById.repository";
|
||||
import { findUserByUsernameRepository } from "../../repositories/read/findUserByUsername.repository";
|
||||
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
|
||||
import { findUserByProviderIdRepository } from "../../repositories/read/findUserByProviderId.repository";
|
||||
|
||||
export const findUserService = async (payload: getUserDataService) => {
|
||||
try {
|
||||
// Define query target with the related repository
|
||||
const repositoryMap = {
|
||||
id: findUserByIdRepository,
|
||||
providerId: findUserByProviderIdRepository,
|
||||
email: findUserByEmailRepository,
|
||||
username: findUserByUsernameRepository,
|
||||
} as const;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
export interface getUserDataService {
|
||||
identifier: string;
|
||||
queryTarget: "id" | "email" | "username";
|
||||
queryTarget: "id" | "providerId" | "email" | "username";
|
||||
options: getUserDataOptions;
|
||||
}
|
||||
export interface getUserDataOptions {
|
||||
|
||||
Reference in New Issue
Block a user