linting and use db for db Models

This commit is contained in:
Einhornimmond 2021-09-24 12:32:30 +02:00 committed by einhornimmond
parent 7613db5060
commit aa0e84fbf6
5 changed files with 81 additions and 73 deletions

View File

@ -9,7 +9,7 @@ export class TransactionListInput {
items: number items: number
@Field(() => String) @Field(() => String)
order: "ASC" | "DESC" order: 'ASC' | 'DESC'
} }
@ArgsType() @ArgsType()

View File

@ -6,8 +6,8 @@ import CONFIG from '../../config'
import { TransactionList } from '../models/Transaction' import { TransactionList } from '../models/Transaction'
import { TransactionListInput, TransactionSendArgs } from '../inputs/TransactionInput' import { TransactionListInput, TransactionSendArgs } from '../inputs/TransactionInput'
import { apiGet, apiPost } from '../../apis/HttpRequest' import { apiGet, apiPost } from '../../apis/HttpRequest'
import { User } from '../../typeorm/entity/User' import { User as dbUser } from '../../typeorm/entity/User'
import { Balance } from '../../typeorm/entity/Balance' import { Balance as dbBalance } from '../../typeorm/entity/Balance'
import listTransactions from './listTransactions' import listTransactions from './listTransactions'
import { roundFloorFrom4 } from '../../util/round' import { roundFloorFrom4 } from '../../util/round'
import calculateDecay from '../../util/decay' import calculateDecay from '../../util/decay'
@ -25,22 +25,24 @@ export class TransactionResolver {
if (!result.success) throw new Error(result.data) if (!result.success) throw new Error(result.data)
// load user // load user
const userEntity = await User.findByPubkeyHex(result.data.user.public_hex) const userEntity = await dbUser.findByPubkeyHex(result.data.user.public_hex)
const transactions = await listTransactions(firstPage, items, order, userEntity) const transactions = await listTransactions(firstPage, items, order, userEntity)
// get gdt sum // get gdt sum
const resultGDTSum = await apiPost( const resultGDTSum = await apiPost(`${CONFIG.GDT_API_URL}/GdtEntries/sumPerEmailApi`, {
`${CONFIG.GDT_API_URL}/GdtEntries/sumPerEmailApi`, {email: userEntity.email} email: userEntity.email,
) })
if (!resultGDTSum.success) throw new Error(resultGDTSum.data) if (!resultGDTSum.success) throw new Error(resultGDTSum.data)
transactions.gdtSum = resultGDTSum.data.sum transactions.gdtSum = resultGDTSum.data.sum
// get balance // get balance
const balanceEntity = await Balance.findByUser(userEntity.id) const balanceEntity = await dbBalance.findByUser(userEntity.id)
const now = new Date() const now = new Date()
transactions.balance = roundFloorFrom4(balanceEntity.amount) transactions.balance = roundFloorFrom4(balanceEntity.amount)
transactions.decay = roundFloorFrom4(calculateDecay(balanceEntity.amount, balanceEntity.recordDate, now)) transactions.decay = roundFloorFrom4(
calculateDecay(balanceEntity.amount, balanceEntity.recordDate, now),
)
transactions.decayDate = now.toString() transactions.decayDate = now.toString()
return transactions return transactions

View File

@ -1,48 +1,54 @@
import { User as dbUser } from '../../typeorm/entity/User'
import { User } from '../../typeorm/entity/User'
import { TransactionList, Transaction } from '../models/Transaction' import { TransactionList, Transaction } from '../models/Transaction'
import { UserTransaction } from '../../typeorm/entity/UserTransaction' import { UserTransaction } from '../../typeorm/entity/UserTransaction'
function calculateAndAddDecayTransactions( function calculateAndAddDecayTransactions(
userTransactions: UserTransaction[], userTransactions: UserTransaction[],
user: User, user: dbUser,
decay: boolean, decay: boolean,
skipFirstTransaction:boolean skipFirstTransaction: boolean,
): Transaction[] ): Transaction[] {
{ const transactions: Transaction[] = []
let transactions: Transaction[] = []
return transactions return transactions
} }
export default async function listTransactions( export default async function listTransactions(
firstPage: number, firstPage: number,
items: number, items: number,
order:"ASC" | "DESC", order: 'ASC' | 'DESC',
user:User) : Promise<TransactionList> user: dbUser,
{ ): Promise<TransactionList> {
let limit = items let limit = items
let offset = 0 let offset = 0
let skipFirstTransaction = false let skipFirstTransaction = false
if (firstPage > 1) { if (firstPage > 1) {
offset = (( firstPage - 1 ) * items) - 1; offset = (firstPage - 1) * items - 1
limit++; limit++
} }
if(offset && order == 'ASC') { if (offset && order === 'ASC') {
offset--; offset--
} }
let [userTransactions, userTransactionsCount] = await UserTransaction.findByUserPaged(user.id, limit, offset, order) let [userTransactions, userTransactionsCount] = await UserTransaction.findByUserPaged(
user.id,
limit,
offset,
order,
)
skipFirstTransaction = userTransactionsCount > offset + limit skipFirstTransaction = userTransactionsCount > offset + limit
const decay = !(firstPage > 1) const decay = !(firstPage > 1)
let transactions: Transaction[] = [] const transactions: Transaction[] = []
if (userTransactions.length) { if (userTransactions.length) {
if (order === 'DESC') { if (order === 'DESC') {
userTransactions = userTransactions.reverse() userTransactions = userTransactions.reverse()
} }
let transactions = calculateAndAddDecayTransactions(userTransactions, user, decay, skipFirstTransaction) let transactions = calculateAndAddDecayTransactions(
userTransactions,
user,
decay,
skipFirstTransaction,
)
if (order === 'DESC') { if (order === 'DESC') {
transactions = transactions.reverse() transactions = transactions.reverse()
} }
@ -54,7 +60,7 @@ export default async function listTransactions(
balance: 0, balance: 0,
decay: 0, decay: 0,
decay_date: '', decay_date: '',
transactions: transactions transactions: transactions,
}) })
return transactionList return transactionList

View File

@ -1,5 +1,4 @@
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm' import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm'
import { UserTransaction } from './UserTransaction'
// import { Group } from "./Group" // import { Group } from "./Group"

View File

@ -1,6 +1,4 @@
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, Timestamp, ManyToOne } from 'typeorm' import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, Timestamp } from 'typeorm'
import { User } from './User'
@Entity('state_user_transactions') @Entity('state_user_transactions')
export class UserTransaction extends BaseEntity { export class UserTransaction extends BaseEntity {
@ -22,9 +20,12 @@ export class UserTransaction extends BaseEntity {
@Column({ name: 'balance_date', type: 'timestamp' }) @Column({ name: 'balance_date', type: 'timestamp' })
balanceDate: Timestamp balanceDate: Timestamp
static findByUserPaged(userId: number, limit: number, offset: number, order: "ASC" | "DESC") static findByUserPaged(
:Promise<[UserTransaction[], number]> userId: number,
{ limit: number,
offset: number,
order: 'ASC' | 'DESC',
): Promise<[UserTransaction[], number]> {
return this.createQueryBuilder('userTransaction') return this.createQueryBuilder('userTransaction')
.where('userTransaction.userId = :userId', { userId }) .where('userTransaction.userId = :userId', { userId })
.orderBy('userTransaction.balanceDate', order) .orderBy('userTransaction.balanceDate', order)