fixed decay and missing user data bugs

This commit is contained in:
einhorn_b 2021-09-29 14:37:26 +02:00 committed by einhornimmond
parent f72164be13
commit db028d1d78
4 changed files with 20 additions and 12 deletions

View File

@ -46,6 +46,7 @@ export class TransactionResolver {
) )
transactions.decayDate = now.toString() transactions.decayDate = now.toString()
} }
return transactions return transactions
} }

View File

@ -18,12 +18,7 @@ async function calculateAndAddDecayTransactions(
userTransactions.forEach((userTransaction: dbUserTransaction) => { userTransactions.forEach((userTransaction: dbUserTransaction) => {
transactionIds.push(userTransaction.transactionId) transactionIds.push(userTransaction.transactionId)
involvedUserIds.push(userTransaction.userId)
}) })
// remove duplicates
// https://stackoverflow.com/questions/1960473/get-all-unique-values-in-a-javascript-array-remove-duplicates
const involvedUsersUnique = involvedUserIds.filter((v, i, a) => a.indexOf(v) === i)
const userIndiced = await dbUser.getUsersIndiced(involvedUsersUnique)
const transactions = await dbTransaction const transactions = await dbTransaction
.createQueryBuilder('transaction') .createQueryBuilder('transaction')
@ -43,15 +38,24 @@ async function calculateAndAddDecayTransactions(
const transactionIndiced: dbTransaction[] = [] const transactionIndiced: dbTransaction[] = []
transactions.forEach((transaction: dbTransaction) => { transactions.forEach((transaction: dbTransaction) => {
transactionIndiced[transaction.id] = transaction transactionIndiced[transaction.id] = transaction
if (transaction.transactionTypeId === 2) {
involvedUserIds.push(transaction.transactionSendCoin.userId)
involvedUserIds.push(transaction.transactionSendCoin.recipiantUserId)
}
}) })
// remove duplicates
// https://stackoverflow.com/questions/1960473/get-all-unique-values-in-a-javascript-array-remove-duplicates
const involvedUsersUnique = involvedUserIds.filter((v, i, a) => a.indexOf(v) === i)
const userIndiced = await dbUser.getUsersIndiced(involvedUsersUnique)
const decayStartTransaction = await Decay.getDecayStartBlock() const decayStartTransaction = await Decay.getDecayStartBlock()
await userTransactions.forEach(async (userTransaction: dbUserTransaction, i: number) => { for (let i = 0; i < userTransactions.length; i++) {
const userTransaction = userTransactions[i]
const transaction = transactionIndiced[userTransaction.transactionId] const transaction = transactionIndiced[userTransaction.transactionId]
const finalTransaction = new Transaction() const finalTransaction = new Transaction()
finalTransaction.transactionId = transaction.id finalTransaction.transactionId = transaction.id
finalTransaction.date = transaction.received.toString() finalTransaction.date = transaction.received.toISOString()
finalTransaction.memo = transaction.memo finalTransaction.memo = transaction.memo
finalTransaction.totalBalance = roundFloorFrom4(userTransaction.balance) finalTransaction.totalBalance = roundFloorFrom4(userTransaction.balance)
const prev = i > 0 ? userTransactions[i - 1] : null const prev = i > 0 ? userTransactions[i - 1] : null
@ -137,7 +141,7 @@ async function calculateAndAddDecayTransactions(
finalTransactions.push(decayTransaction) finalTransactions.push(decayTransaction)
} }
} }
}) }
return finalTransactions return finalTransactions
} }

View File

@ -44,8 +44,8 @@ export class User extends BaseEntity {
.where('user.id IN (:...users)', { users: userIds }) .where('user.id IN (:...users)', { users: userIds })
.getMany() .getMany()
const usersIndiced: User[] = [] const usersIndiced: User[] = []
users.forEach((value, index) => { users.forEach((value) => {
usersIndiced[index] = value usersIndiced[value.id] = value
}) })
return usersIndiced return usersIndiced
} }

View File

@ -23,6 +23,7 @@ async function calculateDecayWithInterval(
to: number | Date, to: number | Date,
): Promise<Decay> { ): Promise<Decay> {
const decayStartBlock = await Decay.getDecayStartBlock() const decayStartBlock = await Decay.getDecayStartBlock()
const result = new Decay(undefined) const result = new Decay(undefined)
result.balance = amount result.balance = amount
const fromMillis = typeof from === 'number' ? from : from.getTime() const fromMillis = typeof from === 'number' ? from : from.getTime()
@ -36,14 +37,16 @@ async function calculateDecayWithInterval(
if (decayStartBlock === undefined || decayStartBlock.received.getTime() > toMillis) { if (decayStartBlock === undefined || decayStartBlock.received.getTime() > toMillis) {
return result return result
} }
const decayStartBlockMillis = decayStartBlock.received.getTime()
// if decay start date is before start date we calculate decay for full duration // if decay start date is before start date we calculate decay for full duration
if (decayStartBlock.received.getTime() < fromMillis) { if (decayStartBlockMillis < fromMillis) {
result.decayDuration = toMillis - fromMillis result.decayDuration = toMillis - fromMillis
} }
// if decay start in between start date and end date we caculcate decay from decay start time to end date // if decay start in between start date and end date we caculcate decay from decay start time to end date
else { else {
result.decayDuration = toMillis - decayStartBlock.received.getTime() result.decayDuration = toMillis - decayStartBlockMillis
result.decayStart = (decayStartBlockMillis / 1000).toString()
} }
// js use timestamp in milliseconds but we calculate with seconds // js use timestamp in milliseconds but we calculate with seconds
result.decayDuration /= 1000 result.decayDuration /= 1000