diff --git a/src/service/club/member/memberService.ts b/src/service/club/member/memberService.ts index 234b73f..6095653 100644 --- a/src/service/club/member/memberService.ts +++ b/src/service/club/member/memberService.ts @@ -28,19 +28,32 @@ export default abstract class MemberService { let query = this.applyMemberBaseJoins(); if (search != "") { - search.split(" ").forEach((term, index) => { - const searchQuery = `%${term}%`; - const dynamic = "searchQuery" + Math.random().toString(36).substring(2); - if (index == 0) { - query = query.where(`member.firstname LIKE :${dynamic} OR member.lastname LIKE :${dynamic}`, { - [dynamic]: searchQuery, - }); - } else { - query = query.orWhere(`member.firstname LIKE :${dynamic} OR member.lastname LIKE :${dynamic}`, { - [dynamic]: searchQuery, - }); + let searchBits = search.split(" "); + console.log(searchBits); + + if (searchBits.length < 2) { + query = query.where(`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery`, { + searchQuery: `%${searchBits[0]}%`, + }); + } else { + let pairs: string[][] = []; + 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) {