File size: 3,119 Bytes
4bea261
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { txasupabase } from '../../../lib/txasupabase.js';

export const POST = async ({ request }) => {
  try {
    const body = await request.json();
    const { browser_token, zalo_nickname } = body;

    if (!browser_token || !zalo_nickname) {
      return new Response(JSON.stringify({ error: 'Thiếu thông tin yêu cầu!' }), {
        status: 400,
        headers: { 'Content-Type': 'application/json' }
      });
    }

    // 1. Tạo hoặc cập nhật request vào database
    const accessRequest = await txasupabase.createZaloAccessRequest(browser_token, zalo_nickname);

    // 2. Ghi lại log hoạt động hệ thống
    await txasupabase.createLog(
      'zalo_access_request',
      'info',
      `Thành viên Zalo "${zalo_nickname}" gửi yêu cầu truy cập từ trình duyệt ${browser_token}`,
      { browser_token, zalo_nickname }
    );

    // 3. Gửi email thông báo cho Admin
    try {
      const settings = await txasupabase.getSettings();
      
      // Tìm email Admin nhận thông báo
      let adminEmail = settings.admin_email || settings.smtp_user;
      if (!adminEmail) {
        // Tìm user admin đầu tiên từ DB làm dự phòng
        const { data: adminUsers } = await txasupabase.supabase
          .from('users')
          .select('email')
          .eq('role', 'admin')
          .limit(1);
        if (adminUsers && adminUsers.length > 0) {
          adminEmail = adminUsers[0].email;
        }
      }

      if (adminEmail && settings.smtp_user && settings.smtp_pass) {
        const siteUrl = settings.site_url || 'http://localhost:4321';
        const approveUrl = `${siteUrl}/admin/duyet-zalo`; // Trang duyệt chuyên dụng riêng biệt
        
        await txasupabase.sendMail({
          to: adminEmail,
          subject: `[TPHIMX] Yêu cầu duyệt quyền truy cập mới từ Zalo: ${zalo_nickname}`,
          templateName: 'zalo_access_request',
          placeholders: {
            zalo_nickname,
            browser_token,
            request_time: new Date().toLocaleString('vi-VN'),
            approve_url: approveUrl
          }
        });
      } else {
        console.log('[Access Request API]: SMTP not configured or Admin email missing, skipped email notification.');
      }
    } catch (mailErr) {
      console.error('[Access Request Mail Error]:', mailErr);
      await txasupabase.createLog(
        'zalo_access_request_mail_failed',
        'warn',
        `Lỗi gửi mail thông báo Zalo access cho "${zalo_nickname}": ${mailErr.message}`
      );
    }

    return new Response(JSON.stringify({ 
      success: true, 
      message: 'Gửi yêu cầu thành công! Vui lòng chờ Admin duyệt nick Zalo của bạn.',
      data: accessRequest
    }), {
      status: 200,
      headers: { 'Content-Type': 'application/json' }
    });
  } catch (err) {
    console.error('Error handling access request API:', err);
    return new Response(JSON.stringify({ error: 'Có lỗi xảy ra trên hệ thống!' }), {
      status: 500,
      headers: { 'Content-Type': 'application/json' }
    });
  }
};