Skip to content

Commit

Permalink
[#167727336] Feature (user book accommodation)
Browse files Browse the repository at this point in the history
  • Loading branch information
shonubijerry committed Sep 10, 2019
1 parent 76251e9 commit d1ce785
Show file tree
Hide file tree
Showing 38 changed files with 1,590 additions and 145 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ dist
package-lock.json
.nyc_output/
coverage/
npm-debug.log
41 changes: 11 additions & 30 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 50 additions & 2 deletions src/controllers/accommodationController.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-disable max-len */
import Model from '../models';
import * as accommodationServices from '../services/accommodationServices';
import * as tripServices from '../services/tripServices';
import { respondWithSuccess, respondWithWarning } from '../helpers/responseHandler';
import statusCode from '../helpers/statusCode';

Expand Down Expand Up @@ -39,7 +40,7 @@ export const createRoom = async (req, res) => {
};
const accommodation = await accommodationServices.findOne(Accommodation, { id: data.accommodationId });
if (!accommodation) {
return respondWithWarning(res, statusCode.resourceNotFound, 'this ccommodation does not exist');
return respondWithWarning(res, statusCode.resourceNotFound, 'accommodation does not exist');
}

const room = await accommodationServices.create(Room, data);
Expand All @@ -57,7 +58,54 @@ export const createRoom = async (req, res) => {
*/
export const getAccommodations = async (req, res) => {
try {
const accommodations = await accommodationServices.findAllAccommodations();
const { city, offset, limit } = req.query;

const queryOptions = {
...city && { city }
};

const paginationOptions = {
...offset && { offset },
...limit && { limit },
};

const accommodations = await accommodationServices.findAllAccommodations(queryOptions, paginationOptions);
if (!accommodations) {
return respondWithWarning(res, statusCode.resourceNotFound, 'resource not found');
}
return respondWithSuccess(res, statusCode.success, 'resource successfully fetched', accommodations);
} catch (error) {
return respondWithWarning(res, statusCode.internalServerError, 'Server Error');
}
};

/**
* Function gets all accommodations for a trip
* @param {object} req
* @param {object} res
* @returns {object} response object
*/
export const getTripAccommodations = async (req, res) => {
try {
const { tripId } = req.params;
const { offset, limit } = req.query;

const trip = await tripServices.findTripById(tripId);
if (!trip) {
return respondWithWarning(res, statusCode.resourceNotFound, 'trip not found');
}

const { destination } = trip;
const queryOption = {
city: destination
};
const paginationOptions = {
...offset && { offset },
...limit && { limit },
};

const accommodations = await accommodationServices.findAllAccommodations(queryOption, paginationOptions);

if (!accommodations) {
return respondWithWarning(res, statusCode.resourceNotFound, 'resource not found');
}
Expand Down
79 changes: 79 additions & 0 deletions src/controllers/bookingController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import * as bookingServices from '../services/bookingServices';
import { respondWithSuccess, respondWithWarning } from '../helpers/responseHandler';
import statusCode from '../helpers/statusCode';

/*
* Function creates booking
* @param {object} req
* @param {object} res
* @returns {object} response object
*/
export const createBooking = async (req, res) => {
try {
const data = {
...req.body,
userId: req.auth.id,
};
const booking = await bookingServices.create(data);

return respondWithSuccess(res, statusCode.created, 'resource successfully created', booking.toJSON());
} catch (error) {
return respondWithWarning(res, statusCode.internalServerError, 'Server Error');
}
};

/**
* Function gets all bookings
* @param {object} req
* @param {object} res
* @returns {object} response object
*/
export const getAllBookings = async (req, res) => {
try {
const bookings = await bookingServices.findAllBookings();
if (!bookings) {
return respondWithWarning(res, statusCode.resourceNotFound, 'resource not found');
}
return respondWithSuccess(res, statusCode.success, 'resource successfully fetched', bookings);
} catch (error) {
return respondWithWarning(res, statusCode.internalServerError, 'Server Error');
}
};

/**
* Function gets one booking for a requester
* @param {object} req
* @param {object} res
* @returns {object} response object
*/
export const getUserBookings = async (req, res) => {
const { id } = req.auth;
try {
const bookings = await bookingServices.findUserBookings(id);
if (!bookings) {
return respondWithWarning(res, statusCode.resourceNotFound, 'resource not found');
}
return respondWithSuccess(res, statusCode.success, 'resource successfully fetched', bookings);
} catch (error) {
return respondWithWarning(res, statusCode.internalServerError, 'Server Error');
}
};

/**
* Function gets one booking
* @param {object} req
* @param {object} res
* @returns {object} response object
*/
export const getOneBooking = async (req, res) => {
try {
const { bookingId } = req.params;
const booking = await bookingServices.findOneBooking(parseInt(bookingId, 10));
if (!booking) {
return respondWithWarning(res, statusCode.resourceNotFound, 'resource not found');
}
return respondWithSuccess(res, statusCode.success, 'resource successfully fetched', booking.toJSON());
} catch (error) {
return respondWithWarning(res, statusCode.internalServerError, 'Server Error');
}
};
12 changes: 6 additions & 6 deletions src/controllers/tripController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { postTrip, updateTripStatus, getRequesterEmail, findTripById } from '../services/tripServices';
import {
postTrip, updateTripStatus, getRequesterEmail
} from '../services/tripServices';
import { respondWithSuccess, respondWithWarning } from '../helpers/responseHandler';
import statusCode from '../helpers/statusCode';
import { approvedEmitter } from '../helpers/notificationHandler';
Expand Down Expand Up @@ -34,15 +36,13 @@ export const approveTripRequest = async (req, res) => {
userId: dataValues.userId,
requester: requesterEmail,
message: 'Your Trip has been approved'
}
};
approvedEmitter(payload);
return respondWithSuccess(res, statusCode.success, 'Trip has been updated successfully', dataValues);
} catch (error) {
return respondWithWarning(res, statusCode.internalServerError, 'Oops something bad happened');
}
};

export const getTripRequest = async (req, res) => {
return !req.trip ? respondWithWarning(res, statusCode.internalServerError, 'Oops something bad happened')
: respondWithSuccess(res, statusCode.success, 'Operation successful', req.trip);
}
export const getTripRequest = async (req, res) => (!req.trip ? respondWithWarning(res, statusCode.internalServerError, 'Oops something bad happened')
: respondWithSuccess(res, statusCode.success, 'Operation successful', req.trip));
7 changes: 2 additions & 5 deletions src/database/migrations/20190829084157-create-trip-request.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,13 @@ export default {
},
status: {
type: Sequelize.STRING,
allowNull: false,
defaultValue: 'Open',
defaultValue: 'pending'
// values should be ['approved', 'pending', 'rejected']
},
userId: {
type: Sequelize.STRING,
allowNull: false,
},
accomodationId: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
Expand Down
26 changes: 1 addition & 25 deletions src/database/migrations/20190904055351-create-accommodation.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,32 +44,8 @@ export default {
allowNull: false,
},
country: {
type: Sequelize.ENUM,
type: Sequelize.STRING,
allowNull: false,
values: ['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua and Barbuda', 'Argentina',
'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados',
'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia', 'Bosnia and Herzegovina', 'Botswana', 'Brazil',
'Brunei', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cabo Verde', 'Cambodia', 'Cameroon', 'Canada',
'Central African Republic (CAR)', 'Chad', 'Chile', 'China', 'Colombia', 'Comoros', 'Congo', 'Democratic Republic of the Congo', 'Republic of the Costa Rica',
'Cote d"Ivoire', 'Croatia', 'Cuba', 'Cyprus', 'Czechia', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic',
'Ecuador', 'Egypt', 'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Estonia', 'Eswatini', 'Ethiopia',
'Fiji', 'Finland', 'France', 'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana', 'Greece', 'Grenada', 'Guatemala',
'Guinea', 'Guinea-Bissau', 'Guyana', 'Haiti', 'Honduras', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran',
'Iraq', 'Ireland', 'Israel', 'Italy', 'Jamaica', 'Japan', 'Jordan', 'Kazakhstan', 'Kenya', 'Kiribati', 'Kosovo',
'Kuwait', 'Kyrgyzstan', 'Laos', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia', 'Libya', 'Liechtenstein',
'Lithuania', 'Luxembourg', 'Madagascar', 'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta', 'Marshall Islands',
'Mauritania', 'Mauritius', 'Mexico', 'Micronesia', 'Moldova', 'Monaco', 'Mongolia', 'Montenegro', 'Morocco',
'Mozambique', 'Myanmar', 'Namibia', 'Nauru', 'Nepal', 'Netherlands', 'New Zealand', 'Nicaragua',
'Niger', 'Nigeria', 'North Korea', 'North Macedonia', 'Norway', 'Oman', 'Pakistan', 'Palau', 'Palestine',
'Panama', 'Papua New Guinea', 'Paraguay,', 'Peru', 'Philippines', 'Poland', 'Portugal', 'Qatar',
'Romania', 'Russia', 'Rwanda', 'Saint Kitts and Nevis',
'Saint Lucia', 'Saint Vincent and the Grenadines', 'Samoa', 'San Marino', 'Sao Tome and Principe',
'Saudi Arabia', 'Senegal', 'Serbia', 'Seychelles', 'Sierra Leone', 'Singapore', 'Slovakia', 'Slovenia',
'Solomon Islands', 'Somalia', 'South Africa', 'South Korea', 'South Sudan', 'Spain', 'Sri Lanka',
'Sudan', 'Suriname', 'Sweden', 'Switzerland', 'Syria', 'Taiwan', 'Tajikistan', 'Tanzania', 'Thailand',
'Timor-Leste', 'Togo', 'Tonga', 'Trinidad and Tobago', 'Tunisia', 'Turkey', 'Turkmenistan', 'Tuvalu',
'Uganda', 'Ukraine', 'United Arab Emirates (UAE)', 'United Kingdom (UK)', 'United States of America (USA)', 'Uruguay',
'Uzbekistan', 'Vanuatu', 'Vatican City', 'Venezuela', 'Vietnam', 'Yemen', 'Zambia', 'Zimbabwe'],
},
createdAt: {
allowNull: false,
Expand Down
Loading

0 comments on commit d1ce785

Please sign in to comment.