change: more precise member search

This commit is contained in:
Julian Krauser 2025-04-02 08:37:33 +02:00
parent 1e22968d05
commit 240943210e

View file

@ -28,19 +28,32 @@ export default abstract class MemberService {
let query = this.applyMemberBaseJoins(); let query = this.applyMemberBaseJoins();
if (search != "") { if (search != "") {
search.split(" ").forEach((term, index) => { let searchBits = search.split(" ");
const searchQuery = `%${term}%`; console.log(searchBits);
const dynamic = "searchQuery" + Math.random().toString(36).substring(2);
if (index == 0) { if (searchBits.length < 2) {
query = query.where(`member.firstname LIKE :${dynamic} OR member.lastname LIKE :${dynamic}`, { query = query.where(`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery`, {
[dynamic]: searchQuery, searchQuery: `%${searchBits[0]}%`,
}); });
} else { } else {
query = query.orWhere(`member.firstname LIKE :${dynamic} OR member.lastname LIKE :${dynamic}`, { let pairs: string[][] = [];
[dynamic]: searchQuery, for (let i = 0; i < searchBits.length; i++) {
}); for (let j = 0; j < searchBits.length; j++) {
if (searchBits[i] != searchBits[j]) pairs.push([searchBits[i], searchBits[j]]);
}
} }
});
pairs.forEach((term, index) => {
const dynamic = "searchQuery" + Math.random().toString(36).substring(2);
query = query.orWhere(
`member.firstname LIKE :${dynamic + "_firstname"} AND member.lastname LIKE :${dynamic + "_lastname"}`,
{
[dynamic + "_firstname"]: `%${term[0]}%`,
[dynamic + "_lastname"]: `%${term[1]}%`,
}
);
});
}
} }
if (ids.length != 0) { if (ids.length != 0) {