File size: 2,264 Bytes
1906404
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { createUser, getUser } from '../services/firebaseService.js';
import { adminAuth } from '../config/firebase.js';

/**
 * POST /api/auth/signup
 * Body: { name, email, uid }
 * Creates a Firestore user profile after client-side Firebase Auth signup.
 */
export async function signup(req, res) {
  try {
    const { name, email, uid } = req.body;

    if (!uid || !email) {
      return res.status(400).json({ error: 'uid and email are required.' });
    }

    const user = await createUser(uid, { name, email });
    res.status(201).json({ message: 'User profile created.', user });
  } catch (error) {
    console.error('Signup error:', error);
    res.status(500).json({ error: 'Failed to create user profile.' });
  }
}

/**
 * POST /api/auth/login
 * Body: { uid }
 * Returns Firestore user profile after client-side Firebase Auth login.
 */
export async function login(req, res) {
  try {
    const { uid } = req.body;

    if (!uid) {
      return res.status(400).json({ error: 'uid is required.' });
    }

    let user = await getUser(uid);
    
    if (!user) {
      // Auto-create from Firebase Auth record
      try {
        const authUser = await adminAuth.getUser(uid);
        user = await createUser(uid, {
          name: authUser.displayName || authUser.email?.split('@')[0] || 'User',
          email: authUser.email || '',
        });
        user = { id: uid, ...user };
      } catch {
        return res.status(404).json({ error: 'User not found.' });
      }
    }

    res.json({ user });
  } catch (error) {
    console.error('Login error:', error);
    res.status(500).json({ error: 'Failed to fetch user profile.' });
  }
}

/**
 * POST /api/auth/google
 * Body: { uid, name, email }
 * Creates or retrieves Firestore profile for Google-authenticated users.
 */
export async function googleAuth(req, res) {
  try {
    const { uid, name, email } = req.body;

    if (!uid || !email) {
      return res.status(400).json({ error: 'uid and email are required.' });
    }

    const user = await createUser(uid, { name, email });
    res.json({ user: { id: uid, ...user } });
  } catch (error) {
    console.error('Google auth error:', error);
    res.status(500).json({ error: 'Failed to process Google authentication.' });
  }
}