Skip to content
Snippets Groups Projects
Commit 94b19b8e authored by Aaron Dötsch's avatar Aaron Dötsch
Browse files

Implement buy notifications

parent b97d9bbf
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,8 @@ import { buyArticles, transferMoney, useVoucher } from "../transactions"; ...@@ -5,6 +5,8 @@ import { buyArticles, transferMoney, useVoucher } from "../transactions";
import { getUserById } from "../users"; import { getUserById } from "../users";
import { Codes } from "$lib/customcodes"; import { Codes } from "$lib/customcodes";
import { AllOrNothingRateLimiter, SlidingWindowRateLimiter } from "../../../lib/ratelimit"; import { AllOrNothingRateLimiter, SlidingWindowRateLimiter } from "../../../lib/ratelimit";
import { sendNotification } from "$lib/server/notifications/handler";
import { NotificationType } from "$lib/notifications/notificationTypes";
function isValidCart(cart, articles, voucherCart, vouchers, priceModifier){ function isValidCart(cart, articles, voucherCart, vouchers, priceModifier){
...@@ -43,6 +45,9 @@ export async function POST(event) { ...@@ -43,6 +45,9 @@ export async function POST(event) {
const items = [...data.items, ...data.vouchers.map(voucher => ({...voucher, code: Codes.Voucher}))]; const items = [...data.items, ...data.vouchers.map(voucher => ({...voucher, code: Codes.Voucher}))];
if(user.perms & Flags.CANT_GO_NEGATIVE && items.reduce((acc, item) => acc + item.price + item.premium, 0) > user.balance) return new Response(JSON.stringify({message: "Not enough balance"}), {headers: {'content-type': 'application/json', 'status': 400}}); if(user.perms & Flags.CANT_GO_NEGATIVE && items.reduce((acc, item) => acc + item.price + item.premium, 0) > user.balance) return new Response(JSON.stringify({message: "Not enough balance"}), {headers: {'content-type': 'application/json', 'status': 400}});
const res = await buyArticles(user.id, user.card, items, data.vouchers, !!(user.perms & Flags.NO_BALANCE)); const res = await buyArticles(user.id, user.card, items, data.vouchers, !!(user.perms & Flags.NO_BALANCE));
const total = items.reduce((acc, item) => acc + item.price + item.premium, 0);
// no need to await
sendNotification(user, NotificationType.BUY, {items: items.map(item=>Object.assign({}, item, {name: articles[item.code]?.name})), total, balanceBefore: user.balance, balanceAfter: user.balance - total});
return new Response(JSON.stringify(res), {headers: {'content-type': 'application/json', 'status': 200}}); return new Response(JSON.stringify(res), {headers: {'content-type': 'application/json', 'status': 200}});
}catch(e){ }catch(e){
console.error(e); console.error(e);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment