Initial commit
This commit is contained in:
76
backend/services/chatService.js
Normal file
76
backend/services/chatService.js
Normal file
@@ -0,0 +1,76 @@
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
let messages = [];
|
||||
let searchQueue = [];
|
||||
let users = [];
|
||||
let currentChats = [];
|
||||
|
||||
export const getMessages = (toId, fromId) => {
|
||||
const userChats = currentChats.filter(chat => chat.includes(toId) && chat.includes(fromId));
|
||||
if (userChats.length === 0) {
|
||||
fromId = '';
|
||||
}
|
||||
const userMessages = messages.filter(message => message.to = toId && ["system", fromId].includes(message.from));
|
||||
messages = messages.filter(message => message.to === toId && ["system", fromId].includes(message.from));
|
||||
return userMessages;
|
||||
};
|
||||
|
||||
export const addMessage = (from, to, text) => {
|
||||
const userChats = currentChats.filter(chat => chat.includes(from) && chat.includes(to));
|
||||
if (userChats.length === 0) {
|
||||
return;
|
||||
}
|
||||
messages.push({ from: from, to: to, text: text });
|
||||
return { text: text };
|
||||
};
|
||||
|
||||
export const findMatch = (genders, age, id) => {
|
||||
const currentUsersChat = currentChats.filter(chat => chat.includes(id));
|
||||
if (currentUsersChat.length > 0) {
|
||||
return findUser(currentUsersChat[0][0] === id ? currentUsersChat[0][1] : currentUsersChat[0][0]);
|
||||
}
|
||||
let filteredSearchQueue = users.filter(user =>
|
||||
searchQueue.some(sq => sq.id === user.id) && user.id !== id
|
||||
&& currentChats.filter(chat => chat.includes(user.id)).length === 0
|
||||
).sort(() => Math.random() - 0.5);
|
||||
for (let i = 0; i < filteredSearchQueue.length; i++) {
|
||||
const user = filteredSearchQueue[i];
|
||||
const ageMatch = user.age >= age.min && user.age <= age.max;
|
||||
const genderMatch = genders.includes(user.gender);
|
||||
if (ageMatch && genderMatch) {
|
||||
for (let j = searchQueue.length - 1; j >= 0; j--) {
|
||||
if ([id, user.id].includes(searchQueue[j].id)) {
|
||||
searchQueue.splice(j, 1);
|
||||
}
|
||||
}
|
||||
currentChats.push([user.id, id]);
|
||||
return user;
|
||||
}
|
||||
}
|
||||
if (!searchQueue.find(user => user.id === id)) {
|
||||
searchQueue.push({ id, genders, age });
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const findUser = (id) => {
|
||||
return users.find(user => user.id === id);
|
||||
};
|
||||
|
||||
export const registerUser = (gender, age) => {
|
||||
const id = uuidv4();
|
||||
users.push({ gender, age, id });
|
||||
return id;
|
||||
};
|
||||
|
||||
export const removeUser = (id) => {
|
||||
searchQueue = searchQueue.filter(user => user.id !== id);
|
||||
users = users.filter(user => user.id !== id);
|
||||
currentChats = currentChats.filter(pair => pair[0] === id || pair[1] === id);
|
||||
messages = messages.filter(message => message.from === id || message.to === id);
|
||||
};
|
||||
|
||||
export const endChat = (userId) => {
|
||||
currentChats = currentChats.filter(chat => !chat.includes(userId));
|
||||
messages.push({ to: userId, from: 'system', activity: 'otheruserleft'})
|
||||
}
|
||||
Reference in New Issue
Block a user