♻️ use like & LOWER(column) for searching with query

This commit is contained in:
Fred KISSIE
2026-02-14 04:11:27 +01:00
parent 1fbcad8787
commit 761a5f1d4c
5 changed files with 96 additions and 62 deletions

View File

@@ -20,9 +20,9 @@ import {
asc,
desc,
eq,
ilike,
inArray,
isNull,
like,
or,
sql,
type SQL
@@ -305,7 +305,14 @@ export async function listClients(
}
if (query) {
conditions.push(or(ilike(clients.name, "%" + query + "%")));
conditions.push(
or(
like(
sql`LOWER(${clients.name})`,
"%" + query.toLowerCase() + "%"
)
)
);
}
const baseQuery = queryClientsBase().where(and(...conditions));

View File

@@ -20,10 +20,10 @@ import {
asc,
desc,
eq,
ilike,
inArray,
isNotNull,
isNull,
like,
or,
sql,
type SQL
@@ -287,8 +287,14 @@ export async function listUserDevices(
if (query) {
conditions.push(
or(
ilike(clients.name, "%" + query + "%"),
ilike(users.email, "%" + query + "%")
like(
sql`LOWER(${clients.name})`,
"%" + query.toLowerCase() + "%"
),
like(
sql`LOWER(${users.email})`,
"%" + query.toLowerCase() + "%"
)
)
);
}

View File

@@ -1,39 +1,37 @@
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import {
db,
resourceHeaderAuth,
resourceHeaderAuthExtendedCompatibility
} from "@server/db";
import {
resources,
userResources,
roleResources,
resourceHeaderAuthExtendedCompatibility,
resourcePassword,
resourcePincode,
resources,
roleResources,
targetHealthCheck,
targets,
targetHealthCheck
userResources
} from "@server/db";
import response from "@server/lib/response";
import logger from "@server/logger";
import { OpenAPITags, registry } from "@server/openApi";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";
import type { PaginatedResponse } from "@server/types/Pagination";
import {
sql,
eq,
or,
inArray,
and,
count,
ilike,
asc,
not,
count,
eq,
inArray,
isNull,
like,
not,
or,
sql,
type SQL
} from "drizzle-orm";
import logger from "@server/logger";
import { NextFunction, Request, Response } from "express";
import createHttpError from "http-errors";
import { z } from "zod";
import { fromZodError } from "zod-validation-error";
import { OpenAPITags, registry } from "@server/openApi";
import type { PaginatedResponse } from "@server/types/Pagination";
const listResourcesParamsSchema = z.strictObject({
orgId: z.string()
@@ -278,8 +276,14 @@ export async function listResources(
if (query) {
conditions.push(
or(
ilike(resources.name, "%" + query + "%"),
ilike(resources.fullDomain, "%" + query + "%")
like(
sql`LOWER(${resources.name})`,
"%" + query.toLowerCase() + "%"
),
like(
sql`LOWER(${resources.fullDomain})`,
"%" + query.toLowerCase() + "%"
)
)
);
}

View File

@@ -1,28 +1,25 @@
import { db, exitNodes, newts } from "@server/db";
import { orgs, roleSites, sites, userSites } from "@server/db";
import { remoteExitNodes } from "@server/db";
import logger from "@server/logger";
import HttpCode from "@server/types/HttpCode";
import response from "@server/lib/response";
import {
and,
asc,
count,
desc,
eq,
ilike,
inArray,
or,
sql
} from "drizzle-orm";
db,
exitNodes,
newts,
orgs,
remoteExitNodes,
roleSites,
sites,
userSites
} from "@server/db";
import cache from "@server/lib/cache";
import response from "@server/lib/response";
import logger from "@server/logger";
import { OpenAPITags, registry } from "@server/openApi";
import HttpCode from "@server/types/HttpCode";
import type { PaginatedResponse } from "@server/types/Pagination";
import { and, asc, desc, eq, inArray, like, or, sql } from "drizzle-orm";
import { NextFunction, Request, Response } from "express";
import createHttpError from "http-errors";
import semver from "semver";
import { z } from "zod";
import { fromError } from "zod-validation-error";
import { OpenAPITags, registry } from "@server/openApi";
import semver from "semver";
import cache from "@server/lib/cache";
import type { PaginatedResponse } from "@server/types/Pagination";
async function getLatestNewtVersion(): Promise<string | null> {
try {
@@ -233,8 +230,14 @@ export async function listSites(
if (query) {
conditions.push(
or(
ilike(sites.name, "%" + query + "%"),
ilike(sites.niceId, "%" + query + "%")
like(
sql`LOWER(${sites.name})`,
"%" + query.toLowerCase() + "%"
),
like(
sql`LOWER(${sites.niceId})`,
"%" + query.toLowerCase() + "%"
)
)
);
}

View File

@@ -1,15 +1,14 @@
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import { db, resources } from "@server/db";
import { siteResources, sites, SiteResource } from "@server/db";
import { db, SiteResource, siteResources, sites } from "@server/db";
import response from "@server/lib/response";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";
import { eq, and, asc, ilike, or } from "drizzle-orm";
import { fromError } from "zod-validation-error";
import logger from "@server/logger";
import { OpenAPITags, registry } from "@server/openApi";
import HttpCode from "@server/types/HttpCode";
import type { PaginatedResponse } from "@server/types/Pagination";
import { and, asc, eq, like, or, sql } from "drizzle-orm";
import { NextFunction, Request, Response } from "express";
import createHttpError from "http-errors";
import { z } from "zod";
import { fromError } from "zod-validation-error";
const listAllSiteResourcesByOrgParamsSchema = z.strictObject({
orgId: z.string()
@@ -118,11 +117,26 @@ export async function listAllSiteResourcesByOrg(
if (query) {
conditions.push(
or(
ilike(siteResources.name, "%" + query + "%"),
ilike(siteResources.destination, "%" + query + "%"),
ilike(siteResources.alias, "%" + query + "%"),
ilike(siteResources.aliasAddress, "%" + query + "%"),
ilike(sites.name, "%" + query + "%")
like(
sql`LOWER(${siteResources.name})`,
"%" + query.toLowerCase() + "%"
),
like(
sql`LOWER(${siteResources.destination})`,
"%" + query.toLowerCase() + "%"
),
like(
sql`LOWER(${siteResources.alias})`,
"%" + query.toLowerCase() + "%"
),
like(
sql`LOWER(${siteResources.aliasAddress})`,
"%" + query.toLowerCase() + "%"
),
like(
sql`LOWER(${sites.name})`,
"%" + query.toLowerCase() + "%"
)
)
);
}