Mohamed Abu Basith commited on
Commit
f50648d
·
1 Parent(s): 9f82759

CHG: Some address changes.

Browse files
Files changed (2) hide show
  1. Database/models/user.js +12 -3
  2. routes/profileUpdate.js +100 -19
Database/models/user.js CHANGED
@@ -66,9 +66,18 @@ const userSchema = new Schema({
66
  type: String
67
  },
68
  addresses: [{
69
- type: Schema.Types.ObjectId,
70
- ref: 'Address'
71
- }]
 
 
 
 
 
 
 
 
 
72
  }, {
73
  timestamps: true // This adds `createdAt` and `updatedAt` fields
74
  });
 
66
  type: String
67
  },
68
  addresses: [{
69
+ name: String,
70
+ mobileNumber: String,
71
+ pinCode: String,
72
+ address: String,
73
+ area: String,
74
+ landMark: String,
75
+ alterMobileNumber: String,
76
+ _id: { // Add if you want unique IDs for addresses
77
+ type: mongoose.Schema.Types.ObjectId,
78
+ auto: true
79
+ }
80
+ }]
81
  }, {
82
  timestamps: true // This adds `createdAt` and `updatedAt` fields
83
  });
routes/profileUpdate.js CHANGED
@@ -8,25 +8,6 @@ const fs = require('fs');
8
  const router = express.Router();
9
  const User = require('../Database/models/user');
10
 
11
-
12
-
13
- function successResponse(message, data) {
14
- return {
15
- "status": 200,
16
- "connection": "Connected",
17
- "message": message,
18
- "data": data,
19
- }
20
- }
21
-
22
- function failedResponse(message) {
23
- return {
24
- "status": 400,
25
- "connection": "Dissconnected",
26
- "message": message
27
- }
28
- }
29
-
30
  const storage = multer.diskStorage({
31
  destination: (req, file, cb) => {
32
  const uploadDir = path.join(os.tmpdir(), 'uploads'); // Use a temporary directory
@@ -90,4 +71,104 @@ router.post('/', upload.single('file'), async (req, res) => {
90
  }
91
  });
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  module.exports = router;
 
8
  const router = express.Router();
9
  const User = require('../Database/models/user');
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  const storage = multer.diskStorage({
12
  destination: (req, file, cb) => {
13
  const uploadDir = path.join(os.tmpdir(), 'uploads'); // Use a temporary directory
 
71
  }
72
  });
73
 
74
+ // Adress section
75
+
76
+ // Middleware for async error handling
77
+ const asyncHandler = fn => (req, res, next) =>
78
+ Promise.resolve(fn(req, res, next)).catch(next);
79
+
80
+ // Validation middleware
81
+ const validateAddressData = (req, res, next) => {
82
+ const requiredFields = ['name', 'mobileNumber', 'pinCode', 'address'];
83
+ const missingFields = requiredFields.filter(field => !req.body[field]);
84
+
85
+ if (missingFields.length > 0) {
86
+ return res.status(400).json(response.error(
87
+ `Missing required fields: ${missingFields.join(', ')}`
88
+ ));
89
+ }
90
+ next();
91
+ };
92
+
93
+ // Create address (add to user's address array)
94
+ router.post("/:userId/addresses", validateAddressData, asyncHandler(async (req, res) => {
95
+ const userId = req.params.userId;
96
+ const addressData = req.body;
97
+
98
+ const updatedUser = await User.findByIdAndUpdate(
99
+ userId,
100
+ { $push: { address: addressData } },
101
+ { new: true, runValidators: true }
102
+ );
103
+
104
+ if (!updatedUser) {
105
+ return res.status(404).json(failedResponse("User not found", 404));
106
+ }
107
+
108
+ const newAddress = updatedUser.address[updatedUser.address.length - 1];
109
+ res.status(201).json(successResponse("Address created successfully", newAddress));
110
+ }));
111
+
112
+ // Get addresses by user
113
+ router.get("/:userId/addresses", asyncHandler(async (req, res) => {
114
+ const user = await User.findById(req.params.userId).select('address');
115
+
116
+ if (!user) {
117
+ return res.status(404).json(failedResponse("User not found", 404));
118
+ }
119
+
120
+ res.json(successResponse("Success!", user.address));
121
+ }));
122
+
123
+ // Update address
124
+ router.put("/:userId/addresses/:addressId", validateAddressData, asyncHandler(async (req, res) => {
125
+ const updatedUser = await User.findOneAndUpdate(
126
+ {
127
+ _id: req.params.userId,
128
+ "address._id": req.params.addressId
129
+ },
130
+ {
131
+ $set: {
132
+ "address.$": req.body
133
+ }
134
+ },
135
+ { new: true, runValidators: true }
136
+ );
137
+
138
+ if (!updatedUser) {
139
+ return res.status(404).json(failedResponse("Address not found", 404));
140
+ }
141
+
142
+ const updatedAddress = updatedUser.address.id(req.params.addressId);
143
+ res.json(successResponse("Address updated successfully", updatedAddress));
144
+ }));
145
+
146
+ // Delete address
147
+ router.delete("/:userId/addresses/:addressId", asyncHandler(async (req, res) => {
148
+ const updatedUser = await User.findByIdAndUpdate(
149
+ req.params.userId,
150
+ { $pull: { address: { _id: req.params.addressId } } },
151
+ { new: true }
152
+ );
153
+
154
+ if (!updatedUser) {
155
+ return res.status(404).json(failedResponse("User not found", 404));
156
+ }
157
+
158
+ res.json(successResponse("Address deleted successfully"));
159
+ }));
160
+
161
+ // Remove the GET all addresses endpoint as it's no longer relevant
162
+ // Update error handling middleware
163
+ router.use((err, req, res, next) => {
164
+ console.error(err.stack);
165
+ res.status(500).json(failedResponse("Internal server error", 500));
166
+ });
167
+
168
+ // Error handling middleware
169
+ router.use((err, req, res, next) => {
170
+ console.error(err.stack);
171
+ res.status(500).json(failedResponse("Internal server error", 500));
172
+ });
173
+
174
  module.exports = router;