prune todo for final turn in

main
bel 2023-10-15 13:48:11 -06:00
parent 9e5bfc48bd
commit 5df9fbe5a7
1 changed files with 58 additions and 1 deletions

View File

@ -2,7 +2,6 @@ todo:
- review readme tail to finish // answer 3 questions, gofmt
- todo: go test
subtasks:
- TestAnalyzer_TransactionsFromURLs
- TestAnalyzer_TransactionsFromURLsConcurrent
- amount.go:Rounded probably does NOT handle float precision well... it is float64
tho...
@ -1643,3 +1642,61 @@ done:
* which is bombing because transaction implements fmt.Stringer
* nope turned out that didnt matter though it was sketchy
ts: Sun Oct 15 13:42:02 MDT 2023
- todo: go test
subtasks:
- TestAnalyzer_TransactionsFromURLs
- TestAnalyzer_TransactionsFromURLsConcurrent
- amount.go:Rounded probably does NOT handle float precision well... it is float64
tho...
- my `go mod tidy` actually cleared `go.mod` file, probably weird localhost backwards
compatilble stuff
- transaction.go:Transaction:String not clear if FormatUSD or amount currency should
not be changed, or even what currency Amount is
- transaction.go:Transaction:Sum again doesnt care about Amount currency or vendor/vendee
drift
- analyzer.go:Analyzer:LargestTransaction doesn't specify how to break ties; stable
or latest?
- analyzer.go:Analyzer:Add should dedupe transactions added, but transactions.go:FromFile
will load duplicate transactions from json file so hmmmm
- todo: analyzer.go:Analzyer:Add dedupes each transaction, which is O(n**2)
details: |
* BUT there's no indicator whether order of the array matters, so it's unsafe for me to sort/heapify that stuff
* OR I can store a second copy of all entries in a map, but that risks drift syncing the two
* SO I could create a UniqueTransactions struct {
transactions []Transaction
dedupes map[Transaction]struct{}
}
but that's just doubling RAM usage in a thing that sounds like it could scale infinitely over time
SO I could do a [hash(Transaction)][]*Transaction and compare just a subset. Because it's in RAM and computed live, the hash cardinality could be changed on any release
<------------------ if I have time, do this
- analyzer.go:Analyzer:Add dedupes but what is a duplicate transaction? Transactions
can be pending and then later disappear to have their date updated OR be like
pre-charges on credit cards that later disappear
- analyzer.go:Analyzer:Add is not concurrency-safe
- analyzer.go:Analyzer:ByCategory probably allocates big slices out the gate and
expends to way-too-big-slices by end time. Could do 2 passes (still O(n)) to pre-compute
each category's size. Makes code look weird, though. Hm.
- analyzer.go:Analyzer:Largest should be an anz.transactions.Max() to match Sum
- analyzer.go:Analyzer:Count should be an anz.transactions.Len() to match Sum
- analyzer.go:Analyzer:tranasctionsMean I ASSUME arithmetic mean (sum/count), but
could be another mean not specified (ie geometric)
- analyzer.go:Analyzer:BigSpendersReport assumes no overlapping FirstInitial LastName
cardholders
- transactions.go:TransactionsFromURLs needs streaming json parsing
- todo: transactions.go:TransactionsFromURLs count
details: |
* curl+jq reveals 983 unique transactions.
* My code yields 1000 and test asserts 980 (added to localfile of 188). My equality must be broken and test's must be flexible. curl+jq on file and remote confirm
* it's 1171 transactions. Equaility must not be waht I expect. Gotta look at individual transactions to find what is specified that doesnt match.
* May be float problems,
* nope, set up a UnmarshalJSON to compare each unmarshalled float vs input and it looks K
* may be time zones...
* or casing...
* strings.ToLower(fmt.Sprint(trn)) == strings.ToLower(fmt.Sprint(other)) deduped some file-based transactions but still yielded all 1000 from remote
* which is bombing because transaction implements fmt.Stringer
* nope turned out that didnt matter though it was sketchy
$ curl -sS https://assets.digits.com/uploads/hiring/swift-work-sample/transactions-aa.json | jq -c .[] | grep -A 1 -B 1 73.68.*Munday
{"AgencyName":"OKLAHOMA STATE UNIVERSITY","AgencyNumber":"1000","Amount":"73.68","CardholderFirstInitial":"T","CardholderLastName":"Munday","Description":"3 KA 3206 1 9 EAC","MerchantCategory":"ELECTRICAL PARTS AND EQUIPMENT","PostedDate":"07/31/2013 12:00:00 AM","TransactionDate":"07/11/2013 12:00:00 AM","Vendor":"ANIXTER INC","YearMonth":"201307"}
{"AgencyName":"OKLAHOMA STATE UNIVERSITY","AgencyNumber":"1000","Amount":"73.68","CardholderFirstInitial":"T","CardholderLastName":"Munday","Description":"3 KA 0324 EAC","MerchantCategory":"ELECTRICAL PARTS AND EQUIPMENT","PostedDate":"07/31/2013 12:00:00 AM","TransactionDate":"07/11/2013 12:00:00 AM","Vendor":"ANIXTER INC","YearMonth":"201307"}
* I think the answer key wrongly deduped these similar but different description transactions
ts: Sun Oct 15 13:48:03 MDT 2023