Tech4biz-channel/Channel-Backend/seed.ts
2026-07-09 15:32:31 +05:30

186 lines
5.6 KiB
TypeScript

import dotenv from 'dotenv';
dotenv.config();
import prisma from './src/utils/db';
import bcrypt from 'bcrypt';
async function seed() {
console.log('Starting database seeding...');
// 1. Seed Active Legal Documents
let ndaDoc = await prisma.legalDocument.findFirst({
where: { type: 'NDA', version: '1.0' }
});
if (!ndaDoc) {
ndaDoc = await prisma.legalDocument.create({
data: {
type: 'NDA',
version: '1.0',
content: 'This is the standard Non-Disclosure Agreement content. By signing this document, you agree to keep all technical and business materials confidential.',
isActive: true,
}
});
console.log('Seeded NDA Document.');
} else {
console.log('NDA Document already exists.');
}
let msaDoc = await prisma.legalDocument.findFirst({
where: { type: 'MSA', version: '1.0' }
});
if (!msaDoc) {
msaDoc = await prisma.legalDocument.create({
data: {
type: 'MSA',
version: '1.0',
content: 'This is the standard Master Services Agreement content. It defines the core relationship, deliverables, and service levels between Tech4Biz and the partner.',
isActive: true,
}
});
console.log('Seeded MSA Document.');
} else {
console.log('MSA Document already exists.');
}
// 2. Hash Password
const passwordHash = await bcrypt.hash('Password123', 10);
// Create default Partner organization
let partnerOrg = await prisma.organization.findFirst({
where: { name: 'PARTNER' }
});
if (!partnerOrg) {
partnerOrg = await prisma.organization.create({
data: { name: 'PARTNER' }
});
console.log('Seeded PARTNER organization.');
}
// 3. Seed Admin
const adminEmail = 'admin@tech4biz.com';
let adminUser = await prisma.user.findUnique({ where: { email: adminEmail } });
if (!adminUser) {
adminUser = await prisma.user.create({
data: {
email: adminEmail,
passwordHash,
role: 'ADMIN',
onboardingStatus: 'APPROVED',
mfaEnabled: false,
}
});
console.log(`Seeded Admin User: ${adminEmail}`);
} else {
console.log(`Admin User already exists: ${adminEmail}`);
}
// 4. Seed Partner 1: Awaiting onboarding
const onboardingEmail = 'pending-onboarding@partner.com';
let onboardingUser = await prisma.user.findUnique({ where: { email: onboardingEmail } });
if (!onboardingUser) {
onboardingUser = await prisma.user.create({
data: {
email: onboardingEmail,
passwordHash,
role: 'PARTNER_USER',
onboardingStatus: 'PENDING_ONBOARDING',
mfaEnabled: false,
organizationId: partnerOrg.id
}
});
console.log(`Seeded Partner (Pending Onboarding): ${onboardingEmail}`);
} else {
console.log(`Partner (Pending Onboarding) already exists: ${onboardingEmail}`);
}
// 5. Seed Partner 2: Awaiting admin approval (Signed NDA & MSA)
const pendingApprovalEmail = 'pending-approval@partner.com';
let pendingApprovalUser = await prisma.user.findUnique({ where: { email: pendingApprovalEmail } });
if (!pendingApprovalUser) {
pendingApprovalUser = await prisma.user.create({
data: {
email: pendingApprovalEmail,
passwordHash,
role: 'PARTNER_USER',
onboardingStatus: 'PENDING_APPROVAL',
mfaEnabled: false,
organizationId: partnerOrg.id
}
});
console.log(`Seeded Partner (Pending Approval): ${pendingApprovalEmail}`);
// Seed LegalAcceptance for NDA
await prisma.legalAcceptance.create({
data: {
docId: ndaDoc.id,
userId: pendingApprovalUser.id,
ipAddress: '127.0.0.1',
signatureHash: 'sha256-dummyndaaccept1234567890abcdef',
acceptedAt: new Date()
}
});
// Seed LegalAcceptance for MSA
await prisma.legalAcceptance.create({
data: {
docId: msaDoc.id,
userId: pendingApprovalUser.id,
ipAddress: '127.0.0.1',
signatureHash: 'sha256-dummymsaaccept1234567890abcdef',
acceptedAt: new Date()
}
});
console.log('Seeded Legal Acceptances for NDA/MSA for pending-approval partner.');
} else {
console.log(`Partner (Pending Approval) already exists: ${pendingApprovalEmail}`);
}
// 6. Seed Partner 3: Fully active & approved
const activeEmail = 'active-partner@partner.com';
let activeUser = await prisma.user.findUnique({ where: { email: activeEmail } });
if (!activeUser) {
activeUser = await prisma.user.create({
data: {
email: activeEmail,
passwordHash,
role: 'PARTNER_USER',
onboardingStatus: 'APPROVED',
mfaEnabled: false,
organizationId: partnerOrg.id
}
});
console.log(`Seeded Partner (Approved): ${activeEmail}`);
// Seed LegalAcceptance for NDA
await prisma.legalAcceptance.create({
data: {
docId: ndaDoc.id,
userId: activeUser.id,
ipAddress: '127.0.0.1',
signatureHash: 'sha256-dummyndaacceptactive987654321',
acceptedAt: new Date()
}
});
// Seed LegalAcceptance for MSA
await prisma.legalAcceptance.create({
data: {
docId: msaDoc.id,
userId: activeUser.id,
ipAddress: '127.0.0.1',
signatureHash: 'sha256-dummymsaacceptactive987654321',
acceptedAt: new Date()
}
});
console.log('Seeded Legal Acceptances for NDA/MSA for active partner.');
} else {
console.log(`Partner (Approved) already exists: ${activeEmail}`);
}
console.log('Seeding completed successfully.');
}
seed()
.catch((err) => {
console.error('Seeding failed:', err);
process.exit(1);
})
.finally(() => prisma.$disconnect());