125 lines
3.3 KiB
TypeScript
125 lines
3.3 KiB
TypeScript
|
import { NextApiRequest, NextApiResponse } from 'next'
|
||
|
import { getDemoData } from '../../../lib/demo-data'
|
||
|
import {
|
||
|
authenticateUser,
|
||
|
getUserProfile,
|
||
|
handleApiError,
|
||
|
generateOrderNumber,
|
||
|
calculateServiceCost,
|
||
|
User
|
||
|
} from '../../../lib/api-utils'
|
||
|
import { db } from '../../../lib/supabase'
|
||
|
|
||
|
export default async function handler(
|
||
|
req: NextApiRequest,
|
||
|
res: NextApiResponse
|
||
|
) {
|
||
|
// 认证用户
|
||
|
const user = await authenticateUser(req, res)
|
||
|
if (!user) return // 错误已在authenticateUser中处理
|
||
|
|
||
|
if (req.method === 'GET') {
|
||
|
// 获取订单列表
|
||
|
try {
|
||
|
// 在演示模式下返回演示数据
|
||
|
if (process.env.NODE_ENV === 'development' && !process.env.SUPABASE_URL) {
|
||
|
const demoOrders = await getDemoData.orders()
|
||
|
return res.status(200).json({
|
||
|
success: true,
|
||
|
data: {
|
||
|
orders: demoOrders,
|
||
|
total: demoOrders.length
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// 从数据库获取订单
|
||
|
const orders = await db.select('orders', '*')
|
||
|
|
||
|
// 根据用户类型过滤订单
|
||
|
const currentUser = await getUserProfile(user.id)
|
||
|
|
||
|
let filteredOrders = orders
|
||
|
if (currentUser && currentUser.user_type === 'individual') {
|
||
|
// 个人用户只能看到自己的订单
|
||
|
filteredOrders = orders.filter((order: any) => order.user_id === user.id)
|
||
|
}
|
||
|
// 企业用户和管理员可以看到所有订单
|
||
|
|
||
|
return res.status(200).json({
|
||
|
success: true,
|
||
|
data: {
|
||
|
orders: filteredOrders,
|
||
|
total: filteredOrders.length
|
||
|
}
|
||
|
})
|
||
|
} catch (error) {
|
||
|
return handleApiError(res, error, 'Get orders')
|
||
|
}
|
||
|
|
||
|
} else if (req.method === 'POST') {
|
||
|
// 创建新订单
|
||
|
const {
|
||
|
service_type,
|
||
|
service_name,
|
||
|
source_language,
|
||
|
target_language,
|
||
|
duration,
|
||
|
priority = 'normal',
|
||
|
scheduled_time,
|
||
|
notes
|
||
|
} = req.body
|
||
|
|
||
|
// 验证必填字段
|
||
|
if (!service_type || !source_language || !target_language) {
|
||
|
return res.status(400).json({
|
||
|
success: false,
|
||
|
error: '缺少必填字段',
|
||
|
details: '服务类型、源语言和目标语言为必填项'
|
||
|
})
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
// 获取用户信息
|
||
|
const currentUser = await getUserProfile(user.id)
|
||
|
|
||
|
const orderData = {
|
||
|
order_number: generateOrderNumber(),
|
||
|
user_id: user.id,
|
||
|
user_name: currentUser?.name || user.email,
|
||
|
user_email: user.email,
|
||
|
service_type,
|
||
|
service_name: service_name || service_type,
|
||
|
source_language,
|
||
|
target_language,
|
||
|
duration: duration || null,
|
||
|
status: 'pending',
|
||
|
priority,
|
||
|
cost: calculateServiceCost(service_type, duration),
|
||
|
currency: 'CNY',
|
||
|
scheduled_time: scheduled_time || null,
|
||
|
notes: notes || null,
|
||
|
created_at: new Date().toISOString(),
|
||
|
updated_at: new Date().toISOString()
|
||
|
}
|
||
|
|
||
|
const newOrder = await db.insert('orders', orderData)
|
||
|
|
||
|
return res.status(201).json({
|
||
|
success: true,
|
||
|
message: '订单创建成功',
|
||
|
data: {
|
||
|
order: newOrder
|
||
|
}
|
||
|
})
|
||
|
} catch (error) {
|
||
|
return handleApiError(res, error, 'Create order')
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
return res.status(405).json({
|
||
|
success: false,
|
||
|
error: '方法不允许'
|
||
|
})
|
||
|
}
|
||
|
}
|