From 067d9069cb23127d8fbbc846bdd04fcf841a7a1c Mon Sep 17 00:00:00 2001 From: ekzyis Date: Sun, 3 Aug 2025 19:17:34 +0200 Subject: [PATCH] improvements to upload fees code (#2382) * Use $queryRaw instead of $queryRawUnsafe * Replace comment with destructuring * Return all upload fees as BigInt --- api/paidAction/itemUpdate.js | 2 +- api/paidAction/territoryUpdate.js | 2 +- api/resolvers/upload.js | 15 +++++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/api/paidAction/itemUpdate.js b/api/paidAction/itemUpdate.js index 7c6b8436..00f929c2 100644 --- a/api/paidAction/itemUpdate.js +++ b/api/paidAction/itemUpdate.js @@ -17,7 +17,7 @@ export async function getCost ({ id, boost = 0, uploadIds, bio }, { me, models } // or more boost const old = await models.item.findUnique({ where: { id: parseInt(id) } }) const { totalFeesMsats } = await uploadFees(uploadIds, { models, me }) - const cost = BigInt(totalFeesMsats) + satsToMsats(boost - old.boost) + const cost = totalFeesMsats + satsToMsats(boost - old.boost) if (cost > 0 && old.invoiceActionState && old.invoiceActionState !== 'PAID') { throw new Error('creation invoice not paid') diff --git a/api/paidAction/territoryUpdate.js b/api/paidAction/territoryUpdate.js index a40900a1..75e1c6c4 100644 --- a/api/paidAction/territoryUpdate.js +++ b/api/paidAction/territoryUpdate.js @@ -21,7 +21,7 @@ export async function getCost ({ oldName, billingType, uploadIds }, { models, me const { totalFees } = await uploadFees(uploadIds, { models, me }) - const cost = proratedBillingCost(oldSub, billingType) + totalFees + const cost = BigInt(proratedBillingCost(oldSub, billingType)) + totalFees return satsToMsats(cost) } diff --git a/api/resolvers/upload.js b/api/resolvers/upload.js index 9b012af1..267d41f4 100644 --- a/api/resolvers/upload.js +++ b/api/resolvers/upload.js @@ -60,13 +60,16 @@ export function uploadIdsFromText (text) { } export async function uploadFees (s3Keys, { models, me }) { - // returns info object in this format: - // { bytes24h: int, bytesUnpaid: int, nUnpaid: int, uploadFeesMsats: BigInt } - const [info] = await models.$queryRawUnsafe('SELECT * FROM upload_fees($1::INTEGER, $2::INTEGER[])', me ? me.id : USER_ID.anon, s3Keys) - const uploadFees = msatsToSats(info.uploadFeesMsats) - const totalFeesMsats = info.nUnpaid * Number(info.uploadFeesMsats) + const [{ + bytes24h, + bytesUnpaid, + nUnpaid, + uploadFeesMsats + }] = await models.$queryRaw`SELECT * FROM upload_fees(${me?.id ?? USER_ID.anon}::INTEGER, ${s3Keys}::INTEGER[])` + const uploadFees = msatsToSats(uploadFeesMsats) + const totalFeesMsats = BigInt(nUnpaid) * uploadFeesMsats const totalFees = msatsToSats(totalFeesMsats) - return { ...info, uploadFees, totalFees, totalFeesMsats } + return { bytes24h, bytesUnpaid, nUnpaid, uploadFees, totalFees, totalFeesMsats } } export async function throwOnExpiredUploads (uploadIds, { tx }) {