![]() 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/ |
import { PrismaClient } from '@prisma/client';
import { hash } from 'bcryptjs';
const prisma = new PrismaClient();
async function recoverOriginalData() {
console.log('🔄 Starting data recovery process...');
try {
// Create Justin Wee (Admin/Law Firm Owner)
const justinWee = await prisma.user.upsert({
where: { email: 'justin.wee@adwlaw.ca' },
update: {},
create: {
email: 'justin.wee@adwlaw.ca',
name: 'Justin Wee',
username: 'justin-wee',
password: await hash('admin123', 12),
role: 'ADMIN',
profilePicture: '/images/lawyers/justin-wee.jpg',
bio: 'Founding partner of ADW Law Firm. Specializing in complex litigation and human rights cases.',
title: 'Managing Partner',
specialization: 'Complex Litigation & Human Rights',
barNumber: 'QC-12345',
yearsOfExperience: 15,
education: 'McGill University Law School (LLB), Harvard Law School (LLM)',
hourlyRate: 550.0,
proBono: true,
boldnessRating: 4.9,
transparencyRating: 4.8,
averageRating: 4.85,
totalCases: 156,
wonCases: 134,
isVerified: true,
xpPoints: 5200,
level: 12,
isProfilePublic: true,
officeLocation: 'Montreal, QC',
workPhone: '(514) 555-0000'
}
});
console.log('âś… Created Justin Wee (Admin)');
// Create the ADW Law Firm Team
const adwTeam = await Promise.all([
prisma.user.create({
data: {
email: 'audrey.labrecque@adwlaw.ca',
name: 'Audrey Labrecque',
username: 'audrey-labrecque',
password: await hash('lawyer123', 12),
role: 'LAWYER',
profilePicture: '/images/lawyers/audrey-labrecque.jpg',
bio: 'Senior associate specializing in criminal defense and prison rights.',
title: 'Senior Associate',
specialization: 'Criminal Defense & Prison Rights',
barNumber: 'QC-23456',
yearsOfExperience: 8,
education: 'Université de Montréal Law School (LLB)',
hourlyRate: 420.0,
proBono: true,
boldnessRating: 4.7,
transparencyRating: 4.6,
averageRating: 4.65,
totalCases: 89,
wonCases: 67,
isVerified: true,
xpPoints: 2100,
level: 7,
isProfilePublic: true,
officeLocation: 'Montreal, QC',
workPhone: '(514) 555-0001'
}
}),
prisma.user.create({
data: {
email: 'jerome.aucoin@adwlaw.ca',
name: 'Jérôme Aucoin',
username: 'jerome-aucoin',
password: await hash('lawyer123', 12),
role: 'LAWYER',
profilePicture: '/images/lawyers/jerome-aucoin.jpg',
bio: 'Associate lawyer focused on civil rights and constitutional law.',
title: 'Associate',
specialization: 'Civil Rights & Constitutional Law',
barNumber: 'QC-34567',
yearsOfExperience: 5,
education: 'McGill University Law School (LLB)',
hourlyRate: 380.0,
proBono: true,
boldnessRating: 4.5,
transparencyRating: 4.7,
averageRating: 4.6,
totalCases: 45,
wonCases: 32,
isVerified: true,
xpPoints: 1200,
level: 5,
isProfilePublic: true,
officeLocation: 'Montreal, QC',
workPhone: '(514) 555-0002'
}
}),
prisma.user.create({
data: {
email: 'marie-christine.vachon@adwlaw.ca',
name: 'Marie-Christine Vachon',
username: 'marie-christine-vachon',
password: await hash('lawyer123', 12),
role: 'LAWYER',
profilePicture: '/images/lawyers/marie-christine-vachon.jpg',
bio: 'Junior associate specializing in family law and human rights.',
title: 'Junior Associate',
specialization: 'Family Law & Human Rights',
barNumber: 'QC-45678',
yearsOfExperience: 3,
education: 'Université Laval Law School (LLB)',
hourlyRate: 320.0,
proBono: true,
boldnessRating: 4.3,
transparencyRating: 4.5,
averageRating: 4.4,
totalCases: 23,
wonCases: 18,
isVerified: true,
xpPoints: 800,
level: 3,
isProfilePublic: true,
officeLocation: 'Montreal, QC',
workPhone: '(514) 555-0003'
}
})
]);
console.log('âś… Created ADW Law Firm team');
// Create the Bordeaux Prison Class Action Case
const bordeauxCase = await prisma.legalCase.create({
data: {
title: 'Bordeaux Prison Conditions Class Action',
description: 'Historic class action against Quebec for systemic rights violations at Bordeaux Prison affecting thousands of detainees from January 2022 to present.',
publicSummary: 'Seeking justice for inhumane conditions, inadequate healthcare, and rights violations at Bordeaux Prison. Join if you were detained during the class period.',
caseNumber: '2024QCCS4540',
caseType: 'class_action',
status: 'active',
jurisdiction: 'Quebec Superior Court',
court: 'Quebec Superior Court',
category: 'HUMAN_RIGHTS',
legalArea: 'Human Rights',
urgencyLevel: 'HIGH',
priority: 'high',
isPublic: true,
isAcceptingApplications: true,
estimatedValue: 50000000,
riskLevel: 'MEDIUM',
tags: JSON.stringify(['prison-rights', 'class-action', 'human-rights', 'bordeaux', 'systemic-violations']),
viewCount: 1247,
supporterCount: 89,
leadLawyerId: justinWee.id,
createdBy: justinWee.id,
filingDate: new Date('2024-03-12'),
applicationDeadline: new Date('2025-12-31')
}
});
console.log('âś… Created Bordeaux Prison Class Action case');
// Create additional sample cases
const additionalCases = await Promise.all([
prisma.legalCase.create({
data: {
title: 'Wrongful Conviction Appeal - Michael Thompson',
description: 'Appeal case for Michael Thompson who was wrongfully convicted of armed robbery in 2019. New evidence has emerged including DNA proof and witness recantation.',
publicSummary: 'Fighting to overturn a wrongful conviction with new DNA evidence. Seeking experienced criminal appeals lawyer.',
caseType: 'appeal',
status: 'active',
jurisdiction: 'Ontario Court of Appeal',
court: 'Ontario Court of Appeal',
category: 'CRIMINAL',
legalArea: 'Criminal Appeals',
urgencyLevel: 'URGENT',
priority: 'urgent',
isPublic: true,
isAcceptingApplications: true,
estimatedValue: 2000000,
riskLevel: 'HIGH',
tags: JSON.stringify(['wrongful-conviction', 'dna-evidence', 'appeal', 'criminal-law', 'innocence']),
viewCount: 892,
supporterCount: 156,
leadLawyerId: adwTeam[0].id, // Audrey Labrecque
createdBy: adwTeam[0].id,
filingDate: new Date('2024-06-15'),
applicationDeadline: new Date('2025-03-01')
}
}),
prisma.legalCase.create({
data: {
title: 'Environmental Justice Class Action',
description: 'Class action against industrial pollution affecting indigenous communities in Northern Quebec.',
publicSummary: 'Seeking justice for environmental damage and health impacts on indigenous communities.',
caseNumber: 'ENV2024001',
caseType: 'class_action',
status: 'active',
jurisdiction: 'Federal Court',
court: 'Federal Court of Canada',
category: 'ENVIRONMENTAL',
legalArea: 'Environmental Law',
urgencyLevel: 'HIGH',
priority: 'medium',
isPublic: true,
isAcceptingApplications: true,
estimatedValue: 15000000,
riskLevel: 'MEDIUM',
tags: JSON.stringify(['environmental', 'indigenous-rights', 'pollution', 'class-action']),
viewCount: 567,
supporterCount: 78,
leadLawyerId: adwTeam[1].id, // Jérôme Aucoin
createdBy: adwTeam[1].id,
filingDate: new Date('2024-01-15'),
applicationDeadline: new Date('2025-06-30')
}
})
]);
console.log('âś… Created additional sample cases');
// Create chat rooms for the team
const chatRooms = await Promise.all([
prisma.chatRoom.create({
data: {
name: 'ADW Team',
description: 'Private channel for ADW Law Firm team members',
isPublic: false,
createdBy: { connect: { id: justinWee.id } }
}
}),
prisma.chatRoom.create({
data: {
name: 'Bordeaux Case Team',
description: 'Team channel for Bordeaux Prison class action case',
isPublic: false,
createdBy: { connect: { id: justinWee.id } }
}
}),
prisma.chatRoom.create({
data: {
name: 'Général',
description: 'Canal de discussion général pour tous les membres.',
isPublic: true,
createdBy: { connect: { id: justinWee.id } }
}
})
]);
console.log('âś… Created team chat rooms');
// Add team members to chat rooms
const allTeamMembers = [justinWee, ...adwTeam];
for (const member of allTeamMembers) {
for (const room of chatRooms) {
await prisma.chatParticipant.upsert({
where: {
userId_chatRoomId: {
userId: member.id,
chatRoomId: room.id
}
},
update: {},
create: {
userId: member.id,
chatRoomId: room.id,
role: member.id === justinWee.id ? 'ADMIN' : 'MEMBER'
}
});
}
}
console.log('âś… Added team members to chat rooms');
// Create subscription plans
const subscriptionPlans = await Promise.all([
prisma.subscriptionPlan.create({
data: {
name: 'Basic Plan',
description: 'Essential features for individual lawyers',
price: 29.99,
currency: 'CAD',
billingCycle: 'MONTHLY',
features: JSON.stringify([
'Basic case management',
'Client communication tools',
'Document storage (5GB)',
'Email support'
]),
isActive: true,
maxUsers: 1,
maxCases: 10
}
}),
prisma.subscriptionPlan.create({
data: {
name: 'Professional Plan',
description: 'Advanced features for growing law firms',
price: 79.99,
currency: 'CAD',
billingCycle: 'MONTHLY',
features: JSON.stringify([
'Advanced case management',
'Team collaboration tools',
'Document storage (50GB)',
'Priority support',
'Analytics dashboard',
'Custom branding'
]),
isActive: true,
maxUsers: 5,
maxCases: 50
}
}),
prisma.subscriptionPlan.create({
data: {
name: 'Enterprise Plan',
description: 'Complete solution for large law firms',
price: 199.99,
currency: 'CAD',
billingCycle: 'MONTHLY',
features: JSON.stringify([
'Unlimited case management',
'Advanced team collaboration',
'Unlimited document storage',
'24/7 priority support',
'Advanced analytics',
'Custom integrations',
'Dedicated account manager'
]),
isActive: true,
maxUsers: -1, // Unlimited
maxCases: -1 // Unlimited
}
})
]);
console.log('âś… Created subscription plans');
// Create business profile for Justin Wee
const businessProfile = await prisma.businessProfile.create({
data: {
ownerId: justinWee.id,
businessName: 'ADW Law Firm',
businessType: 'LAW_FIRM',
industry: 'Legal Services',
description: 'Leading law firm specializing in human rights, criminal defense, and complex litigation.',
logo: '/images/lawyers/justin-wee.jpg',
website: 'https://adwlaw.ca',
phone: '(514) 555-0000',
email: 'info@adwlaw.ca',
address: '1234 McGill Street, Montreal, QC H3A 1A1',
registrationNumber: 'QC-123456789',
taxId: '123456789RT0001',
employeeCount: "15",
annualRevenue: "2500000",
isPublic: true,
isVerified: true
}
});
console.log('âś… Created ADW Law Firm business profile');
console.log('🎉 Data recovery completed successfully!');
console.log('');
console.log('đź“‹ Recovered Data Summary:');
console.log('- Justin Wee (Admin) - justin.wee@adwlaw.ca');
console.log('- Audrey Labrecque - audrey.labrecque@adwlaw.ca');
console.log('- Jérôme Aucoin - jerome.aucoin@adwlaw.ca');
console.log('- Marie-Christine Vachon - marie-christine.vachon@adwlaw.ca');
console.log('- Bordeaux Prison Class Action case');
console.log('- Additional sample cases');
console.log('- Team chat rooms');
console.log('- Subscription plans');
console.log('- ADW Law Firm business profile');
} catch (error) {
console.error('❌ Error during data recovery:', error);
throw error;
} finally {
await prisma.$disconnect();
}
}
recoverOriginalData()
.catch((e) => {
console.error(e);
process.exit(1);
});