Files
afrov2/prisma/seed-30.ts
2026-04-24 14:39:01 +02:00

90 lines
4.1 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
import { PrismaPg } from '@prisma/adapter-pg';
import pg from 'pg';
import bcrypt from 'bcryptjs';
import dotenv from 'dotenv';
dotenv.config({ path: '.env.local' });
dotenv.config();
const connectionString = process.env.DATABASE_URL!;
const pool = new pg.Pool({ connectionString });
const adapter = new PrismaPg(pool);
const prisma = new PrismaClient({ adapter });
const CITIES = ['Abidjan', 'Dakar', 'Lagos', 'Douala', 'Kinshasa', 'Cotonou', 'Lomé', 'Paris', 'Lyon', 'Bruxelles'];
const NAMES = ['Moussa Diarra', 'Fatou Sow', 'Bakary Koné', 'Awa Traoré', 'Koffi Adjoumani', 'Cheick Tidiane', 'Bintu Camara', 'Ousmane Diallo', 'Yasmine Touré', 'Ibrahim Sy', 'Mariam Keita', 'Lamine Ndiaye', 'Aminata Faye', 'Idrissa Gueye', 'Sékou Condé', 'Zainab Bello', 'Kwame Nkrumah', 'Chidi Okafor', 'Adama Barrow', 'Fatimata Sylla', 'Jean-Pierre Mbeki', 'Grace Akoto', 'Samuel Eto\'o', 'Didier Drogba', 'Blaise Diagne', 'Léopold Senghor', 'Thomas Sankara', 'Miriam Makeba', 'Angélique Kidjo', 'Alpha Blondy'];
const BIZ_NAMES = ['Digital Africa', 'Saveurs du Sahel', 'Wax & Modernity', 'Artisans du Delta', 'Zenith Wellness', 'Afro-EdTech', 'Bizi Solutions', 'Sahara Build', 'Agro-Innov', 'Trans-Africa Express', 'Cyber-Sénégal', 'Miam-Miam Abidjan', 'Élégance Bamako', 'Poterie de Kati', 'Savon de Guinée', 'Code Academy', 'Compta Facile', 'Solar Power West', 'Cocoa Direct', 'Taxi-Plus', 'Cloud Kinshasa', 'Épices de Douala', 'Tissage d\'Accra', 'Bambou Design', 'Bio-Cosmetiques', 'E-Learning Africa', 'Logistique 225', 'Refuge Solaire', 'Ananas Export', 'Linga-Linga Travel'];
const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
async function seed() {
console.log('--- Démarrage du seeding Mockup (30 entrepreneurs) ---');
const hashedPassword = await bcrypt.hash('afrohub2025', 10);
console.log('Fetching official categories from database...');
const dbCategories = await prisma.businessCategory.findMany();
if (dbCategories.length === 0) {
throw new Error('Aucune catégorie trouvée en base. Veuillez lancer le seed principal d\'abord.');
}
let successCount = 0;
for (let i = 0; i < 30; i++) {
const name = NAMES[i % NAMES.length] + (i > 29 ? ` ${i}` : '');
const email = `entrepreneur${i + 1}@afrohub-test.com`;
const bizName = BIZ_NAMES[i % BIZ_NAMES.length];
const dbCategory = dbCategories[i % dbCategories.length];
const location = CITIES[i % CITIES.length];
const slug = bizName.toLowerCase().replace(/ /g, '-').replace(/[^a-z0-9-]/g, '') + `-${i + 1}`;
try {
const user = await prisma.user.upsert({
where: { email },
update: { role: 'ENTREPRENEUR' },
create: {
name,
email,
password: hashedPassword,
role: 'ENTREPRENEUR',
location,
avatar: `https://i.pravatar.cc/150?u=${email}`
}
});
await prisma.business.upsert({
where: { ownerId: user.id },
update: {
isActive: true,
verified: true,
category: dbCategory.name,
categoryId: dbCategory.id
},
create: {
name: bizName,
category: dbCategory.name,
categoryId: dbCategory.id,
location,
description: `Société leader dans le domaine ${dbCategory.name}. Basés à ${location}, nous œuvrons pour le rayonnement de l'expertise africaine.`,
logoUrl: `https://picsum.photos/200/200?random=${i + 200}`,
contactEmail: email,
contactPhone: `+225 00 ${i}${i} ${i}${i} ${i}${i}`,
slug,
isActive: true,
verified: true,
isFeatured: i < 8,
ownerId: user.id,
tags: [dbCategory.name.split(' ')[0], 'Expertise', 'Continent'],
viewCount: Math.floor(Math.random() * 500)
}
});
successCount++;
process.stdout.write(`\rProgress: ${successCount}/30`);
await wait(50);
} catch (e) {}
}
console.log(`\n✅ Mockup 30 entrepreneurs terminé.`);
}
seed().catch(console.error).finally(() => pool.end());