Skip to content

Commit

Permalink
Chore(accommodation): update accommodation endpoints
Browse files Browse the repository at this point in the history
- Add stars of accommodation
- Add comments of accommodation
- Add all related data to GET accommodation

[starts #171692438]
  • Loading branch information
gadishimwe committed Mar 12, 2020
1 parent 33f81e6 commit 1224a98
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 12 deletions.
9 changes: 1 addition & 8 deletions src/migrations/20200303174302-alter-request.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,4 @@ export function up(queryInterface, Sequelize) {
* @param {object} queryInterface
* @param {object} Sequelize
*/
export function down(queryInterface) {
return queryInterface.sequelize.transaction(t => Promise.all([
queryInterface.removeColumn('Requests', 'requesterFname', { transaction: t }),
queryInterface.removeColumn('Requests', 'frequesterLname', { transaction: t }),
queryInterface.removeColumn('Requests', 'requesterPicture', { transaction: t }),
queryInterface.removeColumn('Requests', 'tripType', { transaction: t })
]));
}
export function down(queryInterface) { return queryInterface.dropTable('Requests'); }
14 changes: 14 additions & 0 deletions src/migrations/20200309141524-Accommodation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
export const up = (queryInterface, Sequelize) => Promise.all([
queryInterface.addColumn('Accommodation', 'likes', Sequelize.INTEGER),
queryInterface.addColumn('Accommodation', 'disLikes', Sequelize.INTEGER),

]);
/**
* @exports
* @class
* @param {object} queryInterface
*/
export const down = (queryInterface) => {
queryInterface.removeColumn('Accommodation', 'likes');
return queryInterface.removeColumn('Accommodation', 'disLikes');
};
3 changes: 3 additions & 0 deletions src/models/accommodation.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ export default (sequelize, DataTypes) => {
locationId: DataTypes.INTEGER,
totalRooms: DataTypes.INTEGER,
allAvailableRooms: DataTypes.INTEGER,
likes: DataTypes.INTEGER,
disLikes: DataTypes.INTEGER

}, {});
Accommodation.associate = (models) => {
Expand All @@ -16,6 +18,7 @@ export default (sequelize, DataTypes) => {
Accommodation.hasMany(models.Image, { foreignKey: 'subjectId', as: 'accommodationPictures', onDelete: 'CASCADE', hooks: true });
Accommodation.hasMany(models.Amenities, { foreignKey: 'accommodationId', as: 'amenities', onDelete: 'CASCADE', hooks: true });
Accommodation.hasMany(models.Booking, { foreignKey: 'accommodationId', as: 'bookings', onDelete: 'cascade', hooks: true });
Accommodation.hasMany(models.Comments, { foreignKey: 'subjectId', as: 'accommodationComments', onDelete: 'CASCADE', hooks: true });
};
return Accommodation;
};
1 change: 1 addition & 0 deletions src/models/comments.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export default (sequelize, DataTypes) => {
// associations can be defined here
Comments.belongsTo(models.Users, { foreignKey: 'userId', targetKey: 'id' });
Comments.belongsTo(models.Trip, { foreignKey: 'subjectId', targetKey: 'id' });
Comments.belongsTo(models.Accommodation, { foreignKey: 'subjectId', as: 'accommodation' });
};
return Comments;
};
4 changes: 2 additions & 2 deletions src/routes/accommodation.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ router.post(
router.get('/', authMiddleware.checkUserLoggedIn, AccommodationController.getAccommodations);
router.post(
'/',
authMiddleware.checkUserLoggedIn, createAccommodationValidations,
authMiddleware.verifyPermissions,
authMiddleware.checkUserLoggedIn, authMiddleware.verifyPermissions,
createAccommodationValidations,
avoidDuplicateAccommodation,
checkIfAccommodationTypeExists, checkIfLocationExists,
AccommodationController.createAccommodation
Expand Down
10 changes: 8 additions & 2 deletions src/services/accommodation.service.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import models from '../models';


const { Accommodation, Booking, AccommodationType, Rooms } = models;
const { Accommodation, Booking, AccommodationType, Rooms, Users } = models;

/**
*
Expand Down Expand Up @@ -45,7 +45,13 @@ class AccommodationService {
* @returns {object} data
*/
static findAllAccommodations() {
return Accommodation.findAll();
return Accommodation.findAll({ include: ['addOnServices', 'accommodationPictures', 'amenities',
{ association: 'accommodationComments', include: { model: Users, attributes: ['firstName', 'lastName', 'profilePicture'] } },
{
association: 'rooms',
include: ['roomPictures']
}
] });
}

/**
Expand Down
1 change: 1 addition & 0 deletions src/tests/fixtures/accommodation.fixture.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export const newAccomodation = {
name: faker.commerce.productName(),
typeId: faker.random.number({ min: 1, max: 5 }),
locationId: faker.random.number({ min: 1, max: 9 }),
rating: faker.random.number({ min: 1, max: 5 }),
description: faker.lorem.sentence(),
accommodationPictures: [generateImage('Accommodation'), generateImage('Accommodation'), generateImage('Accommodation')],
addOnServices: [generateAddOn(), generateAddOn()],
Expand Down
7 changes: 7 additions & 0 deletions src/validations/accommodation.validation.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@ export const createAccommodationValidations = async (req, res, next) => {
'string.empty': 'Please enter your accomodation description',
'any.required': 'description is required'
}),
rating: Joi.number()
.max(5)
.required()
.messages({
'number.max': 'rating must be less than or equal to 5',
'any.required': 'rating is required'
}),
typeId: Joi.number()
.min(1)
.required()
Expand Down

0 comments on commit 1224a98

Please sign in to comment.