89 lines
4.8 KiB
JavaScript

const { PetGroup, PetSpecies, PetBreed, PetDisease, sequelize } = require('../models');
const seedData = async () => {
try {
const groupCount = await PetGroup.count();
if (groupCount > 0) {
console.log('Master data already exists. Skipping seed.');
return;
}
console.log('Seeding Master Data...');
// Data from pet_data.dart
const diseaseList = [
"피부질환", "눈 질환", "치아 / 구강 질환", "뼈 / 관절 질환", "생식기 / 비뇨기 질환",
"심장 / 혈관 질환", "소화기 질환", "호흡기 질환", "내분비계 질환", "뇌신경 질환",
"생식기 질환", "귀 질환", "코 질환", "기타"
];
const breedsData = {
"포유류": {
"강아지": ["말티즈", "푸들", "포메라니안", "믹스견", "치와와", "시츄", "비숑 프리제", "골든 리트리버", "진돗개", "웰시 코기", "프렌치 불독", "시바견", "닥스후트", "요크셔 테리어", "보더 콜리", "사모예드", "허스키", "말라뮤트", "기타(직접 입력)"],
"고양이": ["코리안 숏헤어", "브리티시 숏헤어", "아메리칸 숏헤어", "뱅갈", "메인쿤", "데본 렉스", "페르시안", "러시안 블루", "샴", "렉돌", "스코티시 폴드", "먼치킨", "노르웨이 숲", "믹스묘", "기타(직접 입력)"],
"햄스터": ["정글리안", "펄", "푸딩", "골든 햄스터", "로보로브스키", "기타(직접 입력)"],
"토끼": ["롭이어", "더치", "라이언 헤드", "드워프", "렉스", "기타(직접 입력)"],
"기니피그": ["잉글리쉬", "아비시니안", "페루비안", "실키", "기타(직접 입력)"],
"고슴도치": ["플라티나", "화이트 초코", "알비노", "핀토", "기타(직접 입력)"],
"기타(직접 입력)": ["기타(직접 입력)"]
},
"파충류": {
"거북이": ["커먼 머스크 터틀", "레이저백", "육지거북", "붉은귀거북", "남생이", "기타(직접 입력)"],
"도마뱀": ["크레스티드 게코", "리키에너스 게코", "가고일 게코", "레오파드 게코", "비어디 드래곤", "블루텅 스킨크", "이구아나", "기타(직접 입력)"],
"뱀": ["볼 파이톤", "가터 스네이크", "호그노즈 스네이크", "콘 스네이크", "킹 스네이크", "밀크 스네이크", "기타(직접 입력)"],
"기타(직접 입력)": ["기타(직접 입력)"]
},
"조류": {
"앵무새(소/중형)": ["사랑앵무(잉꼬)", "코카티엘(왕관앵무)", "모란앵무", "코뉴어", "퀘이커", "카카리키", "사자나미(빗금앵무)", "유리앵무", "기타(직접 입력)"],
"앵무새(대형)": ["뉴기니아", "회색앵무", "금강앵무(마카우)", "유황앵무(코카투)", "아마존앵무", "대본영", "기타(직접 입력)"],
"핀치/관상조": ["카나리아", "십자매", "문조", "금화조", "호금조", "백문조", "기타(직접 입력)"],
"비둘기/닭/메추리": ["애완용 비둘기", "관상닭(실키 등)", "메추리", "미니메추리", "오리/거위", "기타(직접 입력)"],
"기타(직접 입력)": ["직접 입력"]
},
"양서류": {
"개구리": ["청개구리", "팩맨", "다트 프록", "화이트 트리 프록", "기타(직접 입력)"],
"도룡뇽": ["우파루파", "파이어 벨리 뉴트", "타이거 살라만더", "기타(직접 입력)"],
"기타(직접 입력)": ["기타(직접 입력)"]
},
"어류": {
"열대어": ["구피", "베타", "테트라", "디스커스", "엔젤피쉬", "기타(직접 입력)"],
"금붕어/잉어": ["금붕어", "비단잉어", "기타(직접 입력)"],
"해수어": ["크라운피쉬(니모)", "블루탱", "기타(직접 입력)"],
"기타(직접 입력)": ["기타(직접 입력)"]
},
"기타(직접 입력)": {
"기타(직접 입력)": ["기타(직접 입력)"]
}
};
// 1. Seed Diseases
for (const d of diseaseList) {
await PetDisease.findOrCreate({ where: { name: d } });
}
// 2. Seed Group -> Species -> Breeds
for (const [groupName, speciesMap] of Object.entries(breedsData)) {
const [group] = await PetGroup.findOrCreate({ where: { name: groupName } });
for (const [speciesName, breedList] of Object.entries(speciesMap)) {
const [species] = await PetSpecies.findOrCreate({
where: { name: speciesName, groupId: group.id }
});
for (const breedName of breedList) {
await PetBreed.findOrCreate({
where: { name: breedName, speciesId: species.id }
});
}
}
}
console.log('Master Data Seeded Successfully.');
} catch (error) {
console.error('Seeding Failed:', error);
}
};
module.exports = seedData;