Estoy creando una aplicación de reserva de boletos de autobús en node.js. He creado 4 tablas. 1 - tabla de usuarios, 2 - tabla de autobuses, 3 - tabla de reservas, 4 - tabla de rutas.
aquí está el modelo de viaje:
const routeSchema = new mongoose.Schema({ departureLocation: { name: { type: String, required: true, }, subLocation: { type: [String] }, time: { type: String, required: true } }, arrivalLocation: { name: { type: String, required: true, }, subLocation: { type: [String] }, time : { type: String, required: true } }, duration: { type: Number, required: true, }, busId:{ type: mongoose.Schema.Types.ObjectId, ref:"Bus", required: true }, date: { type:String, required: true }, }, { timestamps: true, });En ese modelo de viaje, solo el administrador (usuario autenticado) puede agregar datos sobre el viaje (como la ubicación de salida, la ubicación de llegada, los datos del autobús y la fecha)
router.post("/addTrip", auth, async (req, res) => { const route = new Route(req.body); try { await route.save(); res.status(201).send(route); } catch (e) { res.status(500).send(); } });supongamos que hay cuadros de búsqueda para que el usuario ingrese los detalles del viaje como este
https://i.stack.imgur.com/oXvsj.png
El usuario ingresa los datos y esos datos se convierten en una cadena de consulta (como esta: 127.0.0.1:3000/trips?departure=surat&arrival=bhavnagar&date=2022-05-30) y en base a esa cadena de consulta quiero mostrar todos los viajes coincidentes a el usuario.
ahora quiero filtrar los datos de acuerdo con las necesidades del usuario (también usuarios no autenticados), pero no sé cómo hacerlo.
router.get("/trips", async (req, res) => { if(!req.query.departure || !req.query.arrival || !req.query.date){ return res.send({ error: "Please enter the data to get the trip"}) } let departure = req.query.departure; let arrival = req.query.arrival; let date = req.query.date; let routes = await Route.find().lean().exec(); let route = routes.find((route) => { route.departureLocation.name.toLowerCase() == departure && route.arrivalLocation.name.toLowerCase() == arrival && route.date == date; //What to write here }); })He incrustado los datos del asiento en el modelo de autobús.
const busSchema = new mongoose.Schema( { busNumber: { type: String, unique: true, required: true, }, seats: { type: Number, required: true }, }, { timestamps: true, } );cómo mostrar a los usuarios el autobús y los asientos disponibles para esos viajes combinados
Puede filter los datos usando la función de find :
router.get('/trips', async (req, res) => { if (!req.query.departure || !req.query.arrival || !req.query.date) { return res.send({ error: 'Please enter the data to get the trip', }); } let departure = req.query.departure; let arrival = req.query.arrival; let date = req.query.date; let routes = await Route.find({ departureLocation: departure, arrivalLocation: arrival, date }).lean().exec(); return res.status(200).json(routes); });