feat: create email template for TTO reservation confirmation

feat: implement order notifications service with TTO reservation confirmation handling

feat: create migration for TTO booking email webhook trigger
This commit is contained in:
Danel Kungla
2025-09-30 16:05:43 +03:00
parent 4003284f3a
commit 72f6f2b716
56 changed files with 3692 additions and 294 deletions

View File

@@ -16,7 +16,7 @@ export interface AccountBenefitStatistics {
analysisPackagesCount: number;
analysisPackagesSum: number;
}
};
}
export const loadCompanyPersonalAccountsBalanceEntries = async ({
@@ -38,12 +38,21 @@ export const loadCompanyPersonalAccountsBalanceEntries = async ({
.from('account_balance_entries')
.select('*')
.eq('is_active', true)
.in('account_id', accountMemberships.map(({ user_id }) => user_id))
.in(
'account_id',
accountMemberships.map(({ user_id }) => user_id),
)
.throwOnError();
const purchaseEntries = accountBalanceEntries.filter(({ entry_type }) => entry_type === 'purchase');
const analysesEntries = purchaseEntries.filter(({ is_analysis_order }) => is_analysis_order);
const analysisPackagesEntries = purchaseEntries.filter(({ is_analysis_package_order }) => is_analysis_package_order);
const purchaseEntries = accountBalanceEntries.filter(
({ entry_type }) => entry_type === 'purchase',
);
const analysesEntries = purchaseEntries.filter(
({ is_analysis_order }) => is_analysis_order,
);
const analysisPackagesEntries = purchaseEntries.filter(
({ is_analysis_package_order }) => is_analysis_package_order,
);
return {
accountBalanceEntries,
@@ -51,9 +60,12 @@ export const loadCompanyPersonalAccountsBalanceEntries = async ({
analysisPackagesEntries,
companyAccountsCount: count || 0,
purchaseEntries,
purchaseEntriesTotal: purchaseEntries.reduce((acc, { amount }) => acc + Math.abs(amount || 0), 0),
purchaseEntriesTotal: purchaseEntries.reduce(
(acc, { amount }) => acc + Math.abs(amount || 0),
0,
),
};
}
};
export const loadAccountBenefitStatistics = async (
accountId: string,
@@ -86,10 +98,16 @@ export const loadAccountBenefitStatistics = async (
totalSum: purchaseEntriesTotal,
analysesCount: analysesEntries.length,
analysesSum: analysesEntries.reduce((acc, { amount }) => acc + Math.abs(amount || 0), 0),
analysesSum: analysesEntries.reduce(
(acc, { amount }) => acc + Math.abs(amount || 0),
0,
),
analysisPackagesCount: analysisPackagesEntries.length,
analysisPackagesSum: analysisPackagesEntries.reduce((acc, { amount }) => acc + Math.abs(amount || 0), 0),
analysisPackagesSum: analysisPackagesEntries.reduce(
(acc, { amount }) => acc + Math.abs(amount || 0),
0,
),
},
};
};