Snaplocal / server /src /models /TripPlan.js
Kuruva Laxmi
SnapLocal MVP - Complete platform with 4 MVP features
0f8617c
Raw
History Blame Contribute Delete
1.96 kB
const mongoose = require('mongoose');
const tripPlanSchema = new mongoose.Schema(
{
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
destination: {
type: String,
required: true,
},
startDate: {
type: Date,
required: true,
},
endDate: {
type: Date,
required: true,
},
groupSize: {
type: Number,
default: 1,
},
eventType: {
type: String,
enum: ['vacation', 'wedding', 'honeymoon', 'family_trip', 'solo_travel', 'group_event', 'corporate'],
default: 'vacation',
},
budget: {
type: Number,
default: null,
},
recommendedPhotographers: [
{
photographerId: mongoose.Schema.Types.ObjectId,
matchScore: Number,
pricePerDay: Number,
},
],
trendingSpots: [
{
spotName: String,
location: String,
bestTime: String,
description: String,
photographersNearby: [mongoose.Schema.Types.ObjectId],
},
],
itinerary: [
{
day: Number,
activities: [String],
photoSpots: [String],
notes: String,
},
],
selectedPhotographer: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Photographer',
default: null,
},
bookingDetails: {
packageId: mongoose.Schema.Types.ObjectId,
startTime: Date,
endTime: Date,
totalDays: Number,
totalPrice: Number,
},
status: {
type: String,
enum: ['planning', 'booked', 'completed', 'archived'],
default: 'planning',
},
sharedLink: {
type: String,
default: null, // shareable URL for trip plan
},
notes: {
type: String,
default: '',
},
createdAt: {
type: Date,
default: Date.now,
},
},
{ timestamps: true }
);
module.exports = mongoose.model('TripPlan', tripPlanSchema);