enhance: case-insensitive search with ILike

This commit is contained in:
Julian Krauser 2025-06-05 08:04:11 +02:00
parent 2998943dfa
commit db7a4fff03
2 changed files with 8 additions and 8 deletions

View file

@ -228,19 +228,19 @@ export default abstract class DynamicQueryBuilder {
query += ` IS NOT NULL`;
break;
case "contains":
query += ` LIKE :${parameterKey}`;
query += ` ILIKE :${parameterKey}`;
parameters[parameterKey] = `%${condition.value}%`;
break;
case "notContains":
query += ` NOT LIKE :${parameterKey}`;
query += ` NOT ILIKE :${parameterKey}`;
parameters[parameterKey] = `%${condition.value}%`;
break;
case "startsWith":
query += ` LIKE :${parameterKey}`;
query += ` ILIKE :${parameterKey}`;
parameters[parameterKey] = `${condition.value}%`;
break;
case "endsWith":
query += ` LIKE :${parameterKey}`;
query += ` ILIKE :${parameterKey}`;
parameters[parameterKey] = `%${condition.value}`;
break;
case "timespanEq":

View file

@ -1,4 +1,4 @@
import { Brackets, Like, Not, SelectQueryBuilder } from "typeorm";
import { Brackets, ILike, Not, SelectQueryBuilder } from "typeorm";
import { dataSource } from "../../../data-source";
import { member } from "../../../entity/club/member/member";
import DatabaseActionException from "../../../exceptions/databaseActionException";
@ -30,7 +30,7 @@ export default abstract class MemberService {
if (searchBits.length < 2) {
query = query.where(
`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery OR member.internalId LIKE :searchQuery`,
`member.firstname ILIKE :searchQuery OR member.lastname ILIKE :searchQuery OR member.internalId ILIKE :searchQuery`,
{
searchQuery: `%${searchBits[0]}%`,
}
@ -42,12 +42,12 @@ export default abstract class MemberService {
query = query
.orWhere(
new Brackets((qb) =>
qb.where({ firstname: Like(`%${term[0]}%`) }).andWhere({ lastname: Like(`%${term[1]}%`) })
qb.where({ firstname: ILike(`%${term[0]}%`) }).andWhere({ lastname: ILike(`%${term[1]}%`) })
)
)
.orWhere(
new Brackets((qb) =>
qb.where({ firstname: Like(`%${term[1]}%`) }).andWhere({ lastname: Like(`%${term[0]}%`) })
qb.where({ firstname: ILike(`%${term[1]}%`) }).andWhere({ lastname: ILike(`%${term[0]}%`) })
)
);
});