Skip to content

Instantly share code, notes, and snippets.

@PetarIvancevic
Created October 27, 2017 18:59
Show Gist options
  • Save PetarIvancevic/c2951a7a26d5c7943f31f8ee0c27da76 to your computer and use it in GitHub Desktop.
Save PetarIvancevic/c2951a7a26d5c7943f31f8ee0c27da76 to your computer and use it in GitHub Desktop.
Movie recommendation
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