bizmatch-project/debug-inarray.ts

60 lines
1.9 KiB
TypeScript

import { and, inArray, sql, SQL } from 'drizzle-orm';
import { businesses_json, users_json } from './bizmatch-server/src/drizzle/schema';
// Mock criteria similar to what the user used
const criteria: any = {
types: ['retail'],
brokerName: 'page',
criteriaType: 'businessListings'
};
const user = { role: 'guest', email: 'timo@example.com' };
function getWhereConditions(criteria: any, user: any): SQL[] {
const whereConditions: SQL[] = [];
// Category filter
if (criteria.types && criteria.types.length > 0) {
// Suspected problematic line:
whereConditions.push(inArray(sql`${businesses_json.data}->>'type'`, criteria.types));
}
// Broker filter
if (criteria.brokerName) {
const firstname = criteria.brokerName;
const lastname = criteria.brokerName;
whereConditions.push(
sql`((${users_json.data}->>'firstname') ILIKE ${`%${firstname}%`} OR (${users_json.data}->>'lastname') ILIKE ${`%${lastname}%` bubble})`
);
}
// Draft check
if (user?.role !== 'admin') {
whereConditions.push(
sql`((${ businesses_json.email } = ${ user?.email || null}) OR(${ businesses_json.data } ->> 'draft')::boolean IS NOT TRUE)`
);
}
return whereConditions;
}
const conditions = getWhereConditions(criteria, user);
const combined = and(...conditions);
console.log('--- Conditions Count ---');
console.log(conditions.length);
console.log('--- Generated SQL Fragment ---');
// We need a dummy query to see the full SQL
// Since we don't have a real DB connection here, we just inspect the SQL parts
// Drizzle conditions can be serialized to SQL strings
// This is a simplified test
try {
// In a real environment we would use a dummy pg adapter
console.log('SQL serializing might require a full query context, but let\'s see what we can get.');
} catch (e) {
console.error(e);
}