Agromind-backend / backend /controllers /appointmentController.js
gh-action-hf-auto
auto: sync backend from github@32fb9685
8a6248c
// appointmentController.js
import Appointment from "../models/appointmentModel.js";
import User from "../models/auth.model.js";
// Booking an appointment
export const bookAppointment = async (req, res, io) => {
try {
const { expertId } = req.body;
const farmerId = req.userId; // Get farmerId from the token
const appointment = await Appointment.create({ farmerId, expertId });
const expert = await User.findById(expertId);
if (expert.socketId) {
io.to(expert.socketId).emit('appointmentRequest', {
appointMentId: appointment._id,
farmerId: farmerId,
});
}
res.status(200).json({ message: "Appointment request sent to expert" });
} catch (error) {
console.error(error);
res.status(500).json({ error: "An error occurred while booking the appointment" });
}
};
// Accept an appointment
export const acceptAppointment = async (req, res, io) => {
try {
const { appointmentId } = req.params;
const appointment = await Appointment.findByIdAndUpdate(appointmentId, { status: 'accepted' }, { new: true });
if (!appointment) return res.status(404).json({ error: "Appointment not found" });
io.to(appointment.farmerId.toString()).emit('appointmentAccepted', { appointmentId });
res.status(200).json({ message: "Appointment accepted successfully" });
} catch (error) {
res.status(500).json({ error: "An error occurred while accepting an appointment" });
}
};
// Decline an appointment
export const declineAppointment = async (req, res, io) => {
try {
const { appointmentId } = req.params;
const appointment = await Appointment.findByIdAndUpdate(appointmentId, { status: 'declined' }, { new: true });
if (!appointment) return res.status(404).json({ error: "Appointment not found" });
io.to(appointment.farmerId.toString()).emit('appointmentDeclined', { appointmentId });
res.status(200).json({ message: "Appointment declined successfully" });
} catch (error) {
res.status(500).json({ error: "An error occurred while declining the appointment" });
}
};
// Get all appointments for expert
export const getAppointmentsForExpert = async (req, res) => {
try {
const expertId = req.userId; // Get expertId from the token
const appointments = await Appointment.find({ expertId }).populate('farmerId', 'name'); // Assuming 'farmerId' contains the farmer's data like name
if (!appointments) return res.status(404).json({ error: "No appointments found for this expert" });
res.status(200).json(appointments);
} catch (error) {
res.status(500).json({ error: "An error occurred while fetching appointments for expert" });
}
};
// Get all appointments for farmer
export const getAppointmentsForFarmer = async (req, res) => {
try {
const farmerId = req.userId; // Get farmerId from the token
const appointments = await Appointment.find({ farmerId }).populate('expertId', 'name'); // Assuming 'expertId' contains the expert's data like name
if (!appointments) return res.status(404).json({ error: "No appointments found for this farmer" });
res.status(200).json(appointments);
} catch (error) {
res.status(500).json({ error: "An error occurred while fetching appointments for farmer" });
}
};