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;