![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.ca/public_html/scripts/ |
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function setupCompleteDetentionFacilityChats() {
console.log('🏢 Setting up COMPLETE Quebec detention establishment group chats...\n');
try {
// Find admin user to be the creator
const adminUser = await prisma.user.findFirst({
where: { role: 'ADMIN' }
});
if (!adminUser) {
console.log('❌ No admin user found. Please create an admin user first.');
return;
}
// COMPLETE Quebec Detention Facilities - Official Government List
const detentionFacilities = [
// ========== MONTREAL REGION ==========
{
name: 'Bordeaux (Montréal)',
description: 'Établissement de détention de Montréal (Bordeaux)',
facility: 'Bordeaux',
region: 'Montréal',
type: 'DETENTION_CENTER'
},
{
name: 'Rivière-des-Prairies (Montréal)',
description: 'Établissement de détention de Rivière-des-Prairies',
facility: 'Rivière-des-Prairies',
region: 'Montréal',
type: 'DETENTION_CENTER'
},
// ========== LAVAL ==========
{
name: 'Leclerc (Laval)',
description: 'Établissement Leclerc de Laval - Pénitencier Fédéral',
facility: 'Leclerc',
region: 'Laval',
type: 'FEDERAL_PENITENTIARY'
},
// ========== CAPITALE-NATIONALE (QUEBEC) ==========
{
name: 'Orsainville (Québec) - Hommes',
description: 'Établissement de détention de Québec – secteur masculin',
facility: 'Orsainville',
region: 'Capitale-Nationale',
type: 'DETENTION_CENTER'
},
{
name: 'Orsainville (Québec) - Femmes',
description: 'Établissement de détention de Québec – secteur féminin',
facility: 'Orsainville',
region: 'Capitale-Nationale',
type: 'DETENTION_CENTER'
},
// ========== CÔTE-NORD ==========
{
name: 'Baie-Comeau',
description: 'Établissement de détention de Baie-Comeau',
facility: 'Baie-Comeau',
region: 'Côte-Nord',
type: 'DETENTION_CENTER'
},
{
name: 'Sept-Îles',
description: 'Établissement de détention de Sept-Îles',
facility: 'Sept-Îles',
region: 'Côte-Nord',
type: 'DETENTION_CENTER'
},
{
name: 'Port-Cartier',
description: 'Établissement de Port-Cartier - Pénitencier Fédéral',
facility: 'Port-Cartier',
region: 'Côte-Nord',
type: 'FEDERAL_PENITENTIARY'
},
// ========== ESTRIE ==========
{
name: 'Sherbrooke',
description: 'Établissement de détention de Sherbrooke',
facility: 'Sherbrooke',
region: 'Estrie',
type: 'DETENTION_CENTER'
},
// ========== MAURICIE ET CENTRE-DU-QUÉBEC ==========
{
name: 'Trois-Rivières',
description: 'Établissement de détention de Trois-Rivières',
facility: 'Trois-Rivières',
region: 'Mauricie et Centre-du-Québec',
type: 'DETENTION_CENTER'
},
// ========== LAURENTIDES ==========
{
name: 'Saint-Jérôme',
description: 'Établissement de détention de Saint-Jérôme',
facility: 'Saint-Jérôme',
region: 'Laurentides',
type: 'DETENTION_CENTER'
},
// ========== OUTAOUAIS ==========
{
name: 'Hull (Gatineau)',
description: 'Établissement de détention de Hull - Gatineau',
facility: 'Hull',
region: 'Outaouais',
type: 'DETENTION_CENTER'
},
// ========== SAGUENAY–LAC-SAINT-JEAN ==========
{
name: 'Roberval',
description: 'Établissement de détention de Roberval',
facility: 'Roberval',
region: 'Saguenay–Lac-Saint-Jean',
type: 'DETENTION_CENTER'
},
// ========== BAS-SAINT-LAURENT ==========
{
name: 'Rimouski',
description: 'Établissement de détention de Rimouski',
facility: 'Rimouski',
region: 'Bas-Saint-Laurent',
type: 'DETENTION_CENTER'
},
// ========== MONTÉRÉGIE ==========
{
name: 'Sorel-Tracy',
description: 'Établissement de détention de Sorel-Tracy',
facility: 'Sorel-Tracy',
region: 'Montérégie',
type: 'DETENTION_CENTER'
},
{
name: 'Saint-Hyacinthe',
description: 'Établissement de détention de Saint-Hyacinthe',
facility: 'Saint-Hyacinthe',
region: 'Montérégie',
type: 'DETENTION_CENTER'
},
// ========== ABITIBI-TÉMISCAMINGUE ==========
{
name: 'Amos',
description: 'Établissement de détention d\'Amos',
facility: 'Amos',
region: 'Abitibi-Témiscamingue',
type: 'DETENTION_CENTER'
},
// ========== GASPÉSIE-ÎLES-DE-LA-MADELEINE ==========
{
name: 'New Carlisle',
description: 'Établissement de détention de New Carlisle',
facility: 'New Carlisle',
region: 'Gaspésie-Îles-de-la-Madeleine',
type: 'DETENTION_CENTER'
},
{
name: 'Percé',
description: 'Établissement de détention de Percé',
facility: 'Percé',
region: 'Gaspésie-Îles-de-la-Madeleine',
type: 'DETENTION_CENTER'
},
{
name: 'Havre-Aubert (Îles-de-la-Madeleine)',
description: 'Établissement de détention de Havre-Aubert',
facility: 'Havre-Aubert',
region: 'Gaspésie-Îles-de-la-Madeleine',
type: 'DETENTION_CENTER'
},
// ========== WOMEN'S FACILITIES ==========
{
name: 'Maison Tanguay (Femmes)',
description: 'Maison Tanguay - Établissement pour femmes - Montréal',
facility: 'Maison Tanguay',
region: 'Montréal',
type: 'WOMENS_FACILITY'
},
{
name: 'Joliette (Femmes Fédéral)',
description: 'Établissement Joliette pour femmes - Pénitencier Fédéral',
facility: 'Joliette',
region: 'Lanaudière',
type: 'FEDERAL_WOMENS'
},
// ========== YOUTH FACILITIES ==========
{
name: 'Cité-des-Prairies (Jeunes)',
description: 'Centre jeunesse Cité-des-Prairies - Montréal',
facility: 'Cité-des-Prairies',
region: 'Montréal',
type: 'YOUTH_CENTER'
},
// ========== FEDERAL PENITENTIARIES ==========
{
name: 'Archambault (Fédéral)',
description: 'Établissement Archambault - Pénitencier Fédéral',
facility: 'Archambault',
region: 'Laurentides',
type: 'FEDERAL_PENITENTIARY'
},
{
name: 'Cowansville (Fédéral)',
description: 'Établissement Cowansville - Pénitencier Fédéral',
facility: 'Cowansville',
region: 'Montérégie',
type: 'FEDERAL_PENITENTIARY'
},
{
name: 'Donnacona (Fédéral)',
description: 'Établissement Donnacona - Pénitencier Fédéral',
facility: 'Donnacona',
region: 'Capitale-Nationale',
type: 'FEDERAL_PENITENTIARY'
},
{
name: 'La Macaza (Fédéral)',
description: 'Établissement La Macaza - Pénitencier Fédéral',
facility: 'La Macaza',
region: 'Laurentides',
type: 'FEDERAL_PENITENTIARY'
},
{
name: 'Sainte-Anne-des-Plaines (Fédéral)',
description: 'Établissement Sainte-Anne-des-Plaines - Pénitencier Fédéral',
facility: 'Sainte-Anne-des-Plaines',
region: 'Laurentides',
type: 'FEDERAL_PENITENTIARY'
}
];
// General support rooms
const supportRooms = [
{
name: 'Aide Juridique Générale',
description: 'Questions juridiques générales et aide légale',
type: 'GROUP',
isPublic: true,
category: 'LEGAL_SUPPORT'
},
{
name: 'Transferts et Transport',
description: 'Informations sur les transferts entre établissements',
type: 'GROUP',
isPublic: true,
category: 'LOGISTICS'
},
{
name: 'Visites Familiales',
description: 'Coordination des visites familiales',
type: 'GROUP',
isPublic: true,
category: 'FAMILY'
},
{
name: 'Libération Conditionnelle',
description: 'Discussions sur la libération conditionnelle',
type: 'GROUP',
isPublic: true,
category: 'RELEASE'
},
{
name: 'Soins Médicaux',
description: 'Questions médicales et soins de santé',
type: 'GROUP',
isPublic: true,
category: 'MEDICAL'
},
{
name: 'Support Communautaire',
description: 'Aide et support communautaire',
type: 'GROUP',
isPublic: true,
category: 'COMMUNITY'
},
{
name: 'Réintégration Sociale',
description: 'Aide à la réintégration après la libération',
type: 'GROUP',
isPublic: true,
category: 'REINTEGRATION'
}
];
let createdCount = 0;
let skippedCount = 0;
// Create detention facility rooms
console.log('🏢 Creating ALL Quebec detention facility chat rooms...');
for (const facility of detentionFacilities) {
const existingRoom = await prisma.chatRoom.findFirst({
where: { name: facility.name }
});
if (existingRoom) {
console.log(`⏭️ Room "${facility.name}" already exists`);
skippedCount++;
continue;
}
const newRoom = await prisma.chatRoom.create({
data: {
name: facility.name,
description: facility.description,
type: 'GROUP',
isPublic: true,
createdBy: { connect: { id: adminUser.id } },
participants: {
create: {
userId: adminUser.id,
role: 'ADMIN'
}
}
}
});
console.log(`✅ Created "${facility.name}" - ${facility.region}`);
createdCount++;
}
// Create support rooms
console.log('\n🆘 Creating enhanced support chat rooms...');
for (const room of supportRooms) {
const existingRoom = await prisma.chatRoom.findFirst({
where: { name: room.name }
});
if (existingRoom) {
console.log(`⏭️ Room "${room.name}" already exists`);
skippedCount++;
continue;
}
const newRoom = await prisma.chatRoom.create({
data: {
name: room.name,
description: room.description,
type: room.type,
isPublic: room.isPublic,
createdBy: { connect: { id: adminUser.id } },
participants: {
create: {
userId: adminUser.id,
role: 'ADMIN'
}
}
}
});
console.log(`✅ Created support room "${room.name}"`);
createdCount++;
}
// Add all users to public rooms
console.log('\n👥 Adding users to public rooms...');
const allUsers = await prisma.user.findMany();
const publicRooms = await prisma.chatRoom.findMany({
where: { isPublic: true },
include: { participants: true }
});
for (const room of publicRooms) {
for (const user of allUsers) {
const isParticipant = room.participants.some(p => p.userId === user.id);
if (!isParticipant) {
await prisma.chatParticipant.create({
data: {
userId: user.id,
chatRoomId: room.id,
role: user.role === 'ADMIN' ? 'ADMIN' : 'MEMBER'
}
});
}
}
}
// Summary
const totalRooms = await prisma.chatRoom.count();
const totalParticipants = await prisma.chatParticipant.count();
console.log('\n📊 COMPLETE SUMMARY:');
console.log(` ✅ Created: ${createdCount} new rooms`);
console.log(` ⏭️ Skipped: ${skippedCount} existing rooms`);
console.log(` 💬 Total chat rooms: ${totalRooms}`);
console.log(` 👥 Total participants: ${totalParticipants}`);
console.log('\n🗺️ COMPLETE QUEBEC COVERAGE:');
console.log(' 📍 Montreal: Bordeaux, Rivière-des-Prairies, Maison Tanguay, Cité-des-Prairies');
console.log(' 📍 Laval: Leclerc (Federal)');
console.log(' 📍 Capitale-Nationale: Orsainville (M/F), Donnacona (Federal)');
console.log(' 📍 Côte-Nord: Baie-Comeau, Sept-Îles, Port-Cartier (Federal)');
console.log(' 📍 Estrie: Sherbrooke');
console.log(' 📍 Mauricie: Trois-Rivières');
console.log(' 📍 Laurentides: Saint-Jérôme, Archambault, La Macaza, Sainte-Anne-des-Plaines (Federal)');
console.log(' 📍 Outaouais: Hull (Gatineau)');
console.log(' 📍 Saguenay: Roberval');
console.log(' 📍 Bas-Saint-Laurent: Rimouski');
console.log(' 📍 Montérégie: Sorel-Tracy, Saint-Hyacinthe, Cowansville (Federal)');
console.log(' 📍 Abitibi-Témiscamingue: Amos');
console.log(' 📍 Gaspésie-Îles: New Carlisle, Percé, Havre-Aubert');
console.log(' 📍 Lanaudière: Joliette (Federal Women)');
console.log('\n🏛️ FACILITY BREAKDOWN:');
console.log(' 🏢 Provincial Detention Centers: 17');
console.log(' 🏛️ Federal Penitentiaries: 8');
console.log(' 👩 Women\'s Facilities: 2');
console.log(' 👶 Youth Centers: 1');
console.log(' 🆘 Support Services: 7');
console.log('\n✨ EVERY Quebec detention establishment now has dedicated chat rooms!');
} catch (error) {
console.error('❌ Error setting up complete detention facility chats:', error);
} finally {
await prisma.$disconnect();
}
}
setupCompleteDetentionFacilityChats();