[TSM.ID].[11031972] PXE : Platform X Ecosystem I [118 Module -LIVE-]

This commit is contained in:
TSM.ID
2026-05-25 03:50:05 +07:00
commit e820143b3c
673 changed files with 101320 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
import { tenants } from './drizzle/schema';
import { eq, isNull } from 'drizzle-orm';
import * as crypto from 'crypto';
const connectionString = process.env.DATABASE_URL || 'postgresql://postgres:postgres@localhost:5432/jumpa';
const sql = postgres(connectionString, { max: 1 });
const db = drizzle(sql);
function generateLicenseNumber(tenantName: string): string {
const prefix = "LIC";
// Extract a 3-letter code from the tenant name (e.g., "TSM", "SNO", "JUM")
const words = tenantName.split(/[\s.]+/).filter(w => w.length > 0);
let code = "UNK";
if (words.length > 0) {
if (words[0].length >= 3) {
code = words[0].substring(0, 3).toUpperCase();
} else if (words.length >= 2) {
code = (words[0].substring(0, 2) + words[1].substring(0, 1)).toUpperCase();
} else {
code = words[0].toUpperCase().padEnd(3, 'X');
}
}
// Generate a random 4-character hex string
const randomHex = crypto.randomBytes(2).toString('hex').toUpperCase();
// Get the current year
const year = new Date().getFullYear();
return `${prefix}-${code}-${randomHex}-${year}`;
}
async function main() {
console.log('Fetching tenants without license numbers...');
try {
const tenantsWithoutLicense = await db.select().from(tenants).where(isNull(tenants.licenseNumber));
console.log(`Found ${tenantsWithoutLicense.length} tenants without license numbers.`);
for (const t of tenantsWithoutLicense) {
const license = generateLicenseNumber(t.name);
await db.update(tenants)
.set({ licenseNumber: license })
.where(eq(tenants.id, t.id));
console.log(`[OK] Assigned ${license} to ${t.name}`);
}
console.log('Migration completed successfully.');
} catch (e) {
console.error('Error during migration:', e);
} finally {
await sql.end();
}
}
main();