👔 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:
Rafi Arrafif
2025-08-13 10:48:48 +07:00
parent 6bdd5b6468
commit 1ebcc8d21d
2 changed files with 27 additions and 2 deletions

View File

@ -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);

View File

@ -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);
}