import { NextApiRequest, NextApiResponse } from 'next' import { auth, db } from './supabase' import { Database } from '../types/database' // 用户类型定义 export type User = Database['public']['Tables']['users']['Row'] // API响应类型 export interface ApiResponse { success: boolean data?: T error?: string message?: string } // 认证中间件 export async function authenticateUser(req: NextApiRequest, res: NextApiResponse) { try { const user = await auth.getCurrentUser() if (!user) { res.status(401).json({ success: false, error: '未登录' }) return null } return user } catch (error) { console.error('Authentication error:', error) res.status(401).json({ success: false, error: '认证失败' }) return null } } // 获取用户详细信息 export async function getUserProfile(userId: string): Promise { try { const users = await db.select('users', '*') return users.find(user => user.id === userId) || null } catch (error) { console.error('Get user profile error:', error) return null } } // 错误处理函数 export function handleApiError(res: NextApiResponse, error: unknown, context: string) { console.error(`${context} error:`, error) const errorMessage = error instanceof Error ? error.message : '未知错误' // 处理Supabase特定错误 if (errorMessage.includes('Invalid login credentials')) { return res.status(401).json({ success: false, error: '邮箱或密码错误' }) } else if (errorMessage.includes('Email not confirmed')) { return res.status(401).json({ success: false, error: '请先验证邮箱' }) } else if (errorMessage.includes('Too many requests')) { return res.status(429).json({ success: false, error: '请求过于频繁,请稍后再试' }) } else if (errorMessage.includes('User already registered')) { return res.status(400).json({ success: false, error: '该邮箱已被注册' }) } return res.status(500).json({ success: false, error: '服务器内部错误', details: process.env.NODE_ENV === 'development' ? errorMessage : undefined }) } // 验证邮箱格式 export function validateEmail(email: string): boolean { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ return emailRegex.test(email) } // 验证密码强度 export function validatePassword(password: string): { valid: boolean; message?: string } { if (password.length < 6) { return { valid: false, message: '密码长度至少为6位' } } return { valid: true } } // 生成订单号 export function generateOrderNumber(): string { return `ORD-${new Date().getFullYear()}-${String(Date.now()).slice(-6)}` } // 计算服务费用 export function calculateServiceCost(serviceType: string, duration?: number): number { switch (serviceType) { case 'phone_interpretation': return (duration || 30) * 3 // 每分钟3元 case 'video_interpretation': return (duration || 30) * 4 // 每分钟4元 case 'on_site_interpretation': return (duration || 60) * 5 // 每分钟5元 case 'document_translation': return 100 // 固定100元 default: return 0 } }