Skip to content

Commit

Permalink
[OTE-752] Add totalVolume and isWhitelistAffiliate to wallets table (#…
Browse files Browse the repository at this point in the history
…2166)

(cherry picked from commit ecc5df6)

# Conflicts:
#	indexer/packages/postgres/__tests__/helpers/constants.ts
#	indexer/packages/postgres/src/types/query-types.ts
  • Loading branch information
jerryfan01234 authored and mergify[bot] committed Aug 29, 2024
1 parent 1a7d4b7 commit c8b3b19
Show file tree
Hide file tree
Showing 13 changed files with 131 additions and 43 deletions.
16 changes: 16 additions & 0 deletions indexer/packages/postgres/__tests__/helpers/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,16 +132,32 @@ export const isolatedSubaccountId2: string = SubaccountTable.uuid(
export const defaultWallet: WalletCreateObject = {
address: defaultAddress,
totalTradingRewards: denomToHumanReadableConversion(0),
totalVolume: '0',
isWhitelistAffiliate: false,
};

export const defaultWallet2: WalletCreateObject = {
address: defaultWalletAddress,
totalTradingRewards: denomToHumanReadableConversion(1),
totalVolume: '0',
isWhitelistAffiliate: false,
};

<<<<<<< HEAD
=======
export const vaultWallet: WalletCreateObject = {
address: vaultAddress,
totalTradingRewards: denomToHumanReadableConversion(0),
totalVolume: '0',
isWhitelistAffiliate: false,
};

>>>>>>> ecc5df61 ([OTE-752] Add totalVolume and isWhitelistAffiliate to wallets table (#2166))
export const defaultWallet3: WalletCreateObject = {
address: defaultAddress2,
totalTradingRewards: denomToHumanReadableConversion(0),
totalVolume: '0',
isWhitelistAffiliate: true,
};

// ============== Assets ==============
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,8 @@ describe('Transfer store', () => {
await WalletTable.create({
address: defaultWalletAddress,
totalTradingRewards: '0',
totalVolume: '0',
isWhitelistAffiliate: false,
});
const invalidDeposit: TransferCreateObject = {
...defaultDeposit,
Expand Down Expand Up @@ -353,6 +355,8 @@ describe('Transfer store', () => {
await WalletTable.create({
address: defaultWalletAddress,
totalTradingRewards: '0',
totalVolume: '0',
isWhitelistAffiliate: false,
});
await Promise.all([
TransferTable.create(defaultTransfer),
Expand Down
34 changes: 31 additions & 3 deletions indexer/packages/postgres/__tests__/stores/wallet-table.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { WalletFromDatabase } from '../../src/types';
import { clearData, migrate, teardown } from '../../src/helpers/db-helpers';
import { defaultWallet2 } from '../helpers/constants';
import { defaultWallet2, defaultWallet3 } from '../helpers/constants';
import * as WalletTable from '../../src/stores/wallet-table';

describe('Wallet store', () => {
Expand All @@ -27,10 +27,18 @@ describe('Wallet store', () => {
);

expect(wallet).toEqual(expect.objectContaining(defaultWallet2));
await WalletTable.upsert(defaultWallet2);
await WalletTable.upsert({
...defaultWallet2,
isWhitelistAffiliate: true,
totalVolume: '100.1',
});
wallet = await WalletTable.findById(defaultWallet2.address);

expect(wallet).toEqual(expect.objectContaining(defaultWallet2));
expect(wallet).toEqual(expect.objectContaining({
...defaultWallet2,
isWhitelistAffiliate: true,
totalVolume: '100.1',
}));
});

it('Successfully finds all Wallets', async () => {
Expand All @@ -39,6 +47,8 @@ describe('Wallet store', () => {
WalletTable.create({
address: 'fake_address',
totalTradingRewards: '0',
totalVolume: '0',
isWhitelistAffiliate: false,
}),
]);

Expand All @@ -64,4 +74,22 @@ describe('Wallet store', () => {

expect(wallet).toEqual(expect.objectContaining(defaultWallet2));
});

it('Successfully finds wallets by whitelist flag', async () => {
await Promise.all([
WalletTable.create(defaultWallet3),
WalletTable.create(defaultWallet2),
]);

const wallets: WalletFromDatabase[] = await WalletTable.findAll(
{
isWhitelistAffiliate: true,
},
[],
{ readReplica: true },
);

expect(wallets.length).toEqual(1);
expect(wallets[0]).toEqual(expect.objectContaining(defaultWallet3));
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import * as Knex from 'knex';

export async function up(knex: Knex): Promise<void> {
return knex
.schema
.alterTable('wallets', (table) => {
table.decimal('totalVolume', null).defaultTo(0).notNullable();
table.boolean('isWhitelistAffiliate').defaultTo(false).notNullable();
});
}

export async function down(knex: Knex): Promise<void> {
return knex
.schema
.alterTable('wallets', (table) => {
table.dropColumn('totalVolume');
table.dropColumn('isWhitelistAffiliate');
});
}
11 changes: 11 additions & 0 deletions indexer/packages/postgres/src/models/wallet-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,14 @@ export default class WalletModel extends BaseModel {
required: [
'address',
'totalTradingRewards',
'totalVolume',
'isWhitelistAffiliate',
],
properties: {
address: { type: 'string' },
totalTradingRewards: { type: 'string', pattern: NonNegativeNumericPattern },
totalVolume: { type: 'string', pattern: NonNegativeNumericPattern },
isWhitelistAffiliate: { type: 'boolean' },
},
};
}
Expand All @@ -57,6 +61,9 @@ export default class WalletModel extends BaseModel {
static get sqlToJsonConversions() {
return {
address: 'string',
totalTradingRewards: 'string',
totalVolume: 'string',
isWhitelistAffiliate: 'boolean',
};
}

Expand All @@ -65,4 +72,8 @@ export default class WalletModel extends BaseModel {
address!: string;

totalTradingRewards!: string;

totalVolume!: string;

isWhitelistAffiliate!: boolean;
}
6 changes: 6 additions & 0 deletions indexer/packages/postgres/src/stores/wallet-table.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
export async function findAll(
{
address,
isWhitelistAffiliate,
limit,
}: WalletQueryConfig,
requiredFields: QueryableField[],
Expand All @@ -27,6 +28,7 @@ export async function findAll(
verifyAllRequiredFields(
{
address,
isWhitelistAffiliate,
limit,
} as QueryConfig,
requiredFields,
Expand All @@ -41,6 +43,10 @@ export async function findAll(
baseQuery = baseQuery.where(WalletColumns.address, address);
}

if (isWhitelistAffiliate !== undefined) {
baseQuery = baseQuery.where(WalletColumns.isWhitelistAffiliate, isWhitelistAffiliate);
}

if (options.orderBy !== undefined) {
for (const [column, order] of options.orderBy) {
baseQuery = baseQuery.orderBy(
Expand Down
2 changes: 2 additions & 0 deletions indexer/packages/postgres/src/types/db-model-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ export interface SubaccountFromDatabase extends IdBasedModelFromDatabase {
export interface WalletFromDatabase {
address: string,
totalTradingRewards: string,
totalVolume: string,
isWhitelistAffiliate: boolean,
}

export interface PerpetualPositionFromDatabase extends IdBasedModelFromDatabase {
Expand Down
6 changes: 6 additions & 0 deletions indexer/packages/postgres/src/types/query-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ export enum QueryableField {
USERNAME = 'username',
TIMESPAN = 'timeSpan',
RANK = 'rank',
IS_WHITELIST_AFFILIATE = 'isWhitelistAffiliate',
}

export interface QueryConfig {
Expand All @@ -109,7 +110,12 @@ export interface SubaccountUsernamesQueryConfig extends QueryConfig {
}

export interface WalletQueryConfig extends QueryConfig {
<<<<<<< HEAD
[QueryableField.ADDRESS]?: string;
=======
[QueryableField.ADDRESS]?: string,
[QueryableField.IS_WHITELIST_AFFILIATE]?: boolean,
>>>>>>> ecc5df61 ([OTE-752] Add totalVolume and isWhitelistAffiliate to wallets table (#2166))
}

export interface PerpetualPositionQueryConfig extends QueryConfig {
Expand Down
6 changes: 6 additions & 0 deletions indexer/packages/postgres/src/types/wallet-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
export interface WalletCreateObject {
address: string,
totalTradingRewards: string,
totalVolume: string,
isWhitelistAffiliate: boolean,
}

export interface WalletUpdateObject {
address: string,
totalTradingRewards: string,
totalVolume: string,
isWhitelistAffiliate: boolean,
}

export enum WalletColumns {
address = 'address',
totalTradingRewards = 'totalTradingRewards',
totalVolume = 'totalVolume',
isWhitelistAffiliate = 'isWhitelistAffiliate',
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ import {
} from '@dydxprotocol-indexer/postgres/build/__tests__/helpers/constants';
import Big from 'big.js';

const defaultWallet = {
...testConstants.defaultWallet,
address: defaultWalletAddress, // defaultWalletAddress != testConstants.defaultWallet.address

};

describe('transfers-controller#V4', () => {
beforeAll(async () => {
await dbHelpers.migrate();
Expand All @@ -53,10 +59,8 @@ describe('transfers-controller#V4', () => {
createdAt: testConstants.createdDateTime.toISO(),
createdAtHeight: testConstants.createdHeight,
};
await WalletTable.create({
address: testConstants.defaultWalletAddress,
totalTradingRewards: '0',
});
// use wallet2 to not create duplicate
await WalletTable.create(testConstants.defaultWallet2);
await Promise.all([
TransferTable.create(testConstants.defaultTransfer),
TransferTable.create(transfer2),
Expand Down Expand Up @@ -177,10 +181,7 @@ describe('transfers-controller#V4', () => {
createdAt: testConstants.createdDateTime.toISO(),
createdAtHeight: testConstants.createdHeight,
};
await WalletTable.create({
address: testConstants.defaultWalletAddress,
totalTradingRewards: '0',
});
await WalletTable.create(defaultWallet);
await Promise.all([
TransferTable.create(testConstants.defaultTransfer),
TransferTable.create(transfer2),
Expand Down Expand Up @@ -458,10 +459,7 @@ describe('transfers-controller#V4', () => {
createdAt: testConstants.createdDateTime.toISO(),
createdAtHeight: testConstants.createdHeight,
};
await WalletTable.create({
address: testConstants.defaultWalletAddress,
totalTradingRewards: '0',
});
await WalletTable.create(defaultWallet);
await Promise.all([
TransferTable.create(testConstants.defaultTransfer),
TransferTable.create(transfer2),
Expand Down Expand Up @@ -582,10 +580,7 @@ describe('transfers-controller#V4', () => {
createdAt: testConstants.createdDateTime.toISO(),
createdAtHeight: testConstants.createdHeight,
};
await WalletTable.create({
address: testConstants.defaultWalletAddress,
totalTradingRewards: '0',
});
await WalletTable.create(defaultWallet);
await Promise.all([
TransferTable.create(testConstants.defaultTransfer),
TransferTable.create(transfer2),
Expand Down Expand Up @@ -735,10 +730,7 @@ describe('transfers-controller#V4', () => {
createdAt: testConstants.createdDateTime.toISO(),
createdAtHeight: testConstants.createdHeight,
};
await WalletTable.create({
address: testConstants.defaultWalletAddress,
totalTradingRewards: '0',
});
await WalletTable.create(defaultWallet);
await Promise.all([
TransferTable.create(testConstants.defaultTransfer),
TransferTable.create(transfer2),
Expand Down Expand Up @@ -821,10 +813,7 @@ describe('transfers-controller#V4', () => {
createdAt: createdDateTime.toISO(),
createdAtHeight: createdHeight,
};
await WalletTable.create({
address: testConstants.defaultWalletAddress,
totalTradingRewards: '0',
});
await WalletTable.create(defaultWallet);
await Promise.all([
TransferTable.create(transferFromNonParent),
TransferTable.create(transferToNonParent),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,9 @@ describe('tradingRewardHandler', () => {
const wallet: WalletFromDatabase | undefined = await WalletTable.findById(
testConstants.defaultWallet.address,
);

expect(wallet).toEqual({
address: testConstants.defaultWallet.address,
...testConstants.defaultWallet,
totalTradingRewards: testConversionHelpers.denomToHumanReadableConversion(1_000_000_000),
});
});
Expand All @@ -195,7 +196,7 @@ describe('tradingRewardHandler', () => {
});

await WalletTable.update({
address: testConstants.defaultWallet.address,
...testConstants.defaultWallet,
totalTradingRewards: testConversionHelpers.denomToHumanReadableConversion(1_000_000_000),
});

Expand All @@ -204,7 +205,7 @@ describe('tradingRewardHandler', () => {
testConstants.defaultWallet.address,
);
expect(wallet).toEqual({
address: testConstants.defaultWallet.address,
...testConstants.defaultWallet,
totalTradingRewards: testConversionHelpers.denomToHumanReadableConversion(2_000_000_000),
});
});
Expand Down
Loading

0 comments on commit c8b3b19

Please sign in to comment.