1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
// 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,
templateItems
} 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,
templateItems: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)
const deletedTemplateItems = await db.delete(templateItems);
deletedCounts.templateItems = deletedTemplateItems.rowCount || 0;
console.log('Deleted template items:', deletedCounts.templateItems);
// 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'
]
})
}
|