change: optimized member search

This commit is contained in:
Julian Krauser 2025-04-03 08:10:00 +02:00
parent 240943210e
commit daa0dda4db

View file

@ -1,4 +1,4 @@
import { SelectQueryBuilder } from "typeorm"; import { Brackets, Like, SelectQueryBuilder } from "typeorm";
import { dataSource } from "../../../data-source"; import { dataSource } from "../../../data-source";
import { member } from "../../../entity/club/member/member"; import { member } from "../../../entity/club/member/member";
import { membership } from "../../../entity/club/member/membership"; import { membership } from "../../../entity/club/member/membership";
@ -29,30 +29,27 @@ export default abstract class MemberService {
if (search != "") { if (search != "") {
let searchBits = search.split(" "); let searchBits = search.split(" ");
console.log(searchBits);
if (searchBits.length < 2) { if (searchBits.length < 2) {
query = query.where(`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery`, { query = query.where(`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery`, {
searchQuery: `%${searchBits[0]}%`, searchQuery: `%${searchBits[0]}%`,
}); });
} else { } else {
let pairs: string[][] = []; searchBits
for (let i = 0; i < searchBits.length; i++) { .flatMap((v, i) => searchBits.slice(i + 1).map((w) => [v, w]))
for (let j = 0; j < searchBits.length; j++) { .forEach((term) => {
if (searchBits[i] != searchBits[j]) pairs.push([searchBits[i], searchBits[j]]); query = query
} .orWhere(
} new Brackets((qb) =>
qb.where({ firstname: Like(`%${term[0]}%`) }).andWhere({ lastname: Like(`%${term[1]}%`) })
pairs.forEach((term, index) => { )
const dynamic = "searchQuery" + Math.random().toString(36).substring(2); )
query = query.orWhere( .orWhere(
`member.firstname LIKE :${dynamic + "_firstname"} AND member.lastname LIKE :${dynamic + "_lastname"}`, new Brackets((qb) =>
{ qb.where({ firstname: Like(`%${term[1]}%`) }).andWhere({ lastname: Like(`%${term[0]}%`) })
[dynamic + "_firstname"]: `%${term[0]}%`, )
[dynamic + "_lastname"]: `%${term[1]}%`, );
} });
);
});
} }
} }