File size: 8,336 Bytes
7a8cf3b
97f53b4
 
 
7a8cf3b
a9bb731
7a8cf3b
 
377f546
f90afe2
898f6e2
f90afe2
377f546
97f53b4
e0676fa
 
 
 
97f53b4
e0676fa
97f53b4
 
 
 
e0676fa
97f53b4
 
 
 
b5c0ed7
 
 
 
97f53b4
 
 
b5c0ed7
97f53b4
 
b5c0ed7
b8c3484
b5c0ed7
 
97f53b4
b5c0ed7
9c4afc1
b5c0ed7
 
 
 
 
 
 
97f53b4
 
 
 
 
 
 
b5c0ed7
 
 
 
 
97f53b4
b5c0ed7
97f53b4
 
b5c0ed7
97f53b4
 
b5c0ed7
97f53b4
 
 
70d644b
 
 
 
 
 
d121fea
70d644b
 
f50648d
70d644b
f50648d
d121fea
 
 
70d644b
 
b00ce4a
70d644b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b00ce4a
70d644b
 
 
b00ce4a
 
 
 
70d644b
b00ce4a
 
 
 
5bdae11
70d644b
654946f
70d644b
 
 
b00ce4a
 
 
70d644b
 
 
 
 
 
 
b00ce4a
70d644b
 
 
 
 
5bdae11
70d644b
 
 
 
2cb60a7
 
 
 
70d644b
 
 
 
 
 
 
 
 
b00ce4a
 
5bdae11
7276679
f50648d
70d644b
 
afb35b1
70d644b
 
 
 
 
 
 
898f6e2
 
70d644b
 
898f6e2
70d644b
 
 
 
 
 
097fefe
afb35b1
c74007e
898f6e2
 
c74007e
898f6e2
70d644b
afb35b1
 
 
70d644b
 
 
 
 
afb35b1
d1794f9
70d644b
 
 
d1794f9
70d644b
 
 
 
 
afb35b1
70d644b
 
 
 
 
f50648d
 
 
 
70d644b
 
 
 
 
 
 
 
 
 
b44d5ef
70d644b
 
 
 
 
b44d5ef
70d644b
 
 
 
 
 
 
f50648d
70d644b
 
 
 
 
 
 
 
 
 
 
f50648d
 
 
97f53b4
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
const express = require('express');
const multer = require('multer');
const firebase = require("../utils/firebase")
var imageUrl = ""
const os = require('os');
const path = require('path');
const fs = require('fs');
const router = express.Router();
const User = require('../Database/models/user');
const { successResponse, failedResponse } = require("../utils/responseModel");
const mongoose = require('mongoose'); // Import Mongoose Types


const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        const uploadDir = path.join(os.tmpdir(), 'uploads'); // Use a temporary directory
        fs.mkdirSync(uploadDir, { recursive: true }); // Create the directory if it doesn't exist
        cb(null, uploadDir);
    },
    filename: (req, file, cb) => {
        cb(null, file.originalname);
    },
});

const upload = multer({ storage, limits: { fileSize: 5 * 1024 * 1024 }, });

//Update profile and watch
router.post('/', upload.single('file'), async (req, res) => {
    try {
        console.log("File:", req.file); // Check the uploaded file
        console.log("Body:", req.body); // Check other form data
        let imageUrl = '';
        // Find the user by userId
        const user = await User.findOne({ unique_id: req.body.userId });

        if (!user) {
            return res.status(404).send({ message: 'User not found!' });
        }

        // Handle file upload to Firebase Storage
        if (req.file || req.body.file) {
            const filePath = req.file.path; // Path to the uploaded file
            const imageName = req.file.filename; // Name of the uploaded file

            // Upload the file to Firebase Storage
            await firebase.uploadFile(filePath, "profile/" + imageName);
            await firebase.generateSignedUrl("profile/" + imageName)
                .then(url => {
                    imageUrl = url;
                })
                .catch(e => {
                    console.log(e);
                });

            // Update profilePic only if imageUrl is not empty
            if (imageUrl) {
                user.profilePic = imageUrl;
            }
        }

        // Update other user details
        if (req.body.username) user.username = req.body.username;
        if (req.body.dateOfBirth) user.dateOfBirth = req.body.dateOfBirth;
        if (req.body.mobileNumber) user.mobileNumber = req.body.mobileNumber;
        if (req.body.email) user.email = req.body.email;

        // Save the updated user data
        const savedData = await user.save();
        console.log('Profile updated successfully', savedData);
        res.status(200).send({ message: 'Profile updated!', data: savedData });
    } catch (error) {
        console.error('Error updating profile:', error);
        res.status(400).send({ message: 'Error updating profile', error });
    }
});

// Replace the "// Adress section" comment and subsequent code with:

// Address Section
const validateAddress = (address) => {
    const requiredFields = ['name', 'mobileNumber', 'pinCode', 'address', 'area'];
    const missingFields = requiredFields.filter(field => !address[field]);

    if (missingFields.length > 0) {
        throw new Error(`Missing required fields: ${missingFields.join(', ')}`);
    }
};

const asyncHandler = fn => (req, res, next) =>
    Promise.resolve(fn(req, res, next)).catch(next);

// Create new address
router.post("/address", asyncHandler(async (req, res) => {
    try {
        const { userId } = req.body;
        if (!userId) {
            return res.status(400).json({
                status: false,
                message: "User ID is required",
                data: null
            });
        }

        validateAddress(req.body);

        const addressData = {
            name: req.body.name,
            mobileNumber: req.body.mobileNumber,
            pinCode: req.body.pinCode,
            address: req.body.address,
            area: req.body.area,
            landMark: req.body.landMark || '',
            alterMobileNumber: req.body.alterMobileNumber || ''
        };

        const updatedUser = await User.findOneAndUpdate(
            { unique_id: userId },
            { $push: { addresses: addressData } },
            { new: true }
        );

        if (!updatedUser) {
            return res.status(404).json({
                status: false,
                message: "User not found",
                data: null
            });
        }

        const newAddress = updatedUser.addresses[updatedUser.addresses.length - 1];

        return res.status(200).json({
            status: true,
            message: "Address added successfully",
            data: newAddress
        });
    } catch (error) {
        return res.status(400).json({
            status: false,
            message: error.message,
            data: null
        });
    }
}));

// Get all addresses
router.get("/address/:userId", asyncHandler(async (req, res) => {
    try {
        const { userId } = req.params;
        const user = await User.findOne({ unique_id: userId }).select('addresses');

        if (!user) {
            return res.status(404).json({
                status: false,
                message: "User not found",
                data: null
            });
        }

        return res.status(200).json({
            status: true,
            message: "Addresses retrieved successfully",
            data: user.addresses || []
        });
    } catch (error) {
        return res.status(400).json({
            status: false,
            message: error.message,
            data: null
        });
    }
}));

// Update address
router.put("/address", asyncHandler(async (req, res) => {
    try {
        const { userId, addressId } = req.body;
        if (!userId || !addressId) {
            return res.status(400).json({
                status: false,
                message: "User ID and Address ID are required",
                data: null
            });
        }

        validateAddress(req.body);

        const updateFields = {};
        ['name', 'mobileNumber', 'pinCode', 'address', 'area', 'landMark', 'alterMobileNumber']
            .forEach(field => {
                if (req.body[field] !== undefined) {
                    updateFields[`addresses.$.${field}`] = req.body[field];
                }
            });

        const updatedUser = await User.findOneAndUpdate(
            {
                unique_id: userId,
                "addresses._id": addressId
            },
            { $set: updateFields },
            { new: true }
        );

        if (!updatedUser) {
            return res.status(404).json({
                status: false,
                message: "Address not found",
                data: null
            });
        }

        const updatedAddress = updatedUser.addresses.find(
            addr => addr._id.toString() === addressId
        );

        return res.status(200).json({
            status: true,
            message: "Address updated successfully",
            data: updatedAddress
        });
    } catch (error) {
        return res.status(400).json({
            status: false,
            message: error.message,
            data: null
        });
    }
}));

// Delete address
router.delete("/address", asyncHandler(async (req, res) => {
    try {
        const { userId, addressId } = req.body;
        if (!userId || !addressId) {
            return res.status(400).json({
                status: false,
                message: "User ID and Address ID are required",
                data: null
            });
        }

        const updatedUser = await User.findOneAndUpdate(
            { unique_id: userId },
            { $pull: { addresses: { _id: addressId } } },
            { new: true }
        );

        if (!updatedUser) {
            return res.status(404).json({
                status: false,
                message: "Address not found",
                data: null
            });
        }

        return res.status(200).json({
            status: true,
            message: "Address deleted successfully",
            data: null
        });
    } catch (error) {
        return res.status(400).json({
            status: false,
            message: error.message,
            data: null
        });
    }
}));

module.exports = router;