![]() 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.quebec/private_html/scripts/ |
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function testSocietySystem() {
console.log('šļø Testing Society of Brothers System...\n');
try {
// Test 1: Check degrees were created
const allDegrees = await prisma.societyDegree.findMany({
orderBy: { degreeNumber: 'asc' },
select: {
degreeNumber: true,
name: true,
title: true,
xpRequired: true,
lodgeLevel: true,
isSecret: true,
symbol: true
}
});
console.log('š DEGREES CREATED:');
console.log(`Total degrees: ${allDegrees.length}`);
allDegrees.slice(0, 5).forEach(degree => {
console.log(` ${degree.degreeNumber}° ${degree.name} ${degree.symbol || ''}`);
console.log(` Title: ${degree.title || 'N/A'}`);
console.log(` XP Required: ${degree.xpRequired.toLocaleString()}`);
console.log(` Lodge: ${degree.lodgeLevel} ${degree.isSecret ? '(SECRET)' : ''}`);
console.log('');
});
if (allDegrees.length > 5) {
console.log(` ... and ${allDegrees.length - 5} more degrees\n`);
}
// Test 2: Check lodges were created
const allLodges = await prisma.lodge.findMany({
select: {
name: true,
lodgeLevel: true,
minimumDegree: true,
currentMembers: true,
isSecret: true,
_count: {
select: { memberships: true }
}
}
});
console.log('šļø LODGES CREATED:');
allLodges.forEach(lodge => {
console.log(` ${lodge.name}`);
console.log(` Level: ${lodge.lodgeLevel} ${lodge.isSecret ? '(SECRET)' : '(PUBLIC)'}`);
console.log(` Min Degree: ${lodge.minimumDegree}°`);
console.log(` Members: ${lodge._count.memberships}`);
console.log('');
});
// Test 3: Check user degree assignments
const userDegrees = await prisma.userDegree.findMany({
include: {
user: {
select: {
name: true,
role: true,
xpPoints: true
}
},
degree: {
select: {
degreeNumber: true,
name: true,
symbol: true
}
}
}
});
console.log('š„ USER DEGREE ASSIGNMENTS:');
console.log(`Total assignments: ${userDegrees.length}`);
userDegrees.forEach(ud => {
console.log(` ${ud.user.name} (${ud.user.role})`);
console.log(` ${ud.degree.degreeNumber}° ${ud.degree.name} ${ud.degree.symbol || ''}`);
console.log(` XP: ${ud.user.xpPoints.toLocaleString()}`);
console.log(` Ceremony: ${ud.ceremonyCompleted ? 'ā
Complete' : 'ā³ Pending'}`);
console.log('');
});
// Test 4: Check lodge memberships
const lodgeMemberships = await prisma.lodgeMembership.findMany({
include: {
user: {
select: {
name: true,
role: true
}
},
lodge: {
select: {
name: true,
lodgeLevel: true
}
}
}
});
console.log('šļø LODGE MEMBERSHIPS:');
console.log(`Total memberships: ${lodgeMemberships.length}`);
const membershipsByLodge = lodgeMemberships.reduce((acc, membership) => {
const lodgeName = membership.lodge.name;
if (!acc[lodgeName]) {
acc[lodgeName] = [];
}
acc[lodgeName].push(membership);
return acc;
}, {} as Record<string, typeof lodgeMemberships>);
Object.entries(membershipsByLodge).forEach(([lodgeName, members]) => {
console.log(` ${lodgeName}:`);
members.forEach(member => {
console.log(` ${member.user.name} (${member.role}) - ${member.user.role}`);
});
console.log('');
});
// Test 5: Check degree progression chain
console.log('š DEGREE PROGRESSION CHAIN:');
const degreeWithProgression = await prisma.societyDegree.findMany({
where: { degreeNumber: { lte: 5 } }, // Just check first 5
include: {
previousDegree: {
select: {
degreeNumber: true,
name: true
}
}
},
orderBy: { degreeNumber: 'asc' }
});
degreeWithProgression.forEach(degree => {
console.log(` ${degree.degreeNumber}° ${degree.name}`);
if (degree.previousDegree) {
console.log(` ā¬ļø Previous: ${degree.previousDegree.degreeNumber}° ${degree.previousDegree.name}`);
} else {
console.log(` šÆ Starting degree`);
}
console.log(` ā±ļø Time requirement: ${degree.timeRequirement || 0} days`);
console.log('');
});
// Test 6: Sample progression calculation
console.log('š SAMPLE PROGRESSION CALCULATION:');
const sampleUser = userDegrees[0];
if (sampleUser) {
console.log(`Testing progression for: ${sampleUser.user.name}`);
const nextDegree = await prisma.societyDegree.findFirst({
where: {
degreeNumber: sampleUser.degree.degreeNumber + 1
}
});
if (nextDegree) {
const requirements = JSON.parse(nextDegree.requirements || '{}');
console.log(` Next degree: ${nextDegree.degreeNumber}° ${nextDegree.name}`);
console.log(` Requirements:`);
Object.entries(requirements).forEach(([key, value]) => {
if (typeof value === 'number' && value > 0) {
console.log(` ${key}: ${value}`);
}
});
console.log(` Current XP: ${sampleUser.user.xpPoints}`);
console.log(` XP Progress: ${((sampleUser.user.xpPoints / requirements.xp) * 100).toFixed(1)}%`);
}
}
console.log('\nā
Society of Brothers System Test Complete!');
} catch (error) {
console.error('ā Error testing Society system:', error);
throw error;
}
}
async function main() {
await testSocietySystem();
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});