diff --git a/src/repositories/user.repository.js b/src/repositories/user.repository.js index b1ce0f8..dc3439e 100644 --- a/src/repositories/user.repository.js +++ b/src/repositories/user.repository.js @@ -179,7 +179,7 @@ export const findRandomUserByPool = async (id) => { const sessions = await prisma.matchingSession.findMany({ where: { - status: "CHATING", + status: { in: ["PENDING", "CHATING"] }, participants: { some: { userId: id } }, }, select: { diff --git a/src/services/session.service.js b/src/services/session.service.js index 6fcb377..bcf422e 100644 --- a/src/services/session.service.js +++ b/src/services/session.service.js @@ -4,7 +4,8 @@ import { updateMatchingSessionToDiscard, updateMatchingSessionToFriends, findSessionParticipantByUserIdAndSessionId, - countMatchingSessionWhichChating + countMatchingSessionWhichChating, + findMatchingSessionByParticipantUserId } from "../repositories/session.repository.js"; import { SessionCountOverError, @@ -46,6 +47,10 @@ export function validateTemperatureScore(temperatureScore) { } export const createMatchingSession = async (userId, targetUserId, questionId, tx) => { + const existingSession = await findMatchingSessionByParticipantUserId(userId, targetUserId); + if (existingSession) { + throw new SessionInternalError('An active session already exists between these users.', undefined, { userId, targetUserId }); + } try { const result = await acceptSessionRequestTx(userId, targetUserId, questionId, tx); if (result == null) throw new SessionInternalError(undefined, undefined, { userId, questionId });