exports.bookingsByStatus =
(async (req, res) => {
const type = req.params.type;
let page = parseInt(req.query.page) || 1;
let limit = parseInt(req.query.limit) || 10;
let skip = parseInt(req.query.skip) || 0;
let match = {};
let order = 1;
let sort = {};
if (req.query) {
if (req.query.page) {
if (req.query.page && req.query.limit) {
return res.status(500).json({ success: false, msg: "either use page or limit"
})
}
else if (req.query.page && req.query.skip) {
return res.status(500).json({ success: false, msg: "either use page or skip"
})
}
}
if (req.query.start) {
skip = parseInt(req.query.start);
}
if (req.query.end) {
const end = parseInt(req.query.end);
limit = end - skip;
}
if (req.query.payment && req.query.payment !== "") {
match.payment = parseInt(req.query.payment)
}
if (req.query.status && req.query.status !== "") {
match.status = req.query.status
}
if (req.query.phone && req.query.phone !== "") {
match.phone = parseInt(req.query.phone)
}
if (req.query.id && req.query.id !== "") {
match._id = ObjectId(req.query.id)
}
if (req.query.sort && req.query.sort !== "") {
console.log("oorder", req.query.order)
if (req.query.order && req.query.order !== "") {
if (req.query.order === "asc") {
order = 1;
}
else if (req.query.order === "desc") {
order = -1;
}
else {
return res.status(500).json({ success: false, msg: "please use 'asc' or
'desc' in order" })
}
}
sort[req.query.sort] = order || 1;
}
}
console.log(req.query);
if (page < 0 || page === 0) {
response = { "success": false, "message": "invalid page number, should start with 1"
};
return res.status(500).json(response)
}
else {
if (page >= 2) {
skip = (page - 1) * limit
}
}
console.log("limit", limit, "skip", skip);
console.log("match=", match, "sort=", sort, "length", Object.keys(sort).length,
"orderby=", order)
switch (type) {
case "allBooking":
try {
const result = await Booking.aggregate([
{ $match: match ? match : {} },
{ $sort: Object.keys(sort).length > 0 ? sort : { _id: 1 } },
{
$lookup:
{
from: "users",
localField: "user_id",
foreignField: "_id",
as: "user_details",
},
},
{ "$match": { "user_details.phone": { "$eq": match?.phone } } },
{
$lookup:
{
from: "employee",
localField: "employee_id",
foreignField: "_id",
as: "employee_details"
},
},
{
$lookup:
{
from: "services",
localField: "service_id",
foreignField: "_id",
as: "service_details"
},
},
//++++++++++++ another way to match user phone no. ++++++++++++++++++
// [{
// $lookup: {
// "from": "users",
// "let": { "phone": "$phone" },
// pipeline: [
// {
// "$match": {
// "$expr": {
// "$eq": ["$$phone", match.phone ? match.phone :
{}],
// },
// },
// },
// ],
// as: "phone"
// }
// }],
//++++++++++ another way to match user phone no. +++++++++++++++
{ "$match": { "user_details.phone": match.phone ? match.phone : {} } },
{
'$facet': {
totalCount: [{ $count: "total" }],
data: [{ $skip: skip }, { $limit: limit },
],
}
}
])
const count = result[0].data.length;
console.log(count);
return res.status(200).json({ success: true, result, msg: "data found", count
});
} catch (err) {
console.log("error=>", err);
return res.status(404).json({ success: false, msg: "some error occured",
error: err })
}
case "acceptBooking":{...}
case "ongoingBooking":{...}
case "cancelBooking":{...}
default:{...}
}
});