drizzle implemented

This commit is contained in:
dimitar committed 2025-12-12 00:45:08 +01:00
1 parent cdd854bd70
commit 670e6675cc
21 files changed
+1863 -904

No files matched your search

+14
View File
@@ -0,0 +1,14 @@
import { getDatabase } from '../src/lib/database';
import { DrizzleDatabase } from '../src/lib/database/drizzle';
async function checkUserRole() {
const db = await getDatabase();
const users = await db.getAllUsers();
console.log('Users found:', users.length);
users.forEach(u => {
console.log(`User: ${u.email}, Role: ${u.role}, ID: ${u.id}`);
});
}
checkUserRole().catch(console.error);
+15
View File
@@ -0,0 +1,15 @@
import { getDatabase } from '../src/lib/database';
async function makeAdmin(email: string) {
const db = await getDatabase();
const user = await db.getUserByEmail(email);
if (!user) {
console.log('User not found');
return;
}
await db.updateUser(user.id, { role: 'admin' });
console.log(`User ${email} updated to admin`);
}
makeAdmin('taratur@gmail.com').catch(console.error);
+57
View File
@@ -0,0 +1,57 @@
import 'dotenv/config';
import { getDatabase } from '../src/lib/database';
import { clerkClient } from '@clerk/nextjs/server';
async function syncAllUsers() {
console.log('Starting full user sync...');
const db = await getDatabase();
// Fetch all users from Clerk
// Note: pagination might be needed for large user bases, but for prototype this is fine.
const client = await clerkClient();
const response = await client.users.getUserList({ limit: 100 });
const clerkUsers = response.data;
console.log(`Found ${clerkUsers.length} users in Clerk.`);
for (const clerkUser of clerkUsers) {
const userId = clerkUser.id;
const email = clerkUser.emailAddresses[0]?.emailAddress;
if (!email) {
console.warn(`User ${userId} has no email, skipping.`);
continue;
}
const existingUser = await db.getUserById(userId);
if (existingUser) {
console.log(`User ${email} (${userId}) already exists.`);
// Optional: Update details if needed
continue;
}
// Check by email to handle ID mismatches (e.g. from seeding)
const existingByEmail = await db.getUserByEmail(email);
if (existingByEmail) {
console.log(`User ${email} found with old ID ${existingByEmail.id}. Migrating to ${userId}...`);
await db.migrateUserId(existingByEmail.id, userId);
continue;
}
console.log(`Creating new user ${email} (${userId})...`);
await db.createUser({
id: userId,
email,
firstName: clerkUser.firstName || '',
lastName: clerkUser.lastName || '',
password: '', // Managed by Clerk
phone: clerkUser.phoneNumbers[0]?.phoneNumber || undefined,
role: (clerkUser.publicMetadata.role as 'admin' | 'client' | 'superAdmin') || 'client'
});
}
console.log('Sync complete.');
}
syncAllUsers().catch(console.error);
+15
View File
@@ -0,0 +1,15 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"module": "CommonJS",
"moduleResolution": "node",
"allowImportingTsExtensions": true,
"noEmit": true
},
"ts-node": {
"transpileOnly": true,
"compilerOptions": {
"module": "CommonJS"
}
}
}
+81
View File
@@ -0,0 +1,81 @@
import { getDatabase } from '../src/lib/database/index.ts';
async function verifyDatabase() {
console.log('Starting database verification...');
const db = await getDatabase();
await db.connect();
try {
// 1. Create User
console.log('Creating test user...');
const userId = `test-user-${Date.now()}`;
const user = await db.createUser({
id: userId,
email: `test-${Date.now()}@example.com`,
firstName: 'Test',
lastName: 'User',
password: 'password123',
role: 'client',
phone: '1234567890'
});
console.log('User created:', user.id);
// 2. Create Client
console.log('Creating test client...');
const client = await db.createClient({
userId: user.id,
membershipType: 'basic',
membershipStatus: 'active',
joinDate: new Date()
});
console.log('Client created:', client.id);
// 3. Create Fitness Profile
console.log('Creating fitness profile...');
const profile = await db.createFitnessProfile({
userId: user.id,
height: '180',
weight: '75',
age: '30',
gender: 'male',
activityLevel: 'moderately_active',
fitnessGoals: ['weight_loss'],
exerciseHabits: 'None',
dietHabits: 'None',
medicalConditions: 'None'
});
console.log('Fitness profile created for:', profile.userId);
// 4. Attendance Check-in
console.log('Checking in...');
const checkIn = await db.checkIn(user.id, 'gym', 'Test check-in');
console.log('Checked in:', checkIn.id);
// 5. Verify Active Check-in
const activeCheckIn = await db.getActiveCheckIn(user.id);
if (!activeCheckIn || activeCheckIn.id !== checkIn.id) {
throw new Error('Active check-in verification failed');
}
console.log('Active check-in verified');
// 6. Attendance Check-out
console.log('Checking out...');
const checkOut = await db.checkOut(checkIn.id);
console.log('Checked out:', checkOut?.checkOutTime);
// 7. Cleanup
console.log('Cleaning up...');
await db.deleteUser(user.id);
console.log('Cleanup complete');
console.log('✅ Verification successful!');
} catch (error) {
console.error('❌ Verification failed:', error);
process.exit(1);
} finally {
await db.disconnect();
}
}
verifyDatabase();