Created
October 27, 2017 18:59
-
-
Save PetarIvancevic/c2951a7a26d5c7943f31f8ee0c27da76 to your computer and use it in GitHub Desktop.
Movie recommendation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
router.get('/movie', auth, async function (req, res) { | |
const {username} = req | |
const similarityData = _(await db.similarity.getBy(function (similarity) { | |
return _.includes(similarity.users, username) | |
})).orderBy('pcc', 'desc').take(5).value() | |
const users = _(similarityData).map(function (similarity) { | |
return { | |
..._.omit(similarity, 'users'), | |
username: _.remove(similarity.users, function (user) { | |
return user !== username | |
})[0], | |
} | |
}).value() | |
const mainUser = await db.user.get(username) | |
mainUser.reviewedMovies = _.map(await helper.getUserMovieReviews({username}), 'movieId') | |
await Promise.map(users, async function (user) { | |
user.reviews = _(await db.review.getBy(function (review) { | |
return review.username === user.username && !_.includes(mainUser.reviewedMovies, review.movieId) | |
})).orderBy('rating', 'desc').take(5).value() | |
}) | |
let movieRecommendations = [] | |
_.forEach(users, function (user) { | |
_.forEach(user.reviews, function (review) { | |
movieRecommendations.push({ | |
movieId: review.movieId, | |
rating: review.rating * user.pcc | |
}) | |
}) | |
}) | |
movieRecommendations = _(movieRecommendations) | |
.orderBy('rating', 'desc') | |
.unionBy('movieId') | |
.value() | |
let movies = await Promise.map(movieRecommendations, function (movieRecommendation) { | |
return db.movie.get(movieRecommendation.movieId) | |
}) | |
if (!_.size(movies)) { | |
movies = await db.movie.getVals() | |
} | |
return res.render('movies', {movies}) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment