129 lines
3.2 KiB
JavaScript
129 lines
3.2 KiB
JavaScript
import Crop from "../models/cropModel.js";
|
|
import Farm from "../models/farmModel.js";
|
|
|
|
// Create a new crop
|
|
export const createCrop = async (req, res) => {
|
|
try {
|
|
const { name, farm, image, harvestDate, growthStage, healthStatus } =
|
|
req.body;
|
|
|
|
// Check if the farm exists
|
|
const existingFarm = await Farm.findById(farm);
|
|
if (!existingFarm)
|
|
return res.status(404).json({ message: "Farm not found" });
|
|
|
|
const crop = new Crop({
|
|
name,
|
|
farm,
|
|
image,
|
|
harvestDate,
|
|
growthStage,
|
|
healthStatus,
|
|
});
|
|
|
|
await crop.save();
|
|
|
|
// Add crop to farm
|
|
existingFarm.crops.push(crop._id);
|
|
await existingFarm.save();
|
|
|
|
res.status(201).json(crop);
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|
|
|
|
// Get all crops for a specific farm
|
|
export const getCropsByFarm = async (req, res) => {
|
|
try {
|
|
const crops = await Crop.find({ farm: req.params.farmId });
|
|
|
|
res.status(200).json(crops);
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|
|
|
|
// Get a single crop by ID
|
|
export const getCropById = async (req, res) => {
|
|
try {
|
|
const crop = await Crop.findById(req.params.cropId).populate("farm");
|
|
|
|
if (!crop) return res.status(404).json({ message: "Crop not found" });
|
|
|
|
res.status(200).json(crop);
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|
|
|
|
// Update crop details
|
|
export const updateCrop = async (req, res) => {
|
|
try {
|
|
const updatedCrop = await Crop.findByIdAndUpdate(
|
|
req.params.cropId,
|
|
req.body,
|
|
{ new: true }
|
|
);
|
|
|
|
if (!updatedCrop)
|
|
return res.status(404).json({ message: "Crop not found" });
|
|
|
|
res.status(200).json(updatedCrop);
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|
|
|
|
// Delete a crop
|
|
export const deleteCrop = async (req, res) => {
|
|
try {
|
|
const crop = await Crop.findById(req.params.cropId);
|
|
|
|
if (!crop) return res.status(404).json({ message: "Crop not found" });
|
|
|
|
await crop.deleteOne();
|
|
|
|
// Remove crop from the farm
|
|
await Farm.findByIdAndUpdate(crop.farm, { $pull: { crops: crop._id } });
|
|
|
|
res.status(200).json({ message: "Crop deleted successfully" });
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|
|
|
|
// Update crop growth stage
|
|
export const updateGrowthStage = async (req, res) => {
|
|
try {
|
|
const { growthStage } = req.body;
|
|
|
|
const crop = await Crop.findById(req.params.cropId);
|
|
if (!crop) return res.status(404).json({ message: "Crop not found" });
|
|
|
|
crop.growthStage = growthStage;
|
|
await crop.save();
|
|
|
|
res.status(200).json({ message: "Growth stage updated", crop });
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|
|
|
|
// Update crop health status
|
|
export const updateHealthStatus = async (req, res) => {
|
|
try {
|
|
const { healthStatus } = req.body;
|
|
|
|
const crop = await Crop.findById(req.params.cropId);
|
|
if (!crop) return res.status(404).json({ message: "Crop not found" });
|
|
|
|
crop.healthStatus = healthStatus;
|
|
await crop.save();
|
|
|
|
res.status(200).json({ message: "Health status updated", crop });
|
|
} catch (error) {
|
|
res.status(500).json({ message: error.message });
|
|
}
|
|
};
|