import { eq, and, ilike, gte, lte } from 'drizzle-orm';
import { users } from './schema';
type UserFilter = {
name?: string;
age?: number;
email?: string;
address?: {
street?: string;
city?: string;
};
ageMin?: number;
ageMax?: number;
};
async function findUsers(filter: UserFilter) {
const conditions = [];
// Handle direct fields
if (filter.name) {
conditions.push(eq(users.name, filter.name));
}
if (filter.age) {
conditions.push(eq(users.age, filter.age));
}
if (filter.email) {
conditions.push(ilike(users.email, `%${filter.email}%`));
}
// Handle nested address (if you have a relation)
if (filter.address?.street) {
// Assuming you have a relation to an address table
conditions.push(eq(addresses.street, filter.address.street));
}
// Handle range queries
if (filter.ageMin) {
conditions.push(gte(users.age, filter.ageMin));
}
if (filter.ageMax) {
conditions.push(lte(users.age, filter.ageMax));
}
// Apply all conditions
if (conditions.length > 0) {
return await db.select().from(users)
.where(and(...conditions));
}
return await db.select().from(users);
}
import { eq, and, ilike, gte, lte } from 'drizzle-orm';
import { users } from './schema';
type UserFilter = {
name?: string;
age?: number;
email?: string;
address?: {
street?: string;
city?: string;
};
ageMin?: number;
ageMax?: number;
};
async function findUsers(filter: UserFilter) {
const conditions = [];
// Handle direct fields
if (filter.name) {
conditions.push(eq(users.name, filter.name));
}
if (filter.age) {
conditions.push(eq(users.age, filter.age));
}
if (filter.email) {
conditions.push(ilike(users.email, `%${filter.email}%`));
}
// Handle nested address (if you have a relation)
if (filter.address?.street) {
// Assuming you have a relation to an address table
conditions.push(eq(addresses.street, filter.address.street));
}
// Handle range queries
if (filter.ageMin) {
conditions.push(gte(users.age, filter.ageMin));
}
if (filter.ageMax) {
conditions.push(lte(users.age, filter.ageMax));
}
// Apply all conditions
if (conditions.length > 0) {
return await db.select().from(users)
.where(and(...conditions));
}
return await db.select().from(users);
}