@@ -674,6 +674,7 @@ model Partner {
|
||||
id String @id @default(cuid())
|
||||
name String @unique
|
||||
category String
|
||||
categoryId String?
|
||||
latitude Float
|
||||
longitude Float
|
||||
address String?
|
||||
@@ -682,11 +683,27 @@ model Partner {
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
categoryRef PartnerCategory? @relation(fields: [categoryId], references: [id])
|
||||
|
||||
@@index([category])
|
||||
@@index([categoryId])
|
||||
@@index([sortOrder])
|
||||
@@map("partners")
|
||||
}
|
||||
|
||||
// 제휴업체 카테고리(관리자 생성/삭제)
|
||||
model PartnerCategory {
|
||||
id String @id @default(cuid())
|
||||
name String @unique
|
||||
sortOrder Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
partners Partner[]
|
||||
|
||||
@@index([sortOrder])
|
||||
@@map("partner_categories")
|
||||
}
|
||||
|
||||
// 배너/공지 노출용
|
||||
model Banner {
|
||||
id String @id @default(cuid())
|
||||
|
||||
@@ -509,6 +509,37 @@ async function seedMainpageVisibleBoards(boards) {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
console.log("DATABASE_URL:", process.env.DATABASE_URL);
|
||||
try {
|
||||
const tables = await prisma.$queryRaw`SELECT name FROM sqlite_master WHERE type='table'`;
|
||||
console.log("SQLite tables:", tables.map((t) => t.name || t.NAME || JSON.stringify(t)));
|
||||
} catch {}
|
||||
|
||||
// SQLite 수동 보정: partner_categories 테이블과 partners.categoryId 컬럼 보장
|
||||
try {
|
||||
const rows = await prisma.$queryRaw`SELECT name FROM sqlite_master WHERE type='table' AND name='partner_categories'`;
|
||||
if (!Array.isArray(rows) || rows.length === 0) {
|
||||
console.log("Creating missing table: partner_categories");
|
||||
await prisma.$executeRawUnsafe(
|
||||
"CREATE TABLE IF NOT EXISTS partner_categories (\n" +
|
||||
"id TEXT PRIMARY KEY,\n" +
|
||||
"name TEXT NOT NULL UNIQUE,\n" +
|
||||
"sortOrder INTEGER NOT NULL DEFAULT 0,\n" +
|
||||
"createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP\n" +
|
||||
")"
|
||||
);
|
||||
await prisma.$executeRawUnsafe("CREATE INDEX IF NOT EXISTS idx_partner_categories_sortOrder ON partner_categories(sortOrder)");
|
||||
}
|
||||
const cols = await prisma.$queryRaw`PRAGMA table_info('partners')`;
|
||||
const hasCategoryId = Array.isArray(cols) && cols.some((c) => (c.name || c.COLUMN_NAME) === 'categoryId');
|
||||
if (!hasCategoryId) {
|
||||
console.log("Adding missing column: partners.categoryId");
|
||||
await prisma.$executeRawUnsafe("ALTER TABLE partners ADD COLUMN categoryId TEXT");
|
||||
// 외래키 제약은 생략 (SQLite에서는 제약 추가가 까다로움)
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("SQLite schema ensure failed:", e);
|
||||
}
|
||||
await upsertRoles();
|
||||
const admin = await upsertAdmin();
|
||||
const categoryMap = await upsertCategories();
|
||||
@@ -528,8 +559,22 @@ async function main() {
|
||||
{ name: "test", category: "spa", latitude: 37.5700, longitude: 126.9769, address: "서울 종로구" },
|
||||
{ name: "굿짐", category: "gym", latitude: 37.5600, longitude: 126.9820, address: "서울 중구" },
|
||||
];
|
||||
// 파트너 카테고리(PartnerCategory) 생성 및 매핑
|
||||
const partnerCategoryNames = Array.from(new Set(partners.map((p) => p.category).filter(Boolean)));
|
||||
const partnerCategoryMap = {};
|
||||
for (let i = 0; i < partnerCategoryNames.length; i++) {
|
||||
const name = partnerCategoryNames[i];
|
||||
const created = await prisma.partnerCategory.upsert({
|
||||
where: { name },
|
||||
update: { sortOrder: i + 1 },
|
||||
create: { name, sortOrder: i + 1 },
|
||||
});
|
||||
partnerCategoryMap[name] = created;
|
||||
}
|
||||
for (const p of partners) {
|
||||
await prisma.partner.upsert({ where: { name: p.name }, update: p, create: p });
|
||||
const categoryRef = p.category ? partnerCategoryMap[p.category] : null;
|
||||
const data = { ...p, categoryId: categoryRef ? categoryRef.id : null };
|
||||
await prisma.partner.upsert({ where: { name: p.name }, update: data, create: data });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user