diff options
Diffstat (limited to 'app/api')
| -rw-r--r-- | app/api/admin/clear-test-data/route.ts | 136 |
1 files changed, 106 insertions, 30 deletions
diff --git a/app/api/admin/clear-test-data/route.ts b/app/api/admin/clear-test-data/route.ts index 9a5c8458..8442e5de 100644 --- a/app/api/admin/clear-test-data/route.ts +++ b/app/api/admin/clear-test-data/route.ts @@ -1,44 +1,107 @@ // app/api/admin/clear-test-data/route.ts -import db from '@/db/db' -import { formEntries, forms, formMetas, tags } from '@/db/schema/vendorData' +import db from '@/db/db' +import { + formEntries, + forms, + formMetas, + tags, + tagTypes, + tagSubfields, + tagSubfieldOptions, + tagClasses, + tagClassAttributes, + tagTypeClassFormMappings, + vendorDataReportTemps +} from '@/db/schema/vendorData' import { NextRequest } from 'next/server' export async function DELETE(request: NextRequest) { - try { - // 외래키 참조 순서를 고려하여 삭제 (자식 테이블부터) - console.log('Clearing test data...') + // 외래키 참조 순서를 고려하여 삭제 (자식 테이블부터 부모 테이블 순) + console.log('Clearing all test data...') - // 1. form_entries 삭제 + const deletedCounts = { + tagClassAttributes: 0, + tagClasses: 0, + tagSubfieldOptions: 0, + tagSubfields: 0, + tagTypes: 0, + tagTypeClassFormMappings: 0, + vendorDataReportTemps: 0, + formEntries: 0, + tags: 0, + forms: 0, + formMetas: 0 + } + + // 1. tagClassAttributes 삭제 (가장 하위 자식) + const deletedTagClassAttributes = await db.delete(tagClassAttributes) + deletedCounts.tagClassAttributes = deletedTagClassAttributes.rowCount || 0 + console.log('Deleted tag class attributes:', deletedCounts.tagClassAttributes) + + // 2. tagClasses 삭제 + const deletedTagClasses = await db.delete(tagClasses) + deletedCounts.tagClasses = deletedTagClasses.rowCount || 0 + console.log('Deleted tag classes:', deletedCounts.tagClasses) + + // 3. tagSubfieldOptions 삭제 + const deletedTagSubfieldOptions = await db.delete(tagSubfieldOptions) + deletedCounts.tagSubfieldOptions = deletedTagSubfieldOptions.rowCount || 0 + console.log('Deleted tag subfield options:', deletedCounts.tagSubfieldOptions) + + // 4. tagSubfields 삭제 + const deletedTagSubfields = await db.delete(tagSubfields) + deletedCounts.tagSubfields = deletedTagSubfields.rowCount || 0 + console.log('Deleted tag subfields:', deletedCounts.tagSubfields) + + // 5. tagTypes 삭제 + const deletedTagTypes = await db.delete(tagTypes) + deletedCounts.tagTypes = deletedTagTypes.rowCount || 0 + console.log('Deleted tag types:', deletedCounts.tagTypes) + + // 6. tagTypeClassFormMappings 삭제 + const deletedMappings = await db.delete(tagTypeClassFormMappings) + deletedCounts.tagTypeClassFormMappings = deletedMappings.rowCount || 0 + console.log('Deleted tag type class form mappings:', deletedCounts.tagTypeClassFormMappings) + + // 7. vendorDataReportTemps 삭제 + const deletedVendorReports = await db.delete(vendorDataReportTemps) + deletedCounts.vendorDataReportTemps = deletedVendorReports.rowCount || 0 + console.log('Deleted vendor data report temps:', deletedCounts.vendorDataReportTemps) + + // 8. formEntries 삭제 const deletedEntries = await db.delete(formEntries) - console.log('Deleted form entries') - - // 2. tags 삭제 + deletedCounts.formEntries = deletedEntries.rowCount || 0 + console.log('Deleted form entries:', deletedCounts.formEntries) + + // 9. tags 삭제 const deletedTags = await db.delete(tags) - console.log('Deleted tags') - - // 3. forms 삭제 + deletedCounts.tags = deletedTags.rowCount || 0 + console.log('Deleted tags:', deletedCounts.tags) + + // 10. forms 삭제 const deletedForms = await db.delete(forms) - console.log('Deleted forms') - - // 4. form_metas 삭제 + deletedCounts.forms = deletedForms.rowCount || 0 + console.log('Deleted forms:', deletedCounts.forms) + + // 11. formMetas 삭제 const deletedMetas = await db.delete(formMetas) - console.log('Deleted form metas') - - return Response.json({ - success: true, + deletedCounts.formMetas = deletedMetas.rowCount || 0 + console.log('Deleted form metas:', deletedCounts.formMetas) + + console.log('All test data cleared successfully') + + return Response.json({ + success: true, message: 'All test data cleared successfully', - deleted: { - formEntries: deletedEntries, - tags: deletedTags, - forms: deletedForms, - formMetas: deletedMetas - } + deleted: deletedCounts, + totalDeleted: Object.values(deletedCounts).reduce((sum, count) => sum + count, 0) }) + } catch (error) { console.error('Error clearing test data:', error) - return Response.json({ - error: 'Failed to clear data', + return Response.json({ + error: 'Failed to clear data', details: error instanceof Error ? error.message : 'Unknown error' }, { status: 500 }) } @@ -47,14 +110,27 @@ export async function DELETE(request: NextRequest) { // GET 요청도 지원 (브라우저에서 직접 접근 시) export async function GET() { if (process.env.NODE_ENV !== 'development') { - return Response.json({ - error: 'Not allowed in production' + return Response.json({ + error: 'Not allowed in production' }, { status: 403 }) } return Response.json({ message: 'Use DELETE method to clear test data', endpoint: '/api/admin/clear-test-data', - method: 'DELETE' + method: 'DELETE', + tables: [ + 'tagClassAttributes', + 'tagClasses', + 'tagSubfieldOptions', + 'tagSubfields', + 'tagTypes', + 'tagTypeClassFormMappings', + 'vendorDataReportTemps', + 'formEntries', + 'tags', + 'forms', + 'formMetas' + ] }) }
\ No newline at end of file |
