2020-02-06 00:28:20 +01:00
|
|
|
// Exporting Monzo transactions to my YouNeedABudget.com (i.e. YNAB)
|
|
|
|
// account. YNAB unfortunately doesn't currently offer an Monzo integration. As
|
|
|
|
// a workaround and a practical excuse to learn Go, I decided to write one
|
|
|
|
// myself.
|
|
|
|
//
|
|
|
|
// This job is going to run N times per 24 hours. Monzo offers webhooks for
|
|
|
|
// reacting to certain types of events. I don't expect I'll need realtime data
|
|
|
|
// for my YNAB integration. That may change, however, so it's worth noting.
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2021-12-14 04:51:48 +01:00
|
|
|
"monzoSerde"
|
2021-12-18 14:03:15 +01:00
|
|
|
"os"
|
2020-02-06 00:28:20 +01:00
|
|
|
)
|
|
|
|
|
2020-02-11 00:22:36 +01:00
|
|
|
var (
|
|
|
|
ynabAccountID = os.Getenv("ynab_account_id")
|
|
|
|
)
|
|
|
|
|
2020-02-06 00:28:20 +01:00
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Business Logic
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2020-02-11 00:22:36 +01:00
|
|
|
// Convert a Monzo transaction struct, `tx`, into a YNAB transaction struct.
|
|
|
|
func toYnab(tx monzoSerde.Transaction) ynabSerde.Transaction {
|
|
|
|
return ynabSerde.Transaction{
|
2021-12-18 14:03:15 +01:00
|
|
|
Id: tx.Id,
|
|
|
|
Date: tx.Created,
|
|
|
|
Amount: tx.Amount,
|
|
|
|
Memo: tx.Notes,
|
2020-02-11 00:22:36 +01:00
|
|
|
AccountId: ynabAccountID,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-06 00:28:20 +01:00
|
|
|
func main() {
|
2020-02-11 00:22:36 +01:00
|
|
|
txs := monzo.TransactionsLast24Hours()
|
2021-12-14 04:51:48 +01:00
|
|
|
var ynabTxs []ynabSerde.Transaction
|
2020-02-11 00:22:36 +01:00
|
|
|
for tx := range txs {
|
|
|
|
append(ynabTxs, toYnab(tx))
|
|
|
|
}
|
|
|
|
ynab.PostTransactions(ynabTxs)
|
|
|
|
os.Exit(0)
|
2020-02-06 00:28:20 +01:00
|
|
|
}
|