From e9897d416b3e7327bbd4d4aef887eee37751ae82 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Fri, 27 Jun 2025 01:16:20 +0000 Subject: (대표님) 20250627 오전 10시 작업사항 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/cron/cleanup-users/route.ts | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 app/api/cron/cleanup-users/route.ts (limited to 'app/api/cron') 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 -- cgit v1.2.3