Skip to content

Commit

Permalink
Merge 4f5d840 into c7074bc
Browse files Browse the repository at this point in the history
  • Loading branch information
Cheza-Dzabala committed Nov 15, 2019
2 parents c7074bc + 4f5d840 commit e03551c
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 5 deletions.
21 changes: 19 additions & 2 deletions src/controllers/searchController.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,37 @@
/* eslint-disable max-len */
/* eslint-disable eqeqeq */
import accommodationServices from '../services/accommodationServices';
import responseHelper from '../utils/responseHelper';
import searchQuery from '../utils/db/queries/accommodationSearchQuery';
import { getRatings } from '../helpers/ratingsHelper';

export default class SearchController {

static accommodations = async (req, res) => {

const { query } = req;
const applyRatings = async (accommodations, userId) => (
Promise.all(accommodations.map(async accommodation => {
const rated = await getRatings(accommodation, userId);
return rated;
}))
);

const { query, user: { payload: { id } } } = req;

try {

const accommodations = await accommodationServices.findAccommodations(searchQuery(query));
const unrated = await accommodationServices.findAccommodations(searchQuery(query));

let accommodations = await applyRatings(unrated, id);

if (accommodations.length === 0) {
return responseHelper(res, 'No accommodations matching this criteria were found.', accommodations, 404);
}

if (query.rating) {
accommodations = accommodations.filter(accommodation => accommodation.dataValues.averageRating == query.rating);
}

return responseHelper(res, 'Accommodations', accommodations, 200);
} catch (error) {
return responseHelper(res, 'Something went wrong', error.message, 500);
Expand Down
4 changes: 3 additions & 1 deletion src/helpers/ratingsHelper.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/* eslint-disable no-restricted-globals */
/* eslint-disable import/prefer-default-export */
/* eslint-disable indent */
/* eslint-disable max-len */

export const getRatings = async (accommodation, userId) => {

if (accommodation) {
Expand All @@ -12,7 +14,7 @@ export const getRatings = async (accommodation, userId) => {
const averageRating = summation / ratings.length;
accommodation.dataValues.hasRated = hasRated;
accommodation.dataValues.hasBookmarked = hasBookmarked;
accommodation.dataValues.averageRating = averageRating;
accommodation.dataValues.averageRating = (!isNaN(averageRating) ? averageRating : 0);
accommodation.dataValues.ratings = ratings;
}

Expand Down
6 changes: 4 additions & 2 deletions src/middlewares/verifySearchKeys.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ export default (req, res, next) => {
|| key === 'name'
|| key === 'description'
|| key === 'highlights'
|| key === 'amenities') {
|| key === 'amenities'
|| key === 'rating') {
return true;
}
return false;
Expand All @@ -30,7 +31,8 @@ export default (req, res, next) => {
|| query.name === ''
|| query.description === ''
|| query.highlights === ''
|| query.amenities === '') {
|| query.amenities === ''
|| query.rating === '') {
return responseHelper(res, 'Search keys cannot be null', null, 400);
}

Expand Down

0 comments on commit e03551c

Please sign in to comment.