-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathliquidations.js
More file actions
93 lines (86 loc) · 2.48 KB
/
liquidations.js
File metadata and controls
93 lines (86 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
'use strict'
const { preparePrice } = require('bfx-api-node-util')
const numberValidator = require('./validators/number')
const dateValidator = require('./validators/date')
const amountValidator = require('./validators/amount')
const symbolValidator = require('./validators/symbol')
const priceValidator = require('./validators/price')
const boolValidator = require('./validators/bool')
const _flatten = require('lodash/flatten')
const _compact = require('lodash/compact')
const Model = require('./model')
const fields = {
posId: 1,
mtsUpdated: 2,
symbol: 4,
amount: 5,
basePrice: 6,
isMatch: 8,
isMarketSold: 9,
liquidationPrice: 11
}
/**
* Liquidation Info model
*/
class Liquidations extends Model {
/**
* @param {object|Array} data - liquidation data
* @param {number} data.posId - position ID
* @param {number} data.mtsUpdated - timestamp
* @param {string} data.symbol - symbol
* @param {number} data.amount - amount
* @param {number} data.basePrice - base price
* @param {number|boolean} data.isMatch - matched flag
* @param {number|boolean} data.isMarketSold - sold flag
* @param {number} data.liquidationPrice - Price at which the liquidation was triggered
*/
constructor (data = {}) {
super({ data, fields })
}
/**
* @param {object[]|object|Array[]|Array} data - data to convert to POJO
* @returns {object} pojo
*/
static unserialize (data) {
return super.unserialize({ data, fields })
}
/**
* @returns {string} str
*/
toString () {
const {
mtsUpdated, symbol, amount, basePrice, isMatch, isMarketSold, liquidationPrice
} = this
return _compact(_flatten([
new Date(mtsUpdated).toLocaleString(),
symbol,
[amount, '@', basePrice],
isMatch && 'matched',
isMarketSold && 'sold',
['liq', preparePrice(liquidationPrice),]
])).join(' ')
}
/**
* Validates a given liquidation instance
*
* @param {object[]|object|Liquidations[]|Liquidations|Array} data - instance to validate
* @returns {string} error - null if instance is valid
*/
static validate (data) {
return super.validate({
data,
fields,
validators: {
posId: numberValidator,
mtsUpdated: dateValidator,
symbol: symbolValidator,
amount: amountValidator,
basePrice: priceValidator,
isMatch: boolValidator,
isMarketSold: boolValidator,
liquidationPrice: numberValidator
}
})
}
}
module.exports = Liquidations