@@ -15,33 +15,6 @@ func keyForBase(n string) string { return fmt.Sprintf("b-%s", n) }
15
15
func keyForSimpleTaxes (n string ) string { return fmt .Sprintf ("st-%s" , n ) }
16
16
func keyForTaxRegime (n string ) string { return fmt .Sprintf ("tr-%s" , cnpj .Unmask (n )) }
17
17
18
- // functions to read data from Badger
19
-
20
- func partnersOf (db * badger.DB , n string ) ([]PartnerData , error ) {
21
- p := []PartnerData {}
22
- err := db .View (func (txn * badger.Txn ) error {
23
- i , err := txn .Get ([]byte (keyForPartners (n )))
24
- if errors .Is (err , badger .ErrKeyNotFound ) {
25
- return nil
26
- }
27
- if err != nil {
28
- return fmt .Errorf ("could not get key %s: %w" , keyForPartners (n ), err )
29
- }
30
- v , err := i .ValueCopy (nil )
31
- if err != nil {
32
- return fmt .Errorf ("could not read value for key %s: %w" , keyForPartners (n ), err )
33
- }
34
- if err := json .Unmarshal (v , & p ); err != nil {
35
- return fmt .Errorf ("could not parse partners: %w" , err )
36
- }
37
- return nil
38
- })
39
- if err != nil {
40
- return nil , fmt .Errorf ("error getting partners for %s: %w" , n , err )
41
- }
42
- return p , nil
43
- }
44
-
45
18
func baseOf (db * badger.DB , n string ) (baseData , error ) {
46
19
var d baseData
47
20
err := db .View (func (txn * badger.Txn ) error {
@@ -93,119 +66,52 @@ func simpleTaxesOf(db *badger.DB, n string) (simpleTaxesData, error) {
93
66
}
94
67
95
68
func taxRegimeOf (db * badger.DB , n string ) (TaxRegimes , error ) {
96
- var d TaxRegimes
97
- err := db .View (func (txn * badger.Txn ) error {
98
- i , err := txn .Get ([]byte (keyForTaxRegime (n )))
99
- if errors .Is (err , badger .ErrKeyNotFound ) {
100
- return nil
101
- }
102
- if err != nil {
103
- return fmt .Errorf ("could not get key %s: %w" , keyForSimpleTaxes (n ), err )
104
- }
105
- v , err := i .ValueCopy (nil )
106
- if err != nil {
107
- return fmt .Errorf ("could not read value for key %s: %w" , keyForSimpleTaxes (n ), err )
108
- }
109
- if err := json .Unmarshal (v , & d ); err != nil {
110
- return fmt .Errorf ("could not parse taxes: %w" , err )
69
+ var ts TaxRegimes
70
+ pre := []byte (keyForTaxRegime (n ))
71
+ db .View (func (txn * badger.Txn ) error {
72
+ it := txn .NewIterator (badger .DefaultIteratorOptions )
73
+ defer it .Close ()
74
+ for it .Seek (pre ); it .ValidForPrefix (pre ); it .Next () {
75
+ var t TaxRegime
76
+ i := it .Item ()
77
+ err := i .Value (func (v []byte ) error {
78
+ if err := json .Unmarshal (v , & t ); err != nil {
79
+ return fmt .Errorf ("could not parse tax regime: %w" , err )
80
+ }
81
+ ts = append (ts , t )
82
+ return nil
83
+ })
84
+ if err != nil {
85
+ return err
86
+ }
111
87
}
112
88
return nil
113
89
})
114
- if err != nil {
115
- return TaxRegimes {}, fmt .Errorf ("error getting tax regimes for %s: %w" , n , err )
116
- }
117
- sort .Sort (TaxRegimes (d ))
118
- return d , nil
90
+ sort .Sort (TaxRegimes (ts ))
91
+ return ts , nil
119
92
}
120
93
121
- // functions to write data to Badger
122
-
123
- func mergePartners (db * badger.DB , k , b []byte ) ([]byte , error ) {
124
- curr := []byte ("[]" )
125
- err := db .View (func (tx * badger.Txn ) error {
126
- i , err := tx .Get (k )
127
- if errors .Is (err , badger .ErrKeyNotFound ) {
128
- return nil
129
- }
130
- if err != nil {
131
- return fmt .Errorf ("error getting partner key: %w" , err )
132
- }
133
- curr , err = i .ValueCopy (nil )
134
- if err != nil {
135
- return fmt .Errorf ("error reading partner value: %w" , err )
136
- }
137
- return nil
138
- })
139
- if err != nil {
140
- return nil , fmt .Errorf ("error getting current partners: %w" , err )
141
- }
142
- qsa := []PartnerData {}
143
- if curr != nil {
144
- if err := json .Unmarshal (curr , & qsa ); err != nil {
145
- return nil , fmt .Errorf ("could not parse partners: %w" , err )
146
- }
147
- }
148
- var p PartnerData
149
- if err := json .Unmarshal (b , & p ); err != nil {
150
- return nil , fmt .Errorf ("could not parse partner: %w" , err )
151
- }
152
- qsa = append (qsa , p )
153
- j , err := json .Marshal (& qsa )
154
- if err != nil {
155
- return nil , fmt .Errorf ("could not convert partner to json: %w" , err )
156
- }
157
- return j , nil
158
- }
159
-
160
- func mergeTaxRegimes (db * badger.DB , k , b []byte ) ([]byte , error ) {
161
- curr := []byte ("[]" )
162
- err := db .View (func (tx * badger.Txn ) error {
163
- i , err := tx .Get (k )
164
- if errors .Is (err , badger .ErrKeyNotFound ) {
165
- return nil
166
- }
167
- if err != nil {
168
- return fmt .Errorf ("error getting tax regime key: %w" , err )
169
- }
170
- curr , err = i .ValueCopy (nil )
171
- if err != nil {
172
- return fmt .Errorf ("error reading tax regime value: %w" , err )
94
+ func partnersOf (db * badger.DB , n string ) ([]PartnerData , error ) {
95
+ var ps []PartnerData
96
+ pre := []byte (keyForPartners (n ))
97
+ db .View (func (txn * badger.Txn ) error {
98
+ it := txn .NewIterator (badger .DefaultIteratorOptions )
99
+ defer it .Close ()
100
+ for it .Seek (pre ); it .ValidForPrefix (pre ); it .Next () {
101
+ var p PartnerData
102
+ i := it .Item ()
103
+ err := i .Value (func (v []byte ) error {
104
+ if err := json .Unmarshal (v , & p ); err != nil {
105
+ return fmt .Errorf ("could not parse parter: %w" , err )
106
+ }
107
+ ps = append (ps , p )
108
+ return nil
109
+ })
110
+ if err != nil {
111
+ return err
112
+ }
173
113
}
174
114
return nil
175
115
})
176
- if err != nil {
177
- return nil , fmt .Errorf ("error getting current tax regimes: %w" , err )
178
- }
179
- ts := TaxRegimes {}
180
- if curr != nil {
181
- if err := json .Unmarshal (curr , & ts ); err != nil {
182
- return nil , fmt .Errorf ("could not parse tax regimes: %w" , err )
183
- }
184
- }
185
- var t TaxRegime
186
- if err := json .Unmarshal (b , & t ); err != nil {
187
- return nil , fmt .Errorf ("could not parse tax regime: %w" , err )
188
- }
189
- ts = append (ts , t )
190
- j , err := json .Marshal (& ts )
191
- if err != nil {
192
- return nil , fmt .Errorf ("could not convert tax regime to json: %w" , err )
193
- }
194
- return j , nil
195
- }
196
-
197
- func saveItem (db * badger.DB , s sourceType , k , v []byte ) (err error ) {
198
- if s == partners {
199
- v , err = mergePartners (db , k , v )
200
- if err != nil {
201
- return fmt .Errorf ("error merging partners: %w" , err )
202
- }
203
- }
204
- if s == realProfit || s == presumedProfit || s == arbitratedProfit || s == noTaxes {
205
- v , err = mergeTaxRegimes (db , k , v )
206
- if err != nil {
207
- return fmt .Errorf ("error merging taxes: %w" , err )
208
- }
209
- }
210
- return db .Update (func (tx * badger.Txn ) error { return tx .Set (k , v ) })
116
+ return ps , nil
211
117
}
0 commit comments