diff options
Diffstat (limited to 'app/api/cron/cleanup-users/route.ts')
| -rw-r--r-- | app/api/cron/cleanup-users/route.ts | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/app/api/cron/cleanup-users/route.ts b/app/api/cron/cleanup-users/route.ts new file mode 100644 index 00000000..d3b7a203 --- /dev/null +++ b/app/api/cron/cleanup-users/route.ts @@ -0,0 +1,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 }); + } +}
\ No newline at end of file |
