member pagination search

This commit is contained in:
Julian Krauser 2025-01-03 15:20:05 +01:00
parent 0d2c7dd7f1
commit b68e546788
3 changed files with 27 additions and 5 deletions

View file

@ -8,8 +8,8 @@ export default abstract class MemberService {
* @description get all members
* @returns {Promise<[Array<member>, number]>}
*/
static async getAll(offset: number = 0, count: number = 25): Promise<[Array<member>, number]> {
return await dataSource
static async getAll(offset: number = 0, count: number = 25, search: string = ""): Promise<[Array<member>, number]> {
let query = await dataSource
.getRepository(member)
.createQueryBuilder("member")
.leftJoinAndMapOne(
@ -36,7 +36,25 @@ export default abstract class MemberService {
)
.leftJoinAndSelect("preferredCommunication.type", "communicationtype_preferred")
.leftJoinAndMapMany("member.smsAlarming", "member.communications", "smsAlarming", "smsAlarming.isSMSAlarming = 1")
.leftJoinAndSelect("smsAlarming.type", "communicationtype_smsAlarming")
.leftJoinAndSelect("smsAlarming.type", "communicationtype_smsAlarming");
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,
});
}
});
}
return query
.offset(offset)
.limit(count)
.orderBy("member.lastname")