Spaces:
Sleeping
Sleeping
File size: 2,719 Bytes
97f53b4 9f82759 97f53b4 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 40c5a52 9f82759 97f53b4 40c5a52 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
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; |