68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
// src/scripts/init-preferences.ts
|
||
import { PrismaClient } from '@prisma/client';
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
type UserSummary = {
|
||
id: string; // UUID
|
||
email: string;
|
||
};
|
||
|
||
async function main() {
|
||
console.log('➡️ Initialisation des préférences utilisateurs…');
|
||
|
||
// 1. Récupérer tous les users
|
||
const users = (await prisma.users.findMany({
|
||
select: {
|
||
id: true,
|
||
email: true,
|
||
},
|
||
})) as UserSummary[];
|
||
|
||
console.log(`➡️ ${users.length} users trouvés dans la DB`);
|
||
|
||
// 2. Récupérer toutes les préférences existantes
|
||
const existingPrefs = await prisma.preferences.findMany({
|
||
select: {
|
||
user_id: true,
|
||
},
|
||
});
|
||
|
||
const userIdsWithPrefs = new Set(existingPrefs.map((p) => p.user_id));
|
||
|
||
console.log(`➡️ ${existingPrefs.length} users ont déjà des préférences`);
|
||
|
||
// 3. Filtrer les users qui n'ont pas encore de preferences
|
||
const usersWithoutPrefs = users.filter((u) => !userIdsWithPrefs.has(u.id));
|
||
|
||
console.log(`➡️ ${usersWithoutPrefs.length} users n'ont pas encore de préférences`);
|
||
|
||
if (usersWithoutPrefs.length === 0) {
|
||
console.log('✅ Rien à faire, toutes les préférences sont déjà créées.');
|
||
return;
|
||
}
|
||
|
||
// 4. Préparer les entrées pour createMany
|
||
const prefsToCreate = usersWithoutPrefs.map((u) => ({
|
||
user_id: u.id,
|
||
// tous les autres champs prendront leurs valeurs par défaut (0)
|
||
}));
|
||
|
||
// 5. Insertion en batch
|
||
const result = await prisma.preferences.createMany({
|
||
data: prefsToCreate,
|
||
skipDuplicates: true, // sécurité si jamais le script est relancé
|
||
});
|
||
|
||
console.log(`✅ ${result.count} préférences créées dans la DB`);
|
||
}
|
||
|
||
main()
|
||
.catch((err) => {
|
||
console.error('❌ Erreur pendant l’initialisation des préférences', err);
|
||
process.exit(1);
|
||
})
|
||
.finally(async () => {
|
||
await prisma.$disconnect();
|
||
});
|