forked from llehouerou/go-degiro
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransaction_cache.go
79 lines (69 loc) · 1.71 KB
/
transaction_cache.go
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
package degiro
import (
"strconv"
"sync"
)
type TransactionCache struct {
sync.RWMutex
transactions []Transaction
positions []HistoricalPosition
}
func newTransactionCache() *TransactionCache {
return &TransactionCache{
RWMutex: sync.RWMutex{},
transactions: []Transaction{},
positions: []HistoricalPosition{},
}
}
func (c *TransactionCache) Merge(transactions []Transaction) {
c.Lock()
defer c.Unlock()
for _, transaction := range transactions {
found := false
for _, t := range c.transactions {
if t.Id == transaction.Id {
found = true
break
}
}
if !found {
c.transactions = append(c.transactions, transaction)
}
}
c.positions = getHistoricalPositionsFromTransactions(c.transactions)
}
func (c *TransactionCache) GetOpenedHistoricalPositionForProduct(productid string) (HistoricalPosition, bool) {
c.RLock()
defer c.RUnlock()
productidInt, err := strconv.Atoi(productid)
if err != nil {
return HistoricalPosition{}, false
}
for _, position := range c.positions {
if position.ProductId == productidInt && position.GetSize() > 0 {
return position, true
}
}
return HistoricalPosition{}, false
}
func (c *TransactionCache) GetHistoricalPositionsForProduct(productid string) []HistoricalPosition {
c.RLock()
defer c.RUnlock()
productidInt, err := strconv.Atoi(productid)
if err != nil {
return []HistoricalPosition{}
}
var res []HistoricalPosition
for _, position := range c.positions {
if position.ProductId == productidInt {
res = append(res, position)
}
}
return res
}
func (c *TransactionCache) GetAllHistoricalPositions() []HistoricalPosition {
c.RLock()
defer c.RUnlock()
var res []HistoricalPosition
return append(res, c.positions...)
}