Team Ai
Apppublic

ctrlv-ince/gamezone-react-native

sourceHugging Facemitupdated 7mo agoView on Hugging Face
0likes
userController.js171 linesDownload Raw Back to controllers
1const { User } = require('../models/user');2const bcrypt = require('bcryptjs');3const jwt = require('jsonwebtoken');4 5exports.getUsers = async (req, res) => {6    try {7        const userList = await User.find().select('-passwordHash');8 9        if (!userList) {10            return res.status(500).json({ success: false });11        }12        res.send(userList);13    } catch (err) {14        res.status(500).json({ success: false, error: err.message });15    }16};17 18exports.getUserById = async (req, res) => {19    try {20        const user = await User.findById(req.params.id).select('-passwordHash');21 22        if (!user) {23            return res.status(500).json({ message: 'The user with the given ID was not found.' });24        }25        res.status(200).send(user);26    } catch (err) {27        res.status(500).json({ success: false, error: err.message });28    }29};30 31exports.registerUser = async (req, res) => {32    try {33        // If a photo was uploaded via multer/cloudinary, use the URL34        let photoUrl = '';35        if (req.file) {36            photoUrl = req.file.path; // Cloudinary returns the URL in path37        }38 39        let user = new User({40            name: req.body.name,41            email: req.body.email,42            passwordHash: bcrypt.hashSync(req.body.password, 10),43            phone: req.body.phone,44            isAdmin: req.body.isAdmin,45            address: req.body.address || '',46            pushToken: req.body.pushToken || '',47            photo: photoUrl,48        });49        user = await user.save();50 51        if (!user) return res.status(400).send('the user cannot be created!');52 53        res.send(user);54    } catch (err) {55        console.error("Registration validation error:", err);56        return res.status(500).json({ message: 'Server error during registration', error: err.message });57    }58};59 60exports.loginUser = async (req, res) => {61    try {62        const user = await User.findOne({ email: req.body.email });63        const secret = process.env.SECRET;64 65        if (!user) {66            return res.status(400).json({ message: 'The user not found' });67        }68 69        if (user && bcrypt.compareSync(req.body.password, user.passwordHash)) {70            const token = jwt.sign(71                {72                    userId: user.id,73                    isAdmin: user.isAdmin74                },75                secret,76                { expiresIn: '1d' }77            );78 79            res.status(200).send({ user: user.email, token: token, userId: user.id, pushToken: user.pushToken });80        } else {81            res.status(400).json({ message: 'password is wrong' });82        }83    } catch (err) {84        return res.status(500).json({ message: 'Server error during login', error: err.message });85    }86};87 88exports.updateUser = async (req, res) => {89    try {90        const userExist = await User.findById(req.params.id);91        if (!userExist) return res.status(400).send('Invalid user ID');92 93        let newPassword;94        if (req.body.password) {95            newPassword = bcrypt.hashSync(req.body.password, 10);96        } else {97            newPassword = userExist.passwordHash;98        }99 100        // If a photo was uploaded via multer/cloudinary, use the URL101        let photopath;102        if (req.file) {103            photopath = req.file.path; // Cloudinary returns the URL in path104        } else {105            photopath = userExist.photo;106        }107 108        const user = await User.findByIdAndUpdate(109            req.params.id,110            {111                name: req.body.name || userExist.name,112                email: req.body.email || userExist.email,113                passwordHash: newPassword,114                phone: req.body.phone || userExist.phone,115                isAdmin: req.body.isAdmin !== undefined ? req.body.isAdmin : userExist.isAdmin,116                address: req.body.address !== undefined ? req.body.address : userExist.address,117                pushToken: req.body.pushToken || userExist.pushToken,118                photo: photopath,119            },120            { new: true }121        );122 123        if (!user) return res.status(400).send('the user cannot be updated!');124 125        res.send(user);126    } catch (err) {127        return res.status(500).json({ message: 'Server error during update', error: err.message });128    }129};130 131exports.googleLogin = async (req, res) => {132    try {133        const { email, name, photo } = req.body;134        const secret = process.env.SECRET;135 136        if (!email) {137            return res.status(400).json({ message: 'Email is required for Google Login' });138        }139 140        let user = await User.findOne({ email: email });141 142        if (!user) {143            // Auto-register user if they don't exist144            user = new User({145                name: name || 'Google User',146                email: email,147                passwordHash: bcrypt.hashSync(Math.random().toString(36).slice(-8), 10), // Random secure password148                phone: '',149                isAdmin: false,150                address: '',151                pushToken: '',152                photo: photo || '',153            });154            user = await user.save();155        }156 157        const token = jwt.sign(158            {159                userId: user.id,160                isAdmin: user.isAdmin161            },162            secret,163            { expiresIn: '1d' }164        );165 166        res.status(200).send({ user: user.email, token: token, userId: user.id, pushToken: user.pushToken });167    } catch (err) {168        return res.status(500).json({ message: 'Server error during Google login', error: err.message });169    }170};171