summaryrefslogtreecommitdiff
path: root/app/api/cron/cleanup-users
diff options
context:
space:
mode:
Diffstat (limited to 'app/api/cron/cleanup-users')
-rw-r--r--app/api/cron/cleanup-users/route.ts40
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