Skip to content

Commit 01a9df2

Browse files
Merge pull request #318 from Trendyol/room-expired
fix: room expiring bug
2 parents 5d22ddc + 5423444 commit 01a9df2

File tree

3 files changed

+41
-20
lines changed

3 files changed

+41
-20
lines changed

gurubu-backend/utils/groomings.js

+34-17
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ const groomingMode = {
6666
let rooms = [];
6767
const groomings = {};
6868

69-
const handleErrors = (errorFunctionName, roomID, socket) => {
69+
const handleErrors = (errorFunctionName, roomID, socket, isRoomExpired) => {
7070
if(!socket){
7171
console.log("Socket not found on handle join.", errorFunctionName, roomID, rooms);
7272
return null;
7373
}
74-
if (rooms && !rooms.some(room => room.roomID === roomID)) {
75-
console.log("Room is deleted, info shown to the user.", errorFunctionName, roomID);
74+
if ((rooms && !rooms.some(room => room.roomID === roomID)) || isRoomExpired) {
75+
console.log("Room is expired or deleted, info shown to the user.", errorFunctionName, roomID);
7676
socket.emit("encounteredError", {
7777
id: 1,
7878
message:
@@ -196,10 +196,17 @@ const removeUserFromOngoingGrooming = (roomID, userID) => {
196196
delete groomings[roomID].participants[userID];
197197
};
198198

199+
const checkIsRoomExpired = (roomID) => {
200+
const currentTime = new Date().getTime();
201+
const expiredRoomIDs = rooms.filter(room => room.expiredAt < currentTime).map(room => room.roomID);
202+
return expiredRoomIDs.includes(roomID);
203+
}
204+
199205
const updateParticipantsVote = (data, credentials, roomID, socket) => {
200206
const user = getCurrentUser(credentials, socket);
201-
if (!user) {
202-
return handleErrors("updateParticipantsVote", roomID, socket);
207+
const isRoomExpired = checkIsRoomExpired(roomID);
208+
if (!user || isRoomExpired) {
209+
return handleErrors("updateParticipantsVote", roomID, socket, isRoomExpired);
203210
}
204211

205212
const userLobbyData = groomings[user.roomID].participants[user.userID];
@@ -325,8 +332,9 @@ const calculateScore = (mode, participants, roomID) => {
325332

326333
const getResults = (credentials, roomID, socket) => {
327334
const user = getCurrentUser(credentials, socket);
328-
if (!user) {
329-
return handleErrors("getResults", roomID, socket);
335+
const isRoomExpired = checkIsRoomExpired(roomID);
336+
if (!user || isRoomExpired) {
337+
return handleErrors("getResults", roomID, socket, isRoomExpired);
330338
}
331339

332340
groomings[user.roomID].isResultShown = true;
@@ -337,8 +345,9 @@ const getResults = (credentials, roomID, socket) => {
337345

338346
const setIssues = (data, credentials, roomID, socket) => {
339347
const user = getCurrentUser(credentials, socket);
340-
if (!user) {
341-
return handleErrors("setIssues", roomID, socket);
348+
const isRoomExpired = checkIsRoomExpired(roomID);
349+
if (!user || isRoomExpired) {
350+
return handleErrors("setIssues", roomID, socket, isRoomExpired);
342351
}
343352

344353
groomings[user.roomID].issues = data;
@@ -348,8 +357,9 @@ const setIssues = (data, credentials, roomID, socket) => {
348357

349358
const updateTimer = (data, credentials, roomID, socket) => {
350359
const user = getCurrentUser(credentials, socket);
351-
if (!user) {
352-
return handleErrors("updateTimer", roomID, socket);
360+
const isRoomExpired = checkIsRoomExpired(roomID);
361+
if (!user || isRoomExpired) {
362+
return handleErrors("updateTimer", roomID, socket, isRoomExpired);
353363
}
354364

355365
groomings[user.roomID].timer = data;
@@ -359,8 +369,9 @@ const updateTimer = (data, credentials, roomID, socket) => {
359369

360370
const updateAvatar = (data, credentials, roomID, socket) => {
361371
const user = getCurrentUser(credentials, socket);
362-
if (!user) {
363-
return handleErrors("updateAvatar", roomID, socket);
372+
const isRoomExpired = checkIsRoomExpired(roomID);
373+
if (!user || isRoomExpired) {
374+
return handleErrors("updateAvatar", roomID, socket, isRoomExpired);
364375
}
365376
if (!groomings[user.roomID]) {
366377
return;
@@ -377,8 +388,9 @@ const updateAvatar = (data, credentials, roomID, socket) => {
377388

378389
const resetVotes = (credentials, roomID, socket) => {
379390
const user = getCurrentUser(credentials, socket);
380-
if (!user) {
381-
return handleErrors("resetVotes", roomID, socket);
391+
const isRoomExpired = checkIsRoomExpired(roomID);
392+
if (!user || isRoomExpired) {
393+
return handleErrors("resetVotes", roomID, socket, isRoomExpired);
382394
}
383395

384396
groomings[user.roomID].isResultShown = false;
@@ -405,6 +417,10 @@ const logRooms = () => {
405417
}
406418

407419
const checkRoomExistance = (roomId) => {
420+
const isRoomExpired = checkIsRoomExpired(roomId);
421+
if (isRoomExpired) {
422+
return false;
423+
}
408424
return rooms.some((room) => room.roomID === roomId);
409425
};
410426

@@ -458,8 +474,9 @@ const cleanRoomsAndUsers = () => {
458474

459475
const updateNickName = (credentials, newNickName, roomID, socket) => {
460476
const user = getCurrentUser(credentials, socket);
461-
if (!user) {
462-
return handleErrors("updateNickName", roomID, socket);
477+
const isRoomExpired = checkIsRoomExpired(roomID);
478+
if (!user || isRoomExpired) {
479+
return handleErrors("updateNickName", roomID, socket, isRoomExpired);
463480
}
464481

465482
user.nickname = newNickName;

gurubu-client/src/app/components/room/grooming-board/grooming-board.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { ROOM_STATUS } from "../../../room/[id]/enums";
2121
import { EncounteredError, GroomingInfo } from "@/shared/interfaces";
2222
import { ENCOUTERED_ERROR_TYPE, GroomingMode } from "@/shared/enums";
2323
import { useLoader } from "@/contexts/LoaderContext";
24-
import Avatar from "@/components/common/avatar";
2524

2625
interface IProps {
2726
roomId: string;
@@ -43,6 +42,7 @@ const GroomingBoard = ({
4342
groomingInfo,
4443
setUserVote,
4544
roomStatus,
45+
setRoomStatus,
4646
setEncounteredError,
4747
encounteredError,
4848
setShowErrorPopup,
@@ -91,6 +91,10 @@ const GroomingBoard = ({
9191

9292
const nickname = localStorage.getItem("nickname");
9393
const lobby = getCurrentLobby(roomId);
94+
if(!lobby){
95+
setRoomStatus(ROOM_STATUS.NOT_FOUND);
96+
return;
97+
}
9498
if (roomStatus === ROOM_STATUS.FOUND) {
9599
socket.emit("joinRoom", {
96100
nickname,

gurubu-client/src/app/not-found.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ export default function NotFound() {
66
return (
77
<main className="not-found-page">
88
<h1 className="not-found-page__title">404 error</h1>
9-
<h2 className="not-found-page__subtitle">We lost this page</h2>
9+
<h2 className="not-found-page__subtitle">Probably room is expired</h2>
1010
<p className="not-found-page__description">
1111
We searched high and low, but couldn’t find what you’re looking for.
12-
Let’s find a better place for you to go.
12+
Rooms are automatically deleted after 12 hours.
1313
</p>
1414
<div className="not-found-page__navigation">
1515
<GoBackButton />

0 commit comments

Comments
 (0)