Skip to content

Commit 0aa6424

Browse files
committed
fix: feed
1 parent bb452dc commit 0aa6424

File tree

3 files changed

+59
-77
lines changed

3 files changed

+59
-77
lines changed

controllers/feedController.js

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const DeactivatedUsers = require("../models/DeactivatedUsers.js");
33
// const PersonalInfo = require("../models/PersonalInfo.js");
44
const UserProfile = require("../models/UserProfile.js");
55
const { GuestEmails } = require("../shared/constants.js");
6-
const { calculateMatchingScore, cumulateMatchingFactors, shuffleProfiles, paginateCombined } = require("../utils/feedAlgorithm.js");
6+
const { calculateMatchingScore, cumulateMatchingFactors, shuffleProfiles, pickUsers } = require("../utils/feedAlgorithm.js");
77

88
async function cleanUserProfiles(userProfiles , email) {
99
const blockedUsers = await BlockedUserList.findOne({
@@ -56,7 +56,7 @@ exports.getFeed = async(req, res) => {
5656
});
5757

5858
if (!currUser
59-
|| !currUser.personalityType
59+
// || !currUser.personalityType
6060
) {
6161
return res
6262
.json({
@@ -65,7 +65,7 @@ exports.getFeed = async(req, res) => {
6565
});
6666
}
6767

68-
const currUserScoreFactors = cumulateMatchingFactors(currUser);
68+
// const currUserScoreFactors = cumulateMatchingFactors(currUser);
6969

7070
let userProfiles = await UserProfile.find({
7171
...newFilters ,
@@ -83,11 +83,11 @@ exports.getFeed = async(req, res) => {
8383
const lessPreferredGenderUser = [];
8484

8585
userProfiles.forEach(otherUser => {
86-
const otherUserScoreFactors = cumulateMatchingFactors(otherUser);
87-
const scoredProfile = {
88-
score : calculateMatchingScore(currUserScoreFactors , otherUserScoreFactors) ,
89-
...(otherUser.toObject())
90-
};
86+
// const otherUserScoreFactors = cumulateMatchingFactors(otherUser);
87+
// const scoredProfile = {
88+
// score : calculateMatchingScore(currUserScoreFactors , otherUserScoreFactors) ,
89+
// ...(otherUser.toObject())
90+
// };
9191

9292
if(
9393
(
@@ -98,25 +98,13 @@ exports.getFeed = async(req, res) => {
9898
&& otherUser.gender.toLowerCase() === currUser.gender.toLowerCase()
9999
)
100100
) {
101-
morePreferredGenderUser.push(scoredProfile);
101+
morePreferredGenderUser.push(otherUser);
102102
} else {
103-
lessPreferredGenderUser.push(scoredProfile);
103+
morePreferredGenderUser.push(otherUser);
104104
}
105105
});
106-
107-
shuffleProfiles(morePreferredGenderUser);
108-
shuffleProfiles(lessPreferredGenderUser);
109-
110-
const pageNumber = parseInt(req.params.pageNumber, 10) || 0;
111-
const pageSize = 10;
112-
const startIndex = pageNumber * pageSize;
113-
114-
const paginatedUsers = paginateCombined(
115-
morePreferredGenderUser ,
116-
lessPreferredGenderUser ,
117-
startIndex ,
118-
pageSize
119-
);
106+
107+
let paginatedUsers = pickUsers(morePreferredGenderUser, lessPreferredGenderUser);
120108

121109
shuffleProfiles(paginatedUsers);
122110

controllers/userController.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ exports.updateUserProfile = async (req, res, next) => {
387387
const _user = await UserProfile.findOne({email : req.email});
388388
profileChanges.gender = _user.gender; // gender resets back to initial one always
389389

390-
const user = await UserProfile.findOneAndUpdate(
390+
let user = await UserProfile.findOneAndUpdate(
391391
{ email: req.email },
392392
profileChanges,
393393
{

utils/feedAlgorithm.js

Lines changed: 46 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ exports.cumulateMatchingFactors = (user) => {
1414
user.sexualOrientation ,
1515
user.hometown ,
1616
user.relationshipGoals ,
17-
...user.personalityType.split()
17+
// ...user.personalityType.split()
1818
);
1919

2020
return scoreFactors
@@ -29,56 +29,50 @@ exports.shuffleProfiles = (userProfiles) => {
2929
}
3030

3131

32-
exports.paginateCombined = (
33-
moreArr,
34-
lessArr,
35-
start,
36-
size
37-
) => {
38-
const result = [];
39-
40-
let m = start;
41-
let l = start;
42-
43-
const allowMoreCycle = Math.random() < 0.5;
44-
45-
while (result.length < size && (moreArr.length || lessArr.length)) {
46-
47-
const takeMore = result.length % 2 === 0;
48-
49-
if (takeMore) {
50-
51-
if (m < moreArr.length) {
52-
result.push(moreArr[m++]);
53-
}
54-
else if (allowMoreCycle && moreArr.length > 0) {
55-
result.push(moreArr[m % moreArr.length]);
56-
m++;
57-
}
58-
else if (l < lessArr.length) {
59-
result.push(lessArr[l++]);
60-
}
61-
else {
62-
break;
63-
}
64-
65-
} else {
66-
67-
if (l < lessArr.length) {
68-
result.push(lessArr[l++]);
69-
}
70-
else if (m < moreArr.length) {
71-
result.push(moreArr[m++]);
72-
}
73-
else if (allowMoreCycle && moreArr.length > 0) {
74-
result.push(moreArr[m % moreArr.length]);
75-
m++;
76-
}
77-
else {
78-
break;
79-
}
80-
}
32+
function getRandomConsecutiveSlice(arr, count) {
33+
if (count <= 0 || arr.length === 0) return [];
34+
35+
if (arr.length <= count) return [...arr];
36+
37+
const maxStart = arr.length - count;
38+
const start = Math.floor(Math.random() * (maxStart + 1));
39+
return arr.slice(start, start + count);
40+
}
41+
42+
43+
exports.pickUsers = (morePreferredGenderUser, lessPreferredGenderUser) => {
44+
const totalNeeded = 10;
45+
46+
let moreCount = Math.floor(Math.random() * (totalNeeded + 1));
47+
let lessCount = totalNeeded - moreCount;
48+
49+
if (morePreferredGenderUser.length < moreCount) {
50+
const deficit = moreCount - morePreferredGenderUser.length;
51+
moreCount = morePreferredGenderUser.length;
52+
lessCount = Math.min(
53+
lessPreferredGenderUser.length,
54+
lessCount + deficit
55+
);
8156
}
8257

83-
return result;
84-
};
58+
if (lessPreferredGenderUser.length < lessCount) {
59+
const deficit = lessCount - lessPreferredGenderUser.length;
60+
lessCount = lessPreferredGenderUser.length;
61+
moreCount = Math.min(
62+
morePreferredGenderUser.length,
63+
moreCount + deficit
64+
);
65+
}
66+
67+
const pickedMore = getRandomConsecutiveSlice(
68+
morePreferredGenderUser,
69+
moreCount
70+
);
71+
72+
const pickedLess = getRandomConsecutiveSlice(
73+
lessPreferredGenderUser,
74+
lessCount
75+
);
76+
77+
return [...pickedMore, ...pickedLess];
78+
}

0 commit comments

Comments
 (0)