Spaces:
Sleeping
Sleeping
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; |