123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { NextRequest, NextResponse } from 'next/server';
- import { db } from '@/lib/db';
- import { users, userActivities } from '@/lib/schema';
- import { eq, and, lt } from 'drizzle-orm';
- export async function POST(request: NextRequest) {
- try {
- console.log('检查过期订阅...');
- // 查找所有过期的订阅
- const expiredSubscriptions = await db.query.users.findMany({
- where: and(
- eq(users.subscriptionStatus, 'active'),
- lt(users.subscriptionEndDate, new Date())
- ),
- });
- let updatedCount = 0;
- for (const user of expiredSubscriptions) {
- // 清零订阅积分并更新订阅状态
- await db.update(users)
- .set({
- subscriptionCredits: 0,
- subscriptionStatus: 'expired',
- updatedAt: new Date()
- })
- .where(eq(users.id, user.id));
- // 记录订阅过期活动
- await db.insert(userActivities).values({
- userId: user.id,
- type: 'subscription_expired',
- description: 'credit_description.subscription_expired',
- creditAmount: -(user.subscriptionCredits || 0),
- metadata: JSON.stringify({
- expiredDate: new Date().toISOString(),
- previousCredits: user.subscriptionCredits || 0,
- planType: user.subscriptionPlan || 'pro'
- }),
- createdAt: new Date(),
- });
- updatedCount++;
- console.log(`用户 ${user.email} 的订阅已过期,积分已清零`);
- }
- return NextResponse.json({
- success: true,
- message: `已处理 ${updatedCount} 个过期订阅`,
- updatedCount
- });
- } catch (error: any) {
- console.error('检查订阅失败:', error);
- return NextResponse.json(
- { error: error.message || '检查订阅失败' },
- { status: 500 }
- );
- }
- }
- // 也支持 GET 请求进行手动检查
- export async function GET(request: NextRequest) {
- return POST(request);
- }
|