hayat / routes /address.js
Mohamed Abu Basith
Address Changes
9f82759
const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
const Address = require("../Database/models/address");
const { successResponse, failedResponse } = require("../utils/responseModel");
// Middleware for async error handling
const asyncHandler = fn => (req, res, next) =>
Promise.resolve(fn(req, res, next)).catch(next);
// Validation middleware
const validateAddressData = (req, res, next) => {
const requiredFields = ['user', 'name', 'mobileNumber', 'pinCode', 'address'];
const missingFields = requiredFields.filter(field => !req.body[field]);
if (missingFields.length > 0) {
return res.status(400).json(failedResponse(
`Missing required fields: ${missingFields.join(', ')}`
));
}
next();
};
// Create address
router.post("/", validateAddressData, asyncHandler(async (req, res) => {
const addressData = {
...req.body,
user: parseInt(req.body.user) // Convert to number
};
const newAddress = new Address(addressData);
res.status(201).json(successResponse("Address created successfully", newAddress));
}));
// Get addresses by user
router.get("/user/:userId", asyncHandler(async (req, res) => {
const userId = parseInt(req.params.userId);
if (isNaN(userId)) {
return res.status(400).json(response.error("Invalid user ID"));
}
const addresses = await Address.find({ user: userId });
res.json(successResponse("Success!", addresses));
}));
// Get all addresses
router.get("/", asyncHandler(async (req, res) => {
const addresses = await Address.find().populate('user', 'username email');
res.json(successResponse("Success!", addresses));
}));
// Update address
router.put("/:id", validateAddressData, asyncHandler(async (req, res) => {
const updatedAddress = await Address.findOneAndUpdate(
{ _id: req.params.id },
req.body,
{ new: true, runValidators: true }
);
if (!updatedAddress) {
return res.status(404).json(failedResponse("Address not found", 404));
}
res.json(successResponse("Address updated successfully", updatedAddress));
}));
// Delete address
router.delete("/:id", asyncHandler(async (req, res) => {
const deletedAddress = await Address.findOneAndDelete({ _id: req.params.id });
if (!deletedAddress) {
return res.status(404).json(failedResponse("Address not found", 404));
}
res.json(successResponse("Address deleted successfully", null,));
}));
// Error handling middleware
router.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json(failedResponse("Internal server error", 500));
});
module.exports = router;