// app/api/admin/clear-test-data/route.ts 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 all test data...') 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) deletedCounts.formEntries = deletedEntries.rowCount || 0 console.log('Deleted form entries:', deletedCounts.formEntries) // 9. tags 삭제 const deletedTags = await db.delete(tags) deletedCounts.tags = deletedTags.rowCount || 0 console.log('Deleted tags:', deletedCounts.tags) // 10. forms 삭제 const deletedForms = await db.delete(forms) deletedCounts.forms = deletedForms.rowCount || 0 console.log('Deleted forms:', deletedCounts.forms) // 11. formMetas 삭제 const deletedMetas = await db.delete(formMetas) 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: 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', details: error instanceof Error ? error.message : 'Unknown error' }, { status: 500 }) } } // GET 요청도 지원 (브라우저에서 직접 접근 시) export async function GET() { if (process.env.NODE_ENV !== 'development') { 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', tables: [ 'tagClassAttributes', 'tagClasses', 'tagSubfieldOptions', 'tagSubfields', 'tagTypes', 'tagTypeClassFormMappings', 'vendorDataReportTemps', 'formEntries', 'tags', 'forms', 'formMetas' ] }) }