-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatcher.js
117 lines (111 loc) · 3.53 KB
/
matcher.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// const { Schema, mongo, Mongoose } = require("mongoose")
// require("/models")
// Mongoose.connect('mongodb+srv://UserDB:<MemePoke69420>@cluster0.1qwru.mongodb.net/MemePokeDB?retryWrites=true&w=majority', {useNewUrlParser: true, useUnifiedTopology: true});
var Meme = require('./models/meme');
var User = require('./models/user');
var Users = require('./models/user');
var Conversation = require('./conversation');
Users.plugin(random);
function containsMatch(user, other) {
var identifier = "";
if (user.username > other.username) {
identifier = user.username + "/" + other.username
} else {
identifier = other.username + "/" + user.username
}
return Conversation.find({users : identifier}) != null;
}
function containsMeme(val, list) {
list.forEach(element => {
if (val.memeID == element.memeID) {
return true;
}
});
return false;
}
function findMatches(userID) {
let user = Users.find({nickname : userID});
let users = new Set();
//Select 100 random users to match
Users.findRandom({}, {}, {limit: 100}, function(err, results) {
if (!err) {
users.add(results);
}
});
let maxUser = null;
let maxPoints = 0;
users.forEach((value, _valueAgain) => {
let points = 0;
//Check if users have already matched before
if (containsMatch(user, value)) {
points = -10000;
} else {
//Check for common liked memes
key.likedMemes.forEach(element => {
if (containsMeme(element, user.likedMemes)) {
points++;
} else if (containsMeme(element, user.dislikedMemes)){
points--;
}
});
//Check for common disliked memes
key.dislikedMemes.forEach(element => {
if (containsMeme(element, user.likedMemes)) {
points--;
} else if (containsMeme(element, user.dislikedMemes)){
points++;
}
});
//Find the user with the max amount of points
if (points > maxPoints) {
maxPoints = points;
maxUser = value;
}
}
});
return maxUser.nickname;
}
const db = Mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function findMatches(userID){
let user = Users.find({nickname : userID});
let users = new Set();
//Select 100 random users to match
Users.findRandom({}, {}, {limit: 100}, function(err, results) {
if (!err) {
users.add(results);
}
});
let maxUser = null;
let maxPoints = 0;
users.forEach((value, _valueAgain) => {
let points = 0;
//Check if users have already matched before
if (containsMatch(user, value)) {
points = -10000;
} else {
//Check for common liked memes
key.likedMemes.forEach(element => {
if (containsMeme(element, user.likedMemes)) {
points++;
} else if (containsMeme(element, user.dislikedMemes)){
points--;
}
});
//Check for common disliked memes
key.dislikedMemes.forEach(element => {
if (containsMeme(element, user.likedMemes)) {
points--;
} else if (containsMeme(element, user.dislikedMemes)){
points++;
}
});
//Find the user with the max amount of points
if (points > maxPoints) {
maxPoints = points;
maxUser = value;
}
}
});
return maxUser.nickname;
});