👔 set redis cache and jwt encode
Set session data in Redis to reduce load on the main database and increase the speed of JWT token validation.
This commit is contained in:
@ -8,6 +8,19 @@ export const createUserSessionRepository = async (
|
||||
try {
|
||||
return await userSessionModel.create({
|
||||
data,
|
||||
include: {
|
||||
user: {
|
||||
omit: {
|
||||
password: true,
|
||||
providerToken: true,
|
||||
providerPayload: true,
|
||||
deletedAt: true,
|
||||
},
|
||||
include: {
|
||||
preference: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
ErrorForwarder(error);
|
||||
|
||||
@ -2,6 +2,8 @@ import { Prisma } from "@prisma/client";
|
||||
import { UserHeaderInformation } from "../../../helpers/http/userHeader/getUserHeaderInformation/types";
|
||||
import { ErrorForwarder } from "../../../helpers/error/instances/forwarder";
|
||||
import { createUserSessionRepository } from "../repositories/createUserSession.repository";
|
||||
import { redis } from "../../../utils/databases/redis/connection";
|
||||
import { jwtEncode } from "../../../helpers/http/jwt/encode";
|
||||
|
||||
export const createUserSessionService = async (
|
||||
userId: string,
|
||||
@ -9,7 +11,7 @@ export const createUserSessionService = async (
|
||||
) => {
|
||||
try {
|
||||
const generateTokenExpirationDate =
|
||||
Date.now() + Number(process.env.SESSION_EXPIRE!) * 1000;
|
||||
Date.now() + Number(process.env.SESSION_EXPIRE) * 1000;
|
||||
|
||||
const constructData = {
|
||||
userId,
|
||||
@ -21,7 +23,17 @@ export const createUserSessionService = async (
|
||||
validUntil: new Date(generateTokenExpirationDate),
|
||||
} as Prisma.UserSessionUncheckedCreateInput;
|
||||
|
||||
return createUserSessionRepository(constructData);
|
||||
const createUserSession = await createUserSessionRepository(constructData);
|
||||
|
||||
const createRedisKey = `${process.env.APP_NAME}:users:${userId}:sessions:${createUserSession.id}`;
|
||||
await redis.hset(createRedisKey, {
|
||||
userId,
|
||||
sessionId: createUserSession.id,
|
||||
validUntil: createUserSession.validUntil,
|
||||
});
|
||||
await redis.expire(createRedisKey, Number(process.env.SESSION_EXPIRE));
|
||||
|
||||
return jwtEncode(createUserSession);
|
||||
} catch (error) {
|
||||
ErrorForwarder(error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user