import { dataSource } from "../../../data-source"; import { membership } from "../../../entity/club/member/membership"; import DatabaseActionException from "../../../exceptions/databaseActionException"; import InternalException from "../../../exceptions/internalException"; import { membershipTotalView, membershipView } from "../../../views/membershipsView"; export default abstract class MembershipService { /** * @description get all by member id * @param {string} memberId * @returns {Promise>} */ static async getAll(memberId: string): Promise> { return await dataSource .getRepository(membership) .createQueryBuilder("membership") .leftJoinAndSelect("membership.status", "membershipStatus") .where("membership.memberId = :memberId", { memberId: memberId }) .orderBy("membership.start", "DESC") .getMany() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "membershis", err); }); } /** * @description get by memberId and recordId * @param {string} memberId * @param {number} recordId * @returns {Promise>} */ static async getById(memberId: string, recordId: number): Promise { return await dataSource .getRepository(membership) .createQueryBuilder("membership") .leftJoinAndSelect("membership.status", "membershipStatus") .where("membership.memberId = :memberId", { memberId: memberId }) .andWhere("membership.id = :recordId", { recordId: recordId }) .getOneOrFail() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "membership", err); }); } /** * @description get membership statistics by memberId * @param {string} memberId * @returns {Promise>} */ static async getStatisticsById(memberId: string): Promise> { return await dataSource .getRepository(membershipView) .createQueryBuilder("membershipView") .where("membershipView.memberId = :memberId", { memberId: memberId }) .getMany() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "membershipView", err); }); } /** * @description get membership total statistics by memberId * @param {string} memberId * @returns {Promise>} */ static async getTotalStatisticsById(memberId: string): Promise { return await dataSource .getRepository(membershipTotalView) .createQueryBuilder("membershipTotalView") .where("membershipTotalView.memberId = :memberId", { memberId: memberId }) .getOneOrFail() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "membershipTotalView", err); }); } }