add:module:auth:*logout | add logout module and clean all session in system
This commit is contained in:
@ -0,0 +1,16 @@
|
||||
import { AppError } from "../../../helpers/error/instances/app";
|
||||
import { redis } from "../../../utils/databases/redis/connection";
|
||||
|
||||
export const deleteUserSessionFromCacheRepo = async (
|
||||
userId: string,
|
||||
sessionId: string
|
||||
) => {
|
||||
try {
|
||||
const deleteUserSessionFromCache = redis.del(
|
||||
`${process.env.APP_NAME}:users:${userId}:sessions:${sessionId}`
|
||||
);
|
||||
return deleteUserSessionFromCache;
|
||||
} catch (error) {
|
||||
throw new AppError(500, "Error while remove data from cache", error);
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,19 @@
|
||||
import { AppError } from "../../../helpers/error/instances/app";
|
||||
import { prisma } from "../../../utils/databases/prisma/connection";
|
||||
|
||||
export const deleteUserSessionFromDBRepo = async (sessionId: string) => {
|
||||
try {
|
||||
const deleteUserSessionFromCacheDB = await prisma.userSession.update({
|
||||
where: {
|
||||
id: sessionId,
|
||||
},
|
||||
data: {
|
||||
deletedAt: new Date(),
|
||||
},
|
||||
});
|
||||
|
||||
return deleteUserSessionFromCacheDB;
|
||||
} catch (error) {
|
||||
throw new AppError(500, "Error while remove delete from database", error);
|
||||
}
|
||||
};
|
||||
@ -19,7 +19,6 @@ export const findUniqueUserSessionInDBRepo = async (identifier: string) => {
|
||||
},
|
||||
},
|
||||
omit: {
|
||||
deletedAt: true,
|
||||
updatedAt: true,
|
||||
},
|
||||
});
|
||||
|
||||
@ -20,7 +20,6 @@ export const createUserSessionRepo = async (
|
||||
},
|
||||
omit: {
|
||||
lastOnline: true,
|
||||
deletedAt: true,
|
||||
createdAt: true,
|
||||
updatedAt: true,
|
||||
},
|
||||
|
||||
@ -8,7 +8,7 @@ export const storeUserSessionToCacheRepo = async (
|
||||
) => {
|
||||
try {
|
||||
await redis.set(
|
||||
`${process.env.app_name}:users:${userSession.userId}:sessions:${userSession.id}`,
|
||||
`${process.env.APP_NAME}:users:${userSession.userId}:sessions:${userSession.id}`,
|
||||
String(userSession.validUntil),
|
||||
"EX",
|
||||
timeExpires
|
||||
|
||||
@ -7,7 +7,7 @@ export const checkUserSessionInCacheService = async (
|
||||
) => {
|
||||
try {
|
||||
// Construct the Redis key name using the userId and sessionId
|
||||
const redisKeyName = `${process.env.app_name}:users:${userId}:sessions:${sessionId}`;
|
||||
const redisKeyName = `${process.env.APP_NAME}:users:${userId}:sessions:${sessionId}`;
|
||||
|
||||
// Check if the user session exists in Redis
|
||||
const userSessionInRedis = await checkUserSessionInCacheRepo(redisKeyName);
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
import { ErrorForwarder } from "../../../helpers/error/instances/forwarder";
|
||||
import { JWTAuthToken } from "../../../helpers/http/jwt/decode/types";
|
||||
import { deleteUserSessionFromCacheRepo } from "../repositories/deleteUserSessionFromCache.repository";
|
||||
import { deleteUserSessionFromDBRepo } from "../repositories/deleteUserSessionFromDB.repository";
|
||||
|
||||
export const deleteUserSessionInCacheAndDBService = async (
|
||||
jwtToken: JWTAuthToken
|
||||
) => {
|
||||
try {
|
||||
const userId = jwtToken.userId;
|
||||
const sessionId = jwtToken.id;
|
||||
|
||||
await deleteUserSessionFromCacheRepo(userId, sessionId);
|
||||
const deleteUserSessionFromDB = await deleteUserSessionFromDBRepo(
|
||||
sessionId
|
||||
);
|
||||
return deleteUserSessionFromDB;
|
||||
} catch (error) {
|
||||
ErrorForwarder(
|
||||
error,
|
||||
500,
|
||||
"Delete user session service had encountered error"
|
||||
);
|
||||
}
|
||||
};
|
||||
@ -10,6 +10,7 @@ export const getUserSessionFromDBService = async (identifier: string) => {
|
||||
if (
|
||||
!userSession ||
|
||||
!userSession.isAuthenticated ||
|
||||
userSession.deletedAt ||
|
||||
new Date(userSession.validUntil) < new Date()
|
||||
)
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user