Edit: /tmp/tsx-0/17887-bf1f17c309aa417327ac27064eb16f939e5cb223 (5996B)
{"code":"__filename=\"/opt/canhelp/apps/api/src/lib/balance.ts\";(()=>{\n\"use strict\";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,\"name\",{value,configurable:true});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc2)=>{if(from&&typeof from===\"object\"||typeof from===\"function\"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc2=__getOwnPropDesc(from,key))||desc2.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},\"__esModule\",{value:true}),mod);var balance_exports={};__export(balance_exports,{applyBalanceChange:()=>applyBalanceChange,getPaymentByOrderRef:()=>getPaymentByOrderRef,getUserBalanceHistory:()=>getUserBalanceHistory,getUserById:()=>getUserById});module.exports=__toCommonJS(balance_exports);var import_drizzle_orm=require(\"drizzle-orm\");var import_db=require(\"@canhelp/db\");function toFixedAmount(value){return value.toFixed(2)}__name(toFixedAmount,\"toFixedAmount\");async function applyBalanceChange(executor,input){const amount=Number(input.amount);if(!Number.isFinite(amount)||amount<=0){throw new Error(\"Invalid balance amount\")}const signedAmount=input.direction===\"credit\"?amount:-amount;const signedAmountSql=toFixedAmount(signedAmount);const updateResult=await executor.execute(import_drizzle_orm.sql`\n UPDATE users\n SET balance = balance + ${signedAmountSql}::numeric,\n updated_at = now()\n WHERE id = ${input.userId}\n AND balance + ${signedAmountSql}::numeric >= 0\n RETURNING\n (balance - ${signedAmountSql}::numeric)::text AS balance_before,\n balance::text AS balance_after\n `);const row=updateResult.rows?.[0];if(!row){throw new Error(input.direction===\"debit\"?\"Insufficient balance\":\"User not found\")}const[transaction]=await executor.insert(import_db.balanceTransactions).values({userId:input.userId,adminUserId:input.adminUserId??null,paymentId:input.paymentId??null,kind:input.kind,direction:input.direction,amount:toFixedAmount(amount),balanceBefore:row.balance_before,balanceAfter:row.balance_after,currency:input.currency??\"EUR\",description:input.description??null,metadata:input.metadata??null}).returning();return{transaction,balanceBefore:Number(row.balance_before),balanceAfter:Number(row.balance_after)}}__name(applyBalanceChange,\"applyBalanceChange\");async function getUserBalanceHistory(executor,userId,limit=50){return executor.select({id:import_db.balanceTransactions.id,kind:import_db.balanceTransactions.kind,direction:import_db.balanceTransactions.direction,amount:import_db.balanceTransactions.amount,balanceBefore:import_db.balanceTransactions.balanceBefore,balanceAfter:import_db.balanceTransactions.balanceAfter,currency:import_db.balanceTransactions.currency,description:import_db.balanceTransactions.description,metadata:import_db.balanceTransactions.metadata,createdAt:import_db.balanceTransactions.createdAt,paymentId:import_db.balanceTransactions.paymentId,adminUserId:import_db.balanceTransactions.adminUserId}).from(import_db.balanceTransactions).where((0,import_drizzle_orm.eq)(import_db.balanceTransactions.userId,userId)).orderBy((0,import_drizzle_orm.desc)(import_db.balanceTransactions.createdAt)).limit(limit)}__name(getUserBalanceHistory,\"getUserBalanceHistory\");async function getPaymentByOrderRef(executor,orderRef){const[payment]=await executor.select().from(import_db.payments).where((0,import_drizzle_orm.eq)(import_db.payments.orderRef,orderRef)).limit(1);return payment??null}__name(getPaymentByOrderRef,\"getPaymentByOrderRef\");async function getUserById(executor,userId){const[user]=await executor.select().from(import_db.users).where((0,import_drizzle_orm.eq)(import_db.users.id,userId)).limit(1);return user??null}__name(getUserById,\"getUserById\");0&&(module.exports={applyBalanceChange,getPaymentByOrderRef,getUserBalanceHistory,getUserById});\n})()\n","warnings":[],"map":{"version":3,"mappings":";svBAAA,2RAA8B,uBAC9B,cAAqD,uBAmBrD,SAAS,cAAc,MAAe,CACpC,OAAO,MAAM,QAAQ,CAAC,CACxB,CAFS,sCAIT,eAAsB,mBAAmB,SAAsB,MAAgC,CAC7F,MAAM,OAAS,OAAO,MAAM,MAAM,EAClC,GAAI,CAAC,OAAO,SAAS,MAAM,GAAK,QAAU,EAAG,CAC3C,MAAM,IAAI,MAAM,wBAAwB,CAC1C,CAEA,MAAM,aAAe,MAAM,YAAc,SAAW,OAAS,CAAC,OAC9D,MAAM,gBAAkB,cAAc,YAAY,EAElD,MAAM,aAAe,MAAM,SAAS,QAAQ;AAAA;AAAA,8BAEhB,eAAe;AAAA;AAAA,iBAE5B,MAAM,MAAM;AAAA,sBACP,eAAe;AAAA;AAAA,mBAElB,eAAe;AAAA;AAAA,GAE/B,EAED,MAAM,IAAO,aAAqF,OAAO,CAAC,EAC1G,GAAI,CAAC,IAAK,CACR,MAAM,IAAI,MAAM,MAAM,YAAc,QAAU,uBAAyB,gBAAgB,CACzF,CAEA,KAAM,CAAC,WAAW,EAAI,MAAM,SACzB,OAAO,6BAAmB,EAC1B,OAAO,CACN,OAAQ,MAAM,OACd,YAAa,MAAM,aAAe,KAClC,UAAW,MAAM,WAAa,KAC9B,KAAM,MAAM,KACZ,UAAW,MAAM,UACjB,OAAQ,cAAc,MAAM,EAC5B,cAAe,IAAI,eACnB,aAAc,IAAI,cAClB,SAAU,MAAM,UAAY,MAC5B,YAAa,MAAM,aAAe,KAClC,SAAU,MAAM,UAAY,IAC9B,CAAC,EACA,UAAU,EAEb,MAAO,CACL,YACA,cAAe,OAAO,IAAI,cAAc,EACxC,aAAc,OAAO,IAAI,aAAa,CACxC,CACF,CA/CsB,gDAiDtB,eAAsB,sBAAsB,SAAsB,OAAgB,MAAQ,GAAI,CAC5F,OAAO,SACJ,OAAO,CACN,GAAI,8BAAoB,GACxB,KAAM,8BAAoB,KAC1B,UAAW,8BAAoB,UAC/B,OAAQ,8BAAoB,OAC5B,cAAe,8BAAoB,cACnC,aAAc,8BAAoB,aAClC,SAAU,8BAAoB,SAC9B,YAAa,8BAAoB,YACjC,SAAU,8BAAoB,SAC9B,UAAW,8BAAoB,UAC/B,UAAW,8BAAoB,UAC/B,YAAa,8BAAoB,WACnC,CAAC,EACA,KAAK,6BAAmB,EACxB,SAAM,uBAAG,8BAAoB,OAAQ,MAAM,CAAC,EAC5C,WAAQ,yBAAK,8BAAoB,SAAS,CAAC,EAC3C,MAAM,KAAK,CAChB,CApBsB,sDAsBtB,eAAsB,qBAAqB,SAAsB,SAAkB,CACjF,KAAM,CAAC,OAAO,EAAI,MAAM,SACrB,OAAO,EACP,KAAK,kBAAQ,EACb,SAAM,uBAAG,mBAAS,SAAU,QAAQ,CAAC,EACrC,MAAM,CAAC,EAEV,OAAO,SAAW,IACpB,CARsB,oDAUtB,eAAsB,YAAY,SAAsB,OAAgB,CACtE,KAAM,CAAC,IAAI,EAAI,MAAM,SAClB,OAAO,EACP,KAAK,eAAK,EACV,SAAM,uBAAG,gBAAM,GAAI,MAAM,CAAC,EAC1B,MAAM,CAAC,EAEV,OAAO,MAAQ,IACjB,CARsB","names":[],"ignoreList":[],"sources":["/opt/canhelp/apps/api/src/lib/balance.ts"],"sourcesContent":[null]}}