From 907b30fe8bd2a58908f0272f54d9407408a3087c Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Wed, 19 Jul 2023 17:50:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AAget?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E8=8E=B7=E5=8F=96crypto=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3=EF=BC=8C=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=98=AF=E5=90=A6=E5=8F=AF=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E5=9B=BD=E5=BA=93=E6=A8=A1=E5=BC=8Feth=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/alchemy.controller.ts | 41 ++++++++++++++++++++++-- src/controllers/alchemyout.controller.ts | 4 +-- src/modules/PayRecord.ts | 1 + 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/controllers/alchemy.controller.ts b/src/controllers/alchemy.controller.ts index 9549329..3dbb7c3 100644 --- a/src/controllers/alchemy.controller.ts +++ b/src/controllers/alchemy.controller.ts @@ -3,7 +3,6 @@ import BaseController, { ROLE_ANON } from 'common/base.controller' import { ZError } from 'common/ZError' import { role, router } from 'decorators/router' import { createOrder, queryFiat, queryPrice, refreshToken } from 'service/alchemy.svr' -import { generateKVStr } from 'utils/net.util' import { PayRecord, PayStatus } from 'modules/PayRecord' import { PriceSvr } from 'service/price.svr' import { reportPayResult } from 'service/game.svr' @@ -52,7 +51,7 @@ class AlchemyController extends BaseController { throw new ZError(14, priceData.returnMsg || 'fetch price error') } logger.debug('pirce data::', JSON.stringify(priceData)) - let amountEstimate = priceData.data.cryptoAmount + let amountEstimate = priceData.data.cryptoQuantity let record = new PayRecord({ account: user.id, address, @@ -123,6 +122,30 @@ class AlchemyController extends BaseController { return { price: result } } + @router('get /pay/alchemy/crypto_price') + async queryCryptoPriceGET(req, res) { + let { crypto, chain, currency, env } = req.params + if (!crypto || !chain) { + throw new ZError(11, 'token or network not found') + } + // ceg价格固定为0.1 + if ((chain.toLowerCase() === 'agor' || chain.toLowerCase() === 'eth') && crypto.toLowerCase() === 'ceg') { + return { price: 0.1 } + } + if ((chain.toLowerCase() === 'agor' || chain.toLowerCase() === 'eth') && crypto.toLowerCase() === 'agor') { + crypto = 'ETH' + chain = 'ARBITRUM' + } + + let data = { + crypto, + network: chain, + fiat: currency || 'USD', + } + let result = await new PriceSvr().fetchPrice(data) + return { price: result } + } + @router('get /pay/alchemy/fait_list') async cryptoList(req, res) { let result = await queryFiat() @@ -131,6 +154,20 @@ class AlchemyController extends BaseController { } return result.data } + @router('get /pay/alchemy/can_i_buy_treasury') + async canIBuyEth(req, res) { + let user = req.user + let crypto = 'ETH' + let today = new Date() + today.setHours(0, 0, 0, 0) + let count = await PayRecord.countDocuments({ + account: user.id, + crypto, + status: PayStatus.SUCCESS, + createdAt: { $gte: today }, + }) + return { result: count >= 3 ? 0 : 1 } + } @role(ROLE_ANON) @router('post /pay/alchemy/estimateGas') diff --git a/src/controllers/alchemyout.controller.ts b/src/controllers/alchemyout.controller.ts index 0247a56..8d2d392 100644 --- a/src/controllers/alchemyout.controller.ts +++ b/src/controllers/alchemyout.controller.ts @@ -177,9 +177,9 @@ class AlchemyOutController extends BaseController { // 简单的比较一下, 如果差距太大, 就不处理 if (record.cryptoAmountEstimate) { let diff = parseFloat(cryptoAmount) / parseFloat(record.cryptoAmountEstimate) - if (diff > 3 || diff < 0.5) { + if (diff > 3) { new OrderCacheSvr().removeOrder(orderNo) - return errorRes('params mismatch, cryptoAmount too big or too small') + return errorRes('params mismatch, cryptoAmount too big') } } record.cryptoAmount = diff --git a/src/modules/PayRecord.ts b/src/modules/PayRecord.ts index 9f1b80e..a355a0b 100644 --- a/src/modules/PayRecord.ts +++ b/src/modules/PayRecord.ts @@ -21,6 +21,7 @@ export enum PayStatus { @dbconn('pay') @index({ outOrderId: 1 }, { unique: true, partialFilterExpression: { outOrderId: { $exists: true } } }) +@index({ account: 1, crypto: 1, status: 1, createdAt: 1 }, { unique: false }) @modelOptions({ schemaOptions: { collection: 'pay_record', timestamps: true }, options: { allowMixed: Severity.ALLOW },