refactor: remove auto-seeding logic for agent-type-specific sections to preserve admin customizations
This commit is contained in:
142
prisma/seed.ts
142
prisma/seed.ts
@@ -1244,146 +1244,8 @@ async function main() {
|
||||
|
||||
console.log('');
|
||||
|
||||
// =============================================
|
||||
// Seed Agent-Type-Specific Sections
|
||||
// =============================================
|
||||
// DISABLED: Professional (Agent) and Lender sections are no longer auto-updated on each seed run
|
||||
// to prevent admin customizations (labels, options, sortOrder) from being overwritten.
|
||||
// To re-enable a one-time run, set env var SEED_AGENT_TYPE_SECTIONS=true.
|
||||
if (process.env.SEED_AGENT_TYPE_SECTIONS === 'true') {
|
||||
console.log('📋 Seeding Agent-Type-Specific Sections...');
|
||||
|
||||
// First, delete old global Experience section if exists
|
||||
const oldExperienceSection = await prisma.profileSection.findUnique({
|
||||
where: { slug: 'experience' },
|
||||
});
|
||||
if (oldExperienceSection) {
|
||||
await prisma.profileSection.delete({
|
||||
where: { slug: 'experience' },
|
||||
});
|
||||
console.log(' 🗑️ Deleted old global Experience section');
|
||||
}
|
||||
|
||||
for (const { agentTypeName, section: sectionData } of agentTypeSections) {
|
||||
const { fields, ...sectionInfo } = sectionData;
|
||||
|
||||
// Find the agent type
|
||||
const agentType = await prisma.agentType.findUnique({
|
||||
where: { name: agentTypeName },
|
||||
});
|
||||
|
||||
if (!agentType) {
|
||||
console.log(
|
||||
` ⚠️ Agent type "${agentTypeName}" not found, skipping section`,
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if section already exists
|
||||
let section = await prisma.profileSection.findUnique({
|
||||
where: { slug: sectionInfo.slug },
|
||||
});
|
||||
|
||||
if (section) {
|
||||
console.log(
|
||||
` ⚠️ Section "${sectionInfo.name}" for ${agentTypeName} already exists`,
|
||||
);
|
||||
|
||||
// Still check and create missing fields, or update existing fields with options
|
||||
for (const fieldData of fields) {
|
||||
const existingField = await prisma.profileField.findFirst({
|
||||
where: {
|
||||
sectionId: section.id,
|
||||
slug: fieldData.slug,
|
||||
},
|
||||
});
|
||||
|
||||
if (!existingField) {
|
||||
await prisma.profileField.create({
|
||||
data: {
|
||||
...fieldData,
|
||||
sectionId: section.id,
|
||||
},
|
||||
});
|
||||
console.log(` ✅ Created field: ${fieldData.name}`);
|
||||
} else {
|
||||
// Update existing field with options if options are defined in seed but missing in DB
|
||||
const updates: Record<string, unknown> = {};
|
||||
const fd = fieldData as Partial<{
|
||||
options: unknown;
|
||||
validation: unknown;
|
||||
uiConfig: unknown;
|
||||
}>;
|
||||
|
||||
if (
|
||||
fd.options &&
|
||||
(!existingField.options ||
|
||||
(Array.isArray(existingField.options) &&
|
||||
existingField.options.length === 0))
|
||||
) {
|
||||
updates.options = fd.options;
|
||||
}
|
||||
if (fd.validation && !existingField.validation) {
|
||||
updates.validation = fd.validation;
|
||||
}
|
||||
if (fd.uiConfig && !existingField.uiConfig) {
|
||||
updates.uiConfig = fd.uiConfig;
|
||||
}
|
||||
|
||||
if (Object.keys(updates).length > 0) {
|
||||
await prisma.profileField.update({
|
||||
where: { id: existingField.id },
|
||||
data: updates,
|
||||
});
|
||||
console.log(
|
||||
` ✅ Updated field: ${fieldData.name} (${Object.keys(updates).join(', ')})`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Create section with fields
|
||||
section = await prisma.profileSection.create({
|
||||
data: {
|
||||
...sectionInfo,
|
||||
fields: {
|
||||
create: fields,
|
||||
},
|
||||
},
|
||||
});
|
||||
console.log(
|
||||
` ✅ Created section: ${sectionInfo.name} for ${agentTypeName} with ${fields.length} fields`,
|
||||
);
|
||||
}
|
||||
|
||||
// Create AgentTypeSection assignment if not exists
|
||||
const existingAssignment = await prisma.agentTypeSection.findUnique({
|
||||
where: {
|
||||
agentTypeId_sectionId: {
|
||||
agentTypeId: agentType.id,
|
||||
sectionId: section.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (!existingAssignment) {
|
||||
await prisma.agentTypeSection.create({
|
||||
data: {
|
||||
agentTypeId: agentType.id,
|
||||
sectionId: section.id,
|
||||
sortOrder: sectionInfo.sortOrder,
|
||||
isRequired: false,
|
||||
},
|
||||
});
|
||||
console.log(` ✅ Assigned section to ${agentTypeName}`);
|
||||
}
|
||||
}
|
||||
|
||||
console.log('');
|
||||
} else {
|
||||
console.log('⏭️ Skipping Agent-Type-Specific Sections (set SEED_AGENT_TYPE_SECTIONS=true to enable)');
|
||||
console.log('');
|
||||
}
|
||||
// Agent-Type-Specific Sections (Professional/Lender) are managed exclusively via admin —
|
||||
// the seed no longer creates or updates them so admin customizations are preserved.
|
||||
|
||||
// =============================================
|
||||
// Seed Admin User
|
||||
|
||||
Reference in New Issue
Block a user