Skip to content

Commit

Permalink
kjbkjkkiouyyiuyoiuyGUODYTIUWOFGOIPDOSJF{IHDGOIFDOGK
Browse files Browse the repository at this point in the history
  • Loading branch information
lopatoj committed Sep 22, 2024
1 parent 85d3c45 commit 7cdbb8c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 32 deletions.
75 changes: 44 additions & 31 deletions server/src/matching_algorithm.ts
Original file line number Diff line number Diff line change
@@ -1,48 +1,61 @@
import { UserData } from "./middleware/auth";
import { database } from "./mongodb";

// Get User Data somehow of all users
const users = database.collection<UserData>("users");
const chats = database.collection("chats");

const users: UserData[] = []
async function makeMatch(user1: UserData, user2: UserData) {
const user1_id = user1.firebase_id;
const user2_id = user2.firebase_id;

function calculate_distance(user1: UserData, user2: UserData)
{
let distance = 0
for (let i = 0; i < user1.traits.length; i++)
{
distance += Math.pow(user1.traits[i]-user2.traits[i], 2)
}
return Math.sqrt(distance)
if (!user1 || !user2) {
return;
}

let chat_id = (await chats.insertOne({ users: [user1_id, user2_id], messages: [] })).insertedId;
await users.updateOne({ firebase_id: user1_id }, { "$push": { matches: { other_user_id: user2_id, chat_id, display_name: user2.display_name } } });
await users.updateOne({ firebase_id: user2_id }, { "$push": { matches: { other_user_id: user1_id, chat_id, display_name: user1.display_name } } });
await users.updateOne({ firebase_id: user1_id }, { "$set": { open_to_wave: false } });
await users.updateOne({ firebase_id: user2_id }, { "$set": { open_to_wave: false } });
}

function calculate_distance(user1: UserData, user2: UserData) {
let distance = 0
for (let i = 0; i < user1.traits.length; i++) {
distance += Math.pow(user1.traits[i] - user2.traits[i], 2)
}
return Math.sqrt(distance)
}

const user_count = users.length
for (let i = 0; i < user_count-1; i++)
{
export async function matchWave() {
const users: UserData[] = await database.collection<UserData>("users").find({ open_to_wave: true }).toArray();

const user_count = users.length
for (let i = 0; i < user_count - 1; i++) {
let closest_user_index = -1
let closest_user_distance = 100000000000

const user1 = users[i]

if (!user1.open_to_wave) {continue}
if (!user1.open_to_wave) { continue }

for (let j = i+1; j < user_count; j++)
{
const user2 = users[j]
for (let j = i + 1; j < user_count; j++) {
const user2 = users[j]

if (!user2.open_to_wave) {continue}
if (!user2.open_to_wave) { continue }

const dist = calculate_distance(user1, user2)
if (dist < closest_user_distance)
{
closest_user_index = j
closest_user_distance = dist
}
const dist = calculate_distance(user1, user2)
if (dist < closest_user_distance) {
closest_user_index = j
closest_user_distance = dist
}
}

if (closest_user_index != -1)
{
user1.open_to_wave = false
const matched_user = users[closest_user_index]
// Create match in the database and make them not open to wave
// user1.matches.push({other_user_id: matched_user.firebase_id, display_name: matched_user.display_name})
if (closest_user_index != -1) {
user1.open_to_wave = false
const matched_user = users[closest_user_index]

await makeMatch(user1, matched_user);
}
}
}
}
2 changes: 1 addition & 1 deletion server/src/routers/matches.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const matches = Router();

matches.use(authMiddleware);

async function makeMatch(user1_id: string, user2_id: string) {
export async function makeMatch(user1_id: string, user2_id: string) {
const user1 = await users.findOne<UserData>({ firebase_id: user1_id });
const user2 = await users.findOne<UserData>({ firebase_id: user2_id });

Expand Down

0 comments on commit 7cdbb8c

Please sign in to comment.