Spaces:
Sleeping
Sleeping
Mohamed Abu Basith
commited on
Commit
·
70d644b
1
Parent(s):
736f203
CHG: Major changes on the Address.
Browse files- routes/profileUpdate.js +135 -138
routes/profileUpdate.js
CHANGED
@@ -74,147 +74,121 @@ router.post('/', upload.single('file'), async (req, res) => {
|
|
74 |
}
|
75 |
});
|
76 |
|
77 |
-
// Adress section
|
78 |
-
|
79 |
-
//
|
80 |
-
const
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
// const missingFields = requiredFields.filter(field => !req.body[field]);
|
87 |
-
// console.log("validateAddressData: " + missingFields)
|
88 |
-
// if (missingFields.length > 0) {
|
89 |
-
// return res.status(400).json(failedResponse(
|
90 |
-
// `Missing required fields: ${missingFields.join(', ')}`
|
91 |
-
// ));
|
92 |
-
// }
|
93 |
-
// next();
|
94 |
-
// };
|
95 |
-
|
96 |
-
// Create address (add to user's address array)
|
97 |
-
router.post("/:userId/addresses", asyncHandler(async (req, res) => {
|
98 |
-
const userId = parseInt(req.params.userId);
|
99 |
-
|
100 |
-
// Validate userId
|
101 |
-
if (isNaN(userId)) {
|
102 |
-
return res.status(400).json({
|
103 |
-
status: 400,
|
104 |
-
message: "Invalid user ID",
|
105 |
-
data: null
|
106 |
-
});
|
107 |
-
}
|
108 |
-
|
109 |
-
// Validate request body
|
110 |
-
const { name, mobileNumber, pinCode, address, area, landMark, alterMobileNumber } = req.body;
|
111 |
-
if (!name || !mobileNumber || !pinCode || !address || !area) {
|
112 |
-
return res.status(400).json({
|
113 |
-
status: 400,
|
114 |
-
message: "Missing required fields in the address",
|
115 |
-
data: null
|
116 |
-
});
|
117 |
}
|
|
|
118 |
|
|
|
|
|
119 |
try {
|
120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
const updatedUser = await User.findOneAndUpdate(
|
122 |
-
{ unique_id: userId },
|
123 |
-
{ $push: { addresses:
|
124 |
-
{ new: true
|
125 |
);
|
126 |
|
127 |
-
// If user not found, return 404
|
128 |
if (!updatedUser) {
|
129 |
return res.status(404).json({
|
130 |
-
status:
|
131 |
message: "User not found",
|
132 |
data: null
|
133 |
});
|
134 |
}
|
135 |
|
136 |
-
|
137 |
-
const addressesArray = updatedUser.addresses || [];
|
138 |
-
const newAddress = addressesArray[addressesArray.length - 1];
|
139 |
-
|
140 |
-
// If newAddress is missing, return 500
|
141 |
-
if (!newAddress) {
|
142 |
-
return res.status(500).json({
|
143 |
-
status: 500,
|
144 |
-
message: "Failed to retrieve new address",
|
145 |
-
data: null
|
146 |
-
});
|
147 |
-
}
|
148 |
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
message: "Address created successfully",
|
153 |
data: newAddress
|
154 |
});
|
155 |
} catch (error) {
|
156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
data: null
|
164 |
-
});
|
165 |
-
}
|
166 |
|
167 |
-
if (
|
168 |
-
return res.status(
|
169 |
-
status:
|
170 |
-
message: "
|
171 |
data: null
|
172 |
});
|
173 |
}
|
174 |
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
|
|
|
|
|
|
|
|
|
|
179 |
data: null
|
180 |
});
|
181 |
}
|
182 |
}));
|
183 |
|
184 |
-
//
|
185 |
-
router.
|
186 |
-
const user = await User.findOne({ unique_id: req.params.userId }).select('addresses');
|
187 |
-
|
188 |
-
if (!user) {
|
189 |
-
return res.status(404).json(failedResponse("User not found", 404));
|
190 |
-
}
|
191 |
-
|
192 |
-
res.status(200).json(successResponse("Success!", user.addresses));
|
193 |
-
}));
|
194 |
-
|
195 |
-
// Update Adress
|
196 |
-
router.put("/:userId/addresses/:addressId", asyncHandler(async (req, res) => {
|
197 |
try {
|
198 |
-
const userId =
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
unique_id: userId,
|
206 |
-
"addresses._id": addressId
|
207 |
-
});
|
208 |
-
|
209 |
-
if (!user) {
|
210 |
-
return res.status(404).json(failedResponse("User or address not found", 404));
|
211 |
}
|
212 |
|
213 |
-
|
|
|
214 |
const updateFields = {};
|
215 |
-
|
216 |
-
|
217 |
-
|
|
|
|
|
|
|
218 |
|
219 |
const updatedUser = await User.findOneAndUpdate(
|
220 |
{
|
@@ -222,50 +196,73 @@ router.put("/:userId/addresses/:addressId", asyncHandler(async (req, res) => {
|
|
222 |
"addresses._id": addressId
|
223 |
},
|
224 |
{ $set: updateFields },
|
225 |
-
{ new: true
|
226 |
);
|
227 |
|
228 |
if (!updatedUser) {
|
229 |
-
return res.status(404).json(
|
|
|
|
|
|
|
|
|
230 |
}
|
231 |
|
232 |
-
const updatedAddress = updatedUser.addresses.find(
|
|
|
|
|
233 |
|
234 |
-
res.status(200).json(
|
|
|
|
|
|
|
|
|
235 |
} catch (error) {
|
236 |
-
|
237 |
-
|
|
|
|
|
|
|
238 |
}
|
239 |
}));
|
240 |
|
241 |
// Delete address
|
242 |
-
router.delete("
|
243 |
-
|
244 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
|
|
250 |
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
|
|
|
|
256 |
|
257 |
-
|
258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
}
|
260 |
-
|
261 |
-
res.status(200).json(successResponse("Address deleted successfully"));
|
262 |
}));
|
263 |
|
264 |
-
// Remove the GET all addresses endpoint as it's no longer relevant
|
265 |
-
// Update error handling middleware
|
266 |
-
// router.use((err, req, res, next) => {
|
267 |
-
// console.error(err.stack);
|
268 |
-
// res.status(500).json(failedResponse("Internal server error", 500));
|
269 |
-
// });
|
270 |
-
|
271 |
module.exports = router;
|
|
|
74 |
}
|
75 |
});
|
76 |
|
77 |
+
// Replace the "// Adress section" comment and subsequent code with:
|
78 |
+
|
79 |
+
// Address Section
|
80 |
+
const validateAddress = (address) => {
|
81 |
+
const requiredFields = ['name', 'mobileNumber', 'pinCode', 'address', 'area'];
|
82 |
+
const missingFields = requiredFields.filter(field => !address[field]);
|
83 |
+
|
84 |
+
if (missingFields.length > 0) {
|
85 |
+
throw new Error(`Missing required fields: ${missingFields.join(', ')}`);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
}
|
87 |
+
};
|
88 |
|
89 |
+
// Create new address
|
90 |
+
router.post("/address", asyncHandler(async (req, res) => {
|
91 |
try {
|
92 |
+
const { userId } = req.body;
|
93 |
+
if (!userId) {
|
94 |
+
return res.status(400).json({
|
95 |
+
status: false,
|
96 |
+
message: "User ID is required",
|
97 |
+
data: null
|
98 |
+
});
|
99 |
+
}
|
100 |
+
|
101 |
+
validateAddress(req.body);
|
102 |
+
|
103 |
+
const addressData = {
|
104 |
+
name: req.body.name,
|
105 |
+
mobileNumber: req.body.mobileNumber,
|
106 |
+
pinCode: req.body.pinCode,
|
107 |
+
address: req.body.address,
|
108 |
+
area: req.body.area,
|
109 |
+
landMark: req.body.landMark || '',
|
110 |
+
alterMobileNumber: req.body.alterMobileNumber || ''
|
111 |
+
};
|
112 |
+
|
113 |
const updatedUser = await User.findOneAndUpdate(
|
114 |
+
{ unique_id: userId },
|
115 |
+
{ $push: { addresses: addressData } },
|
116 |
+
{ new: true }
|
117 |
);
|
118 |
|
|
|
119 |
if (!updatedUser) {
|
120 |
return res.status(404).json({
|
121 |
+
status: false,
|
122 |
message: "User not found",
|
123 |
data: null
|
124 |
});
|
125 |
}
|
126 |
|
127 |
+
const newAddress = updatedUser.addresses[updatedUser.addresses.length - 1];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
|
129 |
+
return res.status(200).json({
|
130 |
+
status: true,
|
131 |
+
message: "Address added successfully",
|
|
|
132 |
data: newAddress
|
133 |
});
|
134 |
} catch (error) {
|
135 |
+
return res.status(400).json({
|
136 |
+
status: false,
|
137 |
+
message: error.message,
|
138 |
+
data: null
|
139 |
+
});
|
140 |
+
}
|
141 |
+
}));
|
142 |
|
143 |
+
// Get all addresses
|
144 |
+
router.get("/address/:userId", asyncHandler(async (req, res) => {
|
145 |
+
try {
|
146 |
+
const { userId } = req.params;
|
147 |
+
const user = await User.findOne({ unique_id: userId }).select('addresses');
|
|
|
|
|
|
|
148 |
|
149 |
+
if (!user) {
|
150 |
+
return res.status(404).json({
|
151 |
+
status: false,
|
152 |
+
message: "User not found",
|
153 |
data: null
|
154 |
});
|
155 |
}
|
156 |
|
157 |
+
return res.status(200).json({
|
158 |
+
status: true,
|
159 |
+
message: "Addresses retrieved successfully",
|
160 |
+
data: user.addresses || []
|
161 |
+
});
|
162 |
+
} catch (error) {
|
163 |
+
return res.status(400).json({
|
164 |
+
status: false,
|
165 |
+
message: error.message,
|
166 |
data: null
|
167 |
});
|
168 |
}
|
169 |
}));
|
170 |
|
171 |
+
// Update address
|
172 |
+
router.put("/address", asyncHandler(async (req, res) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
try {
|
174 |
+
const { userId, addressId } = req.body;
|
175 |
+
if (!userId || !addressId) {
|
176 |
+
return res.status(400).json({
|
177 |
+
status: false,
|
178 |
+
message: "User ID and Address ID are required",
|
179 |
+
data: null
|
180 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
}
|
182 |
|
183 |
+
validateAddress(req.body);
|
184 |
+
|
185 |
const updateFields = {};
|
186 |
+
['name', 'mobileNumber', 'pinCode', 'address', 'area', 'landMark', 'alterMobileNumber']
|
187 |
+
.forEach(field => {
|
188 |
+
if (req.body[field] !== undefined) {
|
189 |
+
updateFields[`addresses.$.${field}`] = req.body[field];
|
190 |
+
}
|
191 |
+
});
|
192 |
|
193 |
const updatedUser = await User.findOneAndUpdate(
|
194 |
{
|
|
|
196 |
"addresses._id": addressId
|
197 |
},
|
198 |
{ $set: updateFields },
|
199 |
+
{ new: true }
|
200 |
);
|
201 |
|
202 |
if (!updatedUser) {
|
203 |
+
return res.status(404).json({
|
204 |
+
status: false,
|
205 |
+
message: "Address not found",
|
206 |
+
data: null
|
207 |
+
});
|
208 |
}
|
209 |
|
210 |
+
const updatedAddress = updatedUser.addresses.find(
|
211 |
+
addr => addr._id.toString() === addressId
|
212 |
+
);
|
213 |
|
214 |
+
return res.status(200).json({
|
215 |
+
status: true,
|
216 |
+
message: "Address updated successfully",
|
217 |
+
data: updatedAddress
|
218 |
+
});
|
219 |
} catch (error) {
|
220 |
+
return res.status(400).json({
|
221 |
+
status: false,
|
222 |
+
message: error.message,
|
223 |
+
data: null
|
224 |
+
});
|
225 |
}
|
226 |
}));
|
227 |
|
228 |
// Delete address
|
229 |
+
router.delete("/address", asyncHandler(async (req, res) => {
|
230 |
+
try {
|
231 |
+
const { userId, addressId } = req.body;
|
232 |
+
if (!userId || !addressId) {
|
233 |
+
return res.status(400).json({
|
234 |
+
status: false,
|
235 |
+
message: "User ID and Address ID are required",
|
236 |
+
data: null
|
237 |
+
});
|
238 |
+
}
|
239 |
|
240 |
+
const updatedUser = await User.findOneAndUpdate(
|
241 |
+
{ unique_id: userId },
|
242 |
+
{ $pull: { addresses: { _id: addressId } } },
|
243 |
+
{ new: true }
|
244 |
+
);
|
245 |
|
246 |
+
if (!updatedUser) {
|
247 |
+
return res.status(404).json({
|
248 |
+
status: false,
|
249 |
+
message: "Address not found",
|
250 |
+
data: null
|
251 |
+
});
|
252 |
+
}
|
253 |
|
254 |
+
return res.status(200).json({
|
255 |
+
status: true,
|
256 |
+
message: "Address deleted successfully",
|
257 |
+
data: null
|
258 |
+
});
|
259 |
+
} catch (error) {
|
260 |
+
return res.status(400).json({
|
261 |
+
status: false,
|
262 |
+
message: error.message,
|
263 |
+
data: null
|
264 |
+
});
|
265 |
}
|
|
|
|
|
266 |
}));
|
267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
module.exports = router;
|