295 lines
7.9 KiB
JavaScript
295 lines
7.9 KiB
JavaScript
const { PrismaClient } = require("@prisma/client");
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
// 기본 템플릿 데이터 정의
|
|
const defaultTemplates = [
|
|
{
|
|
template_code: "advanced-data-table-v2",
|
|
template_name: "고급 데이터 테이블 v2",
|
|
template_name_eng: "Advanced Data Table v2",
|
|
description:
|
|
"검색, 필터링, 페이징, CRUD 기능이 포함된 완전한 데이터 테이블 컴포넌트",
|
|
category: "table",
|
|
icon_name: "table",
|
|
default_size: {
|
|
width: 1000,
|
|
height: 680,
|
|
},
|
|
layout_config: {
|
|
components: [
|
|
{
|
|
type: "datatable",
|
|
label: "고급 데이터 테이블",
|
|
position: { x: 0, y: 0 },
|
|
size: { width: 1000, height: 680 },
|
|
style: {
|
|
border: "1px solid #e5e7eb",
|
|
borderRadius: "8px",
|
|
backgroundColor: "#ffffff",
|
|
padding: "0",
|
|
},
|
|
columns: [
|
|
{
|
|
id: "id",
|
|
label: "ID",
|
|
type: "number",
|
|
visible: true,
|
|
sortable: true,
|
|
filterable: false,
|
|
width: 80,
|
|
},
|
|
{
|
|
id: "name",
|
|
label: "이름",
|
|
type: "text",
|
|
visible: true,
|
|
sortable: true,
|
|
filterable: true,
|
|
width: 150,
|
|
},
|
|
{
|
|
id: "email",
|
|
label: "이메일",
|
|
type: "email",
|
|
visible: true,
|
|
sortable: true,
|
|
filterable: true,
|
|
width: 200,
|
|
},
|
|
{
|
|
id: "status",
|
|
label: "상태",
|
|
type: "select",
|
|
visible: true,
|
|
sortable: true,
|
|
filterable: true,
|
|
width: 100,
|
|
},
|
|
{
|
|
id: "created_date",
|
|
label: "생성일",
|
|
type: "date",
|
|
visible: true,
|
|
sortable: true,
|
|
filterable: true,
|
|
width: 120,
|
|
},
|
|
],
|
|
filters: [
|
|
{
|
|
id: "status",
|
|
label: "상태",
|
|
type: "select",
|
|
options: [
|
|
{ label: "전체", value: "" },
|
|
{ label: "활성", value: "active" },
|
|
{ label: "비활성", value: "inactive" },
|
|
],
|
|
},
|
|
{ id: "name", label: "이름", type: "text" },
|
|
{ id: "email", label: "이메일", type: "text" },
|
|
],
|
|
pagination: {
|
|
enabled: true,
|
|
pageSize: 10,
|
|
pageSizeOptions: [5, 10, 20, 50, 100],
|
|
showPageSizeSelector: true,
|
|
showPageInfo: true,
|
|
showFirstLast: true,
|
|
},
|
|
actions: {
|
|
showSearchButton: true,
|
|
searchButtonText: "검색",
|
|
enableExport: true,
|
|
enableRefresh: true,
|
|
enableAdd: true,
|
|
enableEdit: true,
|
|
enableDelete: true,
|
|
addButtonText: "추가",
|
|
editButtonText: "수정",
|
|
deleteButtonText: "삭제",
|
|
},
|
|
addModalConfig: {
|
|
title: "새 데이터 추가",
|
|
description: "테이블에 새로운 데이터를 추가합니다.",
|
|
width: "lg",
|
|
layout: "two-column",
|
|
gridColumns: 2,
|
|
fieldOrder: ["name", "email", "status"],
|
|
requiredFields: ["name", "email"],
|
|
hiddenFields: ["id", "created_date"],
|
|
advancedFieldConfigs: {
|
|
status: {
|
|
type: "select",
|
|
options: [
|
|
{ label: "활성", value: "active" },
|
|
{ label: "비활성", value: "inactive" },
|
|
],
|
|
},
|
|
},
|
|
submitButtonText: "추가",
|
|
cancelButtonText: "취소",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
sort_order: 1,
|
|
is_active: "Y",
|
|
is_public: "Y",
|
|
company_code: "*",
|
|
created_by: "system",
|
|
updated_by: "system",
|
|
},
|
|
{
|
|
template_code: "universal-button",
|
|
template_name: "범용 버튼",
|
|
template_name_eng: "Universal Button",
|
|
description:
|
|
"다양한 기능을 설정할 수 있는 범용 버튼. 상세설정에서 기능을 선택하세요.",
|
|
category: "button",
|
|
icon_name: "mouse-pointer",
|
|
default_size: {
|
|
width: 80,
|
|
height: 36,
|
|
},
|
|
layout_config: {
|
|
components: [
|
|
{
|
|
type: "widget",
|
|
widgetType: "button",
|
|
label: "버튼",
|
|
position: { x: 0, y: 0 },
|
|
size: { width: 80, height: 36 },
|
|
style: {
|
|
backgroundColor: "#3b82f6",
|
|
color: "#ffffff",
|
|
border: "none",
|
|
borderRadius: "6px",
|
|
fontSize: "14px",
|
|
fontWeight: "500",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
sort_order: 2,
|
|
is_active: "Y",
|
|
is_public: "Y",
|
|
company_code: "*",
|
|
created_by: "system",
|
|
updated_by: "system",
|
|
},
|
|
{
|
|
template_code: "file-upload",
|
|
template_name: "파일 첨부",
|
|
template_name_eng: "File Upload",
|
|
description: "드래그앤드롭 파일 업로드 영역",
|
|
category: "file",
|
|
icon_name: "upload",
|
|
default_size: {
|
|
width: 300,
|
|
height: 120,
|
|
},
|
|
layout_config: {
|
|
components: [
|
|
{
|
|
type: "widget",
|
|
widgetType: "file",
|
|
label: "파일 첨부",
|
|
position: { x: 0, y: 0 },
|
|
size: { width: 300, height: 120 },
|
|
style: {
|
|
border: "2px dashed #d1d5db",
|
|
borderRadius: "8px",
|
|
backgroundColor: "#f9fafb",
|
|
display: "flex",
|
|
alignItems: "center",
|
|
justifyContent: "center",
|
|
fontSize: "14px",
|
|
color: "#6b7280",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
sort_order: 3,
|
|
is_active: "Y",
|
|
is_public: "Y",
|
|
company_code: "*",
|
|
created_by: "system",
|
|
updated_by: "system",
|
|
},
|
|
{
|
|
template_code: "form-container",
|
|
template_name: "폼 컨테이너",
|
|
template_name_eng: "Form Container",
|
|
description: "입력 폼을 위한 기본 컨테이너 레이아웃",
|
|
category: "form",
|
|
icon_name: "form",
|
|
default_size: {
|
|
width: 400,
|
|
height: 300,
|
|
},
|
|
layout_config: {
|
|
components: [
|
|
{
|
|
type: "container",
|
|
label: "폼 컨테이너",
|
|
position: { x: 0, y: 0 },
|
|
size: { width: 400, height: 300 },
|
|
style: {
|
|
border: "1px solid #e5e7eb",
|
|
borderRadius: "8px",
|
|
backgroundColor: "#ffffff",
|
|
padding: "16px",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
sort_order: 4,
|
|
is_active: "Y",
|
|
is_public: "Y",
|
|
company_code: "*",
|
|
created_by: "system",
|
|
updated_by: "system",
|
|
},
|
|
];
|
|
|
|
async function seedTemplates() {
|
|
console.log("🌱 템플릿 시드 데이터 삽입 시작...");
|
|
|
|
try {
|
|
// 기존 템플릿이 있는지 확인하고 없는 경우에만 삽입
|
|
for (const template of defaultTemplates) {
|
|
const existing = await prisma.template_standards.findUnique({
|
|
where: { template_code: template.template_code },
|
|
});
|
|
|
|
if (!existing) {
|
|
await prisma.template_standards.create({
|
|
data: template,
|
|
});
|
|
console.log(`✅ 템플릿 '${template.template_name}' 생성됨`);
|
|
} else {
|
|
console.log(`⏭️ 템플릿 '${template.template_name}' 이미 존재함`);
|
|
}
|
|
}
|
|
|
|
console.log("🎉 템플릿 시드 데이터 삽입 완료!");
|
|
} catch (error) {
|
|
console.error("❌ 템플릿 시드 데이터 삽입 실패:", error);
|
|
throw error;
|
|
} finally {
|
|
await prisma.$disconnect();
|
|
}
|
|
}
|
|
|
|
// 스크립트가 직접 실행될 때만 시드 함수 실행
|
|
if (require.main === module) {
|
|
seedTemplates().catch((error) => {
|
|
console.error(error);
|
|
process.exit(1);
|
|
});
|
|
}
|
|
|
|
module.exports = { seedTemplates };
|