Skip to content

Commit 6bd96e5

Browse files
authored
Merge pull request #108 from NodeFactoryIo/fix/mining-rewards-filter
Fix/mining rewards filter
2 parents 1051ba7 + 88df804 commit 6bd96e5

File tree

5 files changed

+26
-17
lines changed

5 files changed

+26
-17
lines changed

src/Migrations/20200203143917-create-minig-rewards-table.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module.exports = {
1313
type: sequelize.STRING
1414
},
1515
rewardAmount: {
16-
type: sequelize.STRING
16+
type: sequelize.NUMERIC(32)
1717
},
1818
nodeId: {
1919
type: sequelize.INTEGER,

src/Models/MiningReward.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export class MiningReward extends Model {
1414
allowNull: false,
1515
},
1616
rewardAmount: {
17-
type: DataTypes.STRING,
17+
type: DataTypes.DECIMAL(32),
1818
allowNull: false,
1919
},
2020
} as ModelAttributes,

src/Services/MiningRewardsService.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import logger from "./Logger";
2-
import * as moment from "moment";
3-
import {unitOfTime} from "moment";
4-
import {Op} from "sequelize";
2+
import datebase from "./Database";
3+
import {filtersSelectQuery} from "../Utils/filterSelectQueryConfig";
54

65
import {Node} from "../Models/Node";
76
import {MiningReward} from "../Models/MiningReward";
@@ -27,16 +26,13 @@ export class MiningRewardsService {
2726
}
2827

2928
public async fetchMiningRewards(nodeId: number, filter: string) {
30-
return await MiningReward.findAll({
31-
raw: true,
32-
where: {
33-
nodeId,
34-
updatedAt: {
35-
[Op.gte]:
36-
moment.utc().subtract(1, filter as unitOfTime.Base).format("YYYY-MM-DD HH:MM:ssZZ")
37-
}
38-
},
39-
order: [['updatedAt', 'DESC']]
40-
});
29+
return await datebase.runQuery<MiningReward>(
30+
`select date_trunc(:period, "updatedAt") "timePeriod", sum("rewardAmount") "rewardSum"
31+
from "MiningRewards"
32+
where "nodeId" = :nodeId
33+
and "updatedAt" >= now() - interval :filter
34+
group by date_trunc(:period, "updatedAt")
35+
order by "timePeriod" desc;`,
36+
filtersSelectQuery(nodeId, filter));
4137
}
4238
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import {QueryTypes, QueryOptionsWithType} from "sequelize";
2+
3+
export function filtersSelectQuery(nodeId: number, filter: string): QueryOptionsWithType<QueryTypes.SELECT> {
4+
return {
5+
replacements: {
6+
filter: `1 ${filter}`,
7+
nodeId: nodeId,
8+
period: filter == "day" ? "hour" : "day"
9+
},
10+
type: QueryTypes.SELECT
11+
}
12+
}

test/unit/Services/MiningRewardsService.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {expect} from "chai";
22
import {createSandbox, SinonSandbox} from "sinon";
33
import logger from "../../../src/Services/Logger";
44
import sinon from "sinon";
5+
import database from "../../../src/Services/Database";
56
import {MiningRewardsService} from "../../../src/Services/MiningRewardsService";
67
import {MiningReward} from "../../../src/Models/MiningReward";
78

@@ -14,7 +15,7 @@ describe("MiningRewards", function () {
1415
beforeEach(function () {
1516
sandbox = createSandbox();
1617
miningRewardsService = new MiningRewardsService();
17-
miningRewardsFindStub = sinon.stub(MiningReward, "findAll");
18+
miningRewardsFindStub = sinon.stub(database, "runQuery");
1819
});
1920

2021
afterEach(function () {

0 commit comments

Comments
 (0)