summaryrefslogtreecommitdiff
path: root/app/api/cron/cleanup-users/route.ts
blob: d3b7a203743e97298b5d9069f0667eb1d5ac4307 (plain)
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
// app/api/cron/cleanup-users/route.ts
import { deactivateInactiveUsers } from '@/lib/users/auth/partners-auth';
import { NextRequest } from 'next/server';

export async function GET(request: NextRequest) {
  try {
    // 보안: 헤더 또는 쿼리 파라미터로 인증
    const authToken = request.headers.get('x-cron-secret') || 
                     request.nextUrl.searchParams.get('secret');
    
    if (authToken !== process.env.CRON_SECRET) {
      console.log('Unauthorized cron request');
      return new Response('Unauthorized', { status: 401 });
    }

    console.log(`[${new Date().toISOString()}] Starting user cleanup job...`);
    
    const result = await deactivateInactiveUsers(90); // 90일
    
    const message = `User cleanup completed: ${result.deactivatedCount} users deactivated`;
    console.log(`[${new Date().toISOString()}] ${message}`);
    
    return Response.json({ 
      success: true, 
      message,
      deactivatedCount: result.deactivatedCount,
      timestamp: new Date().toISOString()
    });
    
  } catch (error) {
    const errorMessage = `User cleanup job failed: ${error.message}`;
    console.error(`[${new Date().toISOString()}] ${errorMessage}`);
    
    return Response.json({ 
      success: false, 
      error: errorMessage,
      timestamp: new Date().toISOString()
    }, { status: 500 });
  }
}