♻️ refactor: rewrite OAuth provision business logic for new user schema
This commit is contained in:
@ -0,0 +1,28 @@
|
||||
import { AppError } from "../../../../helpers/error/instances/app";
|
||||
import { prisma } from "../../../../utils/databases/prisma/connection";
|
||||
import { createUserViaOauth } from "../../../user/user.types";
|
||||
|
||||
export const createUserWithOAuthCredentialsRepository = async (payload: createUserViaOauth) => {
|
||||
try {
|
||||
const { oauthProvider, ...userData } = payload;
|
||||
return await prisma.user.create({
|
||||
data: {
|
||||
...userData,
|
||||
oauth_accounts: {
|
||||
create: {
|
||||
provider_name: oauthProvider.providerName,
|
||||
provider_sub: oauthProvider.sub,
|
||||
provider_token: oauthProvider.token,
|
||||
refresh_token: oauthProvider.refreshToken,
|
||||
expires_at: oauthProvider.expiresAt,
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
create: {},
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
throw new AppError(500, "Error creating user with OAuth credentials", error);
|
||||
}
|
||||
};
|
||||
@ -5,6 +5,7 @@ import { createUserViaOauth } from "../../../user/user.types";
|
||||
import { createUserService } from "../../../user/services/internal/createUser.service";
|
||||
import { AppError } from "../../../../helpers/error/instances/app";
|
||||
import { findAuthIdentityByEmailAndProviderRepository } from "../../repositories/READ/findAuthIdentityByEmailAndProvider.repository";
|
||||
import { createUserWithOAuthCredentialsRepository } from "../../repositories/WRITE/createUserWithOAuthCredentials.repository";
|
||||
|
||||
export const OAuthUserProvisionService = async (payload: createUserViaOauth, userHeaderInfo: UserHeaderInformation) => {
|
||||
try {
|
||||
@ -18,7 +19,7 @@ export const OAuthUserProvisionService = async (payload: createUserViaOauth, use
|
||||
return await createUserSessionService(checkExistingUser.id, userHeaderInfo);
|
||||
} else if (!checkExistingUser) {
|
||||
// No user with this email, create new user
|
||||
const createdUser = await createUserService(payload);
|
||||
const createdUser = await createUserWithOAuthCredentialsRepository(payload);
|
||||
return await createUserSessionService(createdUser.id, userHeaderInfo);
|
||||
}
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ export interface createUserViaRegisterInput {
|
||||
}
|
||||
export interface createUserViaOauth extends createUserViaRegisterInput {
|
||||
oauthProvider: {
|
||||
providerName: string;
|
||||
providerName: "google" | "github";
|
||||
sub: string;
|
||||
token: string;
|
||||
refreshToken?: string;
|
||||
|
||||
@ -1,36 +1,28 @@
|
||||
import { Prisma } from "@prisma/client";
|
||||
import { ErrorForwarder } from "../../../helpers/error/instances/forwarder";
|
||||
import { userSessionModel } from "../userSession.model";
|
||||
import { generateUUIDv7 } from "../../../helpers/databases/uuidv7";
|
||||
|
||||
export const createUserSessionRepository = async (
|
||||
data: Omit<Prisma.UserSessionUncheckedCreateInput, "id">,
|
||||
) => {
|
||||
export const createUserSessionRepository = async (data: Omit<Prisma.UserSessionUncheckedCreateInput, "id">) => {
|
||||
try {
|
||||
return await userSessionModel.create({
|
||||
data: {
|
||||
id: generateUUIDv7(),
|
||||
...data,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
isAuthenticated: true,
|
||||
validUntil: true,
|
||||
browser_name: true,
|
||||
ip_login: true,
|
||||
valid_until: true,
|
||||
user: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true,
|
||||
fullname: true,
|
||||
username: true,
|
||||
avatar: true,
|
||||
birthDate: true,
|
||||
bioProfile: true,
|
||||
preference: {
|
||||
omit: {
|
||||
updatedAt: true,
|
||||
createdAt: true,
|
||||
},
|
||||
},
|
||||
datebirth: true,
|
||||
bio: true,
|
||||
preferences: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -29,7 +29,7 @@ export const createUserSessionService = async (userId: string, userHeaderInfo: U
|
||||
await createUserSessionInRedisService({
|
||||
userId,
|
||||
sessionId: createUserSession.id,
|
||||
validUntil: createUserSession.validUntil,
|
||||
validUntil: createUserSession.valid_until,
|
||||
});
|
||||
|
||||
// create a jwt token with a payload containing the created user session, then return jwt
|
||||
|
||||
@ -9,4 +9,7 @@ const pool = new pg.Pool({
|
||||
});
|
||||
|
||||
const adapter = new PrismaPg(pool);
|
||||
export const prisma = new PrismaClient({ adapter });
|
||||
export const prisma = new PrismaClient({
|
||||
adapter,
|
||||
log: process.env.ENABLE_PRISMA_LOG === "true" ? ["query", "error", "warn", "info"] : [],
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user