UNPKG

@everytravel/shared

Version:

A comprehensive shared package for Everytravel containing Mongoose models and CRUD operations for hotel booking, user management, and transaction handling. Updated with improved model syntax and enhanced error handling.

53 lines (46 loc) 2.08 kB
import mongoose from "mongoose"; const { Schema } = mongoose; import { trimIfString } from '../validation/index.js'; /** * Review model for hotel properties. * * @typedef {Object} Review * @property {ObjectId} user - Reference to the User who made the review. * @property {ObjectId} suite - Reference to the Suite. * @property {ObjectId} property - Reference to the Property. * @property {Number} cleanliness - Rating for cleanliness (1-5). * @property {Number} comfort - Rating for comfort (1-5). * @property {Number} staff - Rating for staff (1-5). * @property {Number} facilities - Rating for facilities (1-5). * @property {Number} valueForMoney - Rating for value for money (1-5). * @property {Number} location - Rating for location (1-5). * @property {Number} wifi - Rating for wifi (1-5). * @property {Number} generalRating - Overall rating (1-5). * @property {String} comment - Review comment. * @property {Date} createdAt - Review creation timestamp. */ const ReviewSchema = new Schema({ user: { type: Schema.Types.ObjectId, ref: 'User' }, suite: { type: Schema.Types.ObjectId, ref: 'Suite' }, property: { type: Schema.Types.ObjectId, ref: 'Property' }, cleanliness: { type: Number, min: 1, max: 5 }, comfort: { type: Number, min: 1, max: 5 }, staff: { type: Number, min: 1, max: 5 }, facilities: { type: Number, min: 1, max: 5 }, valueForMoney: { type: Number, min: 1, max: 5 }, location: { type: Number, min: 1, max: 5 }, wifi: { type: Number, min: 1, max: 5 }, generalRating: { type: Number, min: 1, max: 5 }, comment: { type: String, set: trimIfString }, createdAt: { type: Date, default: Date.now } }); // Indexes to optimize lookups and aggregations ReviewSchema.index({ user: 1, createdAt: -1 }); ReviewSchema.index({ property: 1, createdAt: -1 }); ReviewSchema.index({ suite: 1, createdAt: -1 }); ReviewSchema.index({ generalRating: 1 }); const Review = mongoose.model('Review', ReviewSchema); export default Review;