ff-admin-server/src/service/memberService.ts

76 lines
2.7 KiB
TypeScript
Raw Normal View History

2024-09-16 12:37:06 +02:00
import { dataSource } from "../data-source";
import { member } from "../entity/member";
2024-09-16 15:55:41 +02:00
import { membership } from "../entity/membership";
2024-09-16 12:37:06 +02:00
import InternalException from "../exceptions/internalException";
export default abstract class MemberService {
/**
* @description get all members
2024-09-16 18:00:00 +02:00
* @returns {Promise<[Array<member>, number]>}
2024-09-16 12:37:06 +02:00
*/
2024-09-16 18:00:00 +02:00
static async getAll(offset: number = 0, count: number = 25): Promise<[Array<member>, number]> {
2024-09-16 12:37:06 +02:00
return await dataSource
.getRepository(member)
.createQueryBuilder("member")
2024-09-16 15:55:41 +02:00
.leftJoinAndMapOne(
"member.firstMembershipEntry",
"member.memberships",
"membership_first",
"membership_first.memberId = member.id AND membership_first.start = (SELECT MIN(m.start) FROM membership m WHERE m.memberId = member.id)"
)
.leftJoinAndMapOne(
"member.lastMembershipEntry",
"member.memberships",
"membership_last",
"membership_last.memberId = member.id AND membership_last.start = (SELECT MAX(m.start) FROM membership m WHERE m.memberId = member.id)"
)
2024-09-16 19:03:41 +02:00
.leftJoinAndSelect("membership_first.status", "status_first")
.leftJoinAndSelect("membership_last.status", "status_last")
2024-09-16 18:00:00 +02:00
.offset(offset)
.limit(count)
2024-09-16 19:03:41 +02:00
.orderBy("member.lastname")
.addOrderBy("member.firstname")
.addOrderBy("member.nameaffix")
2024-09-16 18:00:00 +02:00
.getManyAndCount()
2024-09-16 12:37:06 +02:00
.then((res) => {
return res;
})
.catch((err) => {
throw new InternalException("members not found", err);
});
}
/**
* @description get member by id
* @param {number} id
* @returns {Promise<Array<member>>}
*/
static async getById(id: number): Promise<member> {
return await dataSource
.getRepository(member)
.createQueryBuilder("member")
2024-09-16 15:55:41 +02:00
.leftJoinAndMapOne(
"member.firstMembershipEntry",
2024-09-16 18:00:00 +02:00
"member.memberships",
"membership_first",
"membership_first.memberId = member.id AND membership_first.start = (SELECT MIN(m.start) FROM membership m WHERE m.memberId = member.id)"
2024-09-16 15:55:41 +02:00
)
.leftJoinAndMapOne(
"member.lastMembershipEntry",
2024-09-16 18:00:00 +02:00
"member.memberships",
"membership_last",
"membership_last.memberId = member.id AND membership_last.start = (SELECT MAX(m.start) FROM membership m WHERE m.memberId = member.id)"
2024-09-16 15:55:41 +02:00
)
2024-09-16 19:03:41 +02:00
.leftJoinAndSelect("membership_first.status", "status_first")
.leftJoinAndSelect("membership_last.status", "status_last")
2024-09-16 12:37:06 +02:00
.where("member.id = :id", { id: id })
.getOneOrFail()
.then((res) => {
return res;
})
.catch((err) => {
throw new InternalException("member not found by id", err);
});
}
}