**TL;DR:**
- Delete half-baked packaging attempts (`job.nix`, `token.nix`).
- Ensure golang code compiles.
  - Some "packages" were being treated like "programs" presumably for
    debugging/testing purposes back when I was working on this. Make those
    behave like libraries.
  - Remove stale imports.
  - Fix syntax errors.
  - Miscellaneous other chores.
- Drop `shell.nix` and `use_nix` directive.
Change-Id: I63c275680bac55a3cad3b9cb48d51cdc431fbe48
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7318
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
Reviewed-by: wpcarro <wpcarro@gmail.com>
		
	
			
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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 (
 | 
						|
	"monzoClient"
 | 
						|
	"monzoSerde"
 | 
						|
	"os"
 | 
						|
	"ynabClient"
 | 
						|
	"ynabSerde"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	ynabAccountID = os.Getenv("ynab_account_id")
 | 
						|
)
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////
 | 
						|
// Business Logic
 | 
						|
////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
// Convert a Monzo transaction struct, `tx`, into a YNAB transaction struct.
 | 
						|
func toYnab(tx monzoSerde.Transaction) ynabSerde.Transaction {
 | 
						|
	return ynabSerde.Transaction{
 | 
						|
		Id:        tx.Id,
 | 
						|
		Date:      tx.Created,
 | 
						|
		Amount:    tx.Amount,
 | 
						|
		Memo:      tx.Notes,
 | 
						|
		AccountId: ynabAccountID,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	monzo := monzoClient.Create()
 | 
						|
	txs := monzo.TransactionsLast24Hours()
 | 
						|
	var ynabTxs []ynabSerde.Transaction
 | 
						|
	for _, tx := range txs {
 | 
						|
		ynabTxs = append(ynabTxs, toYnab(tx))
 | 
						|
	}
 | 
						|
	ynabClient.PostTransactions(ynabTxs)
 | 
						|
	os.Exit(0)
 | 
						|
}
 |