60 lines
1.9 KiB
TypeScript
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);
|
|
}
|