init commit
This commit is contained in:
189
server/api/walletApi/transferFromExchange.ts
Executable file
189
server/api/walletApi/transferFromExchange.ts
Executable file
@@ -0,0 +1,189 @@
|
||||
import myError from '../myError'
|
||||
import { Currencies } from '../../db/currencies'
|
||||
import * as bitcoin from '../walletApi/bitcoin'
|
||||
import * as etheriuem from '../walletApi/etheriuem'
|
||||
import * as tron from '../walletApi/tron'
|
||||
import * as mongoose from 'mongoose'
|
||||
import { User } from '../../db/user'
|
||||
import * as _ from 'lodash'
|
||||
import { PendingTransfers } from '../../db/pendingTransfers'
|
||||
import { SuccessfulTransfers } from '../../db/successfulTransfers'
|
||||
|
||||
export const transferFromExchangeApi = async(currencyId, value, receiver, userId) => {
|
||||
let info
|
||||
let resObj
|
||||
let checkStatus = () => {
|
||||
return null
|
||||
}
|
||||
const session = await mongoose.startSession()
|
||||
return session.withTransaction(async() => {
|
||||
return User.findOne({_id:userId}).session(session)
|
||||
.then(async (user)=>{
|
||||
if(user){
|
||||
return Currencies.findOne({_id:currencyId})
|
||||
.then(async(cur) => {
|
||||
let CurAbName = ""
|
||||
if(cur){
|
||||
let curInWall = _.find(user.wallet, (i) => { return i.currency.toString() === currencyId.toString()})
|
||||
if(curInWall) {
|
||||
|
||||
if(curInWall.value >= Number(value)){
|
||||
CurAbName = cur.ab_name
|
||||
switch(CurAbName) {
|
||||
case "BTC":
|
||||
checkStatus = () => {
|
||||
return bitcoin.bitcoinTransferFromExchange(value,receiver)
|
||||
.then((txHash) => {
|
||||
info = {
|
||||
status:"pending",
|
||||
txHash:txHash
|
||||
}
|
||||
})
|
||||
.catch((err)=>{
|
||||
throw err
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
case "ETH":
|
||||
return etheriuem.sendEther(receiver.toString(),value)
|
||||
.then(async (result) => {
|
||||
if(result&&result.transactionHash) {
|
||||
const bodySuccessfulOffer = {
|
||||
userId: user._id ,
|
||||
transactions : []
|
||||
}
|
||||
const bodyTransaction = {
|
||||
txId : result.transactionHash,
|
||||
currencyId : currencyId,
|
||||
currencyName : CurAbName,
|
||||
value : Number(value),
|
||||
type : 'send'
|
||||
}
|
||||
bodySuccessfulOffer.transactions.push(bodyTransaction)
|
||||
} else if(result) {
|
||||
throw ("could not get any transaction "+ result)
|
||||
} else {
|
||||
throw ("could not get result ")
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
throw err
|
||||
})
|
||||
|
||||
case "TRX":
|
||||
}
|
||||
return Promise.all([checkStatus()])
|
||||
.then(() =>{
|
||||
return PendingTransfers.findOne({ userId:userId }).session(session)
|
||||
.then(async (userPending) => {
|
||||
if(userPending){
|
||||
userPending.transactions.push({
|
||||
txId: info.txHash,
|
||||
currencyId: currencyId,
|
||||
currencyName: CurAbName,
|
||||
value: value,
|
||||
type: "send"
|
||||
})
|
||||
await userPending.save()
|
||||
|
||||
} else {
|
||||
const usrPending = {
|
||||
userId: userId,
|
||||
transactions: [{
|
||||
txId: info.txHash,
|
||||
currencyId: currencyId,
|
||||
currencyName: CurAbName,
|
||||
value: value,
|
||||
type: "id"
|
||||
}]
|
||||
}
|
||||
await PendingTransfers.create([usrPending],{ session })
|
||||
}
|
||||
curInWall.value -= value
|
||||
await user.save()
|
||||
resObj =
|
||||
{
|
||||
status:"success",
|
||||
txValue:value,
|
||||
txHash:info.txHash
|
||||
}
|
||||
}).catch((err)=>{
|
||||
throw err
|
||||
})
|
||||
}).catch((err)=>{
|
||||
throw err
|
||||
})
|
||||
|
||||
} else {
|
||||
const error = new myError(
|
||||
'you do not have enough currency ',
|
||||
400,
|
||||
5,
|
||||
'موجودی کافی نمی باشد',
|
||||
'خطا رخ داد'
|
||||
)
|
||||
throw error
|
||||
}
|
||||
|
||||
} else {
|
||||
const error = new myError(
|
||||
'currency not found in user wallet',
|
||||
400,
|
||||
5,
|
||||
'ارز در کیف پول پیدا نشد',
|
||||
'خطا رخ داد'
|
||||
)
|
||||
throw error
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
const error = new myError(
|
||||
'currency not found',
|
||||
400,
|
||||
5,
|
||||
'ارز پیدا نشد',
|
||||
'خطا رخ داد'
|
||||
)
|
||||
throw error
|
||||
}
|
||||
|
||||
}).catch((err)=>{
|
||||
throw err
|
||||
})
|
||||
} else {
|
||||
const error = new myError(
|
||||
'user not found',
|
||||
400,
|
||||
5,
|
||||
'کاربر پیدا نشد.',
|
||||
'خطا رخ داد'
|
||||
)
|
||||
throw error
|
||||
}
|
||||
}).catch((err)=>{
|
||||
throw err
|
||||
})
|
||||
})
|
||||
.then(() => {
|
||||
|
||||
return resObj
|
||||
|
||||
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log("error in with Transaction",err)
|
||||
throw("error in with transaction")
|
||||
})
|
||||
.finally(() => {
|
||||
session.endSession()
|
||||
})
|
||||
|
||||
|
||||
.catch((err) => {
|
||||
throw err
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user