58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
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();
|