ibrohm's picture
Initial deploy via assistant API
7b3aac2 verified
const express = require('express');
const router = express.Router();
const User = require('../models/User');
// POST register
router.post('/register', async (req, res) => {
try {
const { name, phone, password, email } = req.body;
const existing = await User.findOne({ phone });
if (existing) {
return res.status(400).json({ success: false, message: "Bu telefon raqam allaqachon ro'yxatdan o'tgan." });
}
const user = new User({ name, phone, password, email: email || '' });
await user.save();
res.json({
success: true,
user: { id: user._id, name: user.name, phone: user.phone, email: user.email }
});
} catch (err) {
res.status(500).json({ success: false, message: err.message });
}
});
// POST login
router.post('/login', async (req, res) => {
try {
const { phone, password } = req.body;
// Support login by phone or email
const user = await User.findOne({ $or: [{ phone }, { email: phone }] });
if (!user) {
return res.status(401).json({ success: false, message: "Telefon raqam yoki parol noto'g'ri." });
}
const isMatch = await user.comparePassword(password);
if (!isMatch) {
return res.status(401).json({ success: false, message: "Telefon raqam yoki parol noto'g'ri." });
}
res.json({
success: true,
user: { id: user._id, name: user.name, phone: user.phone, email: user.email }
});
} catch (err) {
res.status(500).json({ success: false, message: err.message });
}
});
// GET current user profile
router.get('/profile/:id', async (req, res) => {
try {
const user = await User.findById(req.params.id).select('-password');
if (!user) return res.status(404).json({ error: 'Foydalanuvchi topilmadi' });
res.json(user);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// PUT update profile
router.put('/profile/:id', async (req, res) => {
try {
const updates = { ...req.body };
delete updates.password; // Don't allow password change via this endpoint
const user = await User.findByIdAndUpdate(req.params.id, updates, { new: true }).select('-password');
if (!user) return res.status(404).json({ error: 'Foydalanuvchi topilmadi' });
res.json(user);
} catch (err) {
res.status(400).json({ error: err.message });
}
});
// POST Google login (Firebase Auth)
router.post('/google-login', async (req, res) => {
try {
const { uid, name, email, phone, photoURL } = req.body;
// Find existing user by Firebase UID or email
let user = await User.findOne({ $or: [{ firebaseUid: uid }, { email: email }] });
if (user) {
// Update existing user
user.firebaseUid = uid;
user.name = name || user.name;
if (photoURL) user.photoURL = photoURL;
await user.save();
} else {
// Create new user
user = new User({
name,
email: email || '',
phone: phone || '',
password: 'google_' + uid, // placeholder password
firebaseUid: uid,
photoURL: photoURL || ''
});
await user.save();
}
res.json({
success: true,
user: { id: user._id, name: user.name, phone: user.phone, email: user.email, photoURL: user.photoURL }
});
} catch (err) {
res.status(500).json({ success: false, message: err.message });
}
});
module.exports = router;