Begin work on YNAB client

After reading these docs
https://api.youneedabudget.com/v1#/Transactions/createTransaction I successfully
made a request to post a transaction to my YNAB account. Hastily created a
client.go that doesn't contain much at the moment.
This commit is contained in:
William Carroll 2020-02-10 23:22:36 +00:00
parent 2e719d1174
commit e223adfec5
4 changed files with 71 additions and 2 deletions

View file

@ -8,4 +8,6 @@ source_up
export monzo_client_id="$(pass show finance/monzo/client-id)" export monzo_client_id="$(pass show finance/monzo/client-id)"
export monzo_client_secret="$(pass show finance/monzo/client-secret)" export monzo_client_secret="$(pass show finance/monzo/client-secret)"
export ynab_personal_access_token="$(pass show finance/youneedabudget.com/personal-access-token)" export ynab_personal_access_token="$(pass show finance/youneedabudget.com/personal-access-token)"
export ynab_account_id="$(pass show finance/youneedabudget.com/personal-access-token)"
export ynab_budget_id="$(pass show finance/youneedabudget.com/budget-id)"
eval "$(lorri direnv)" eval "$(lorri direnv)"

View file

@ -13,10 +13,31 @@ import (
"fmt" "fmt"
) )
var (
ynabAccountID = os.Getenv("ynab_account_id")
)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Business Logic // Business Logic
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
func main() { // Convert a Monzo transaction struct, `tx`, into a YNAB transaction struct.
fmt.Println("To be implemented...") 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() {
txs := monzo.TransactionsLast24Hours()
var ynabTxs []ynabSerde.Transaction{}
for tx := range txs {
append(ynabTxs, toYnab(tx))
}
ynab.PostTransactions(ynabTxs)
os.Exit(0)
} }

View file

@ -4,6 +4,7 @@
:ynab = https://api.youneedabudget.com/v1 :ynab = https://api.youneedabudget.com/v1
:ynab-access-token := (getenv "ynab_personal_access_token") :ynab-access-token := (getenv "ynab_personal_access_token")
:ynab-budget-id := (getenv "ynab_budget_id") :ynab-budget-id := (getenv "ynab_budget_id")
:ynab-account-id := (getenv "ynab_account_id")
# Test # Test
GET :ynab/budgets GET :ynab/budgets
@ -11,6 +12,27 @@ Authorization: Bearer :ynab-access-token
# List transactions # List transactions
GET :ynab/budgets/:ynab-budget-id/transactions GET :ynab/budgets/:ynab-budget-id/transactions
Authorization: Bearer :ynab-access-token
# Post transactions
POST :ynab/budgets/:ynab-budget-id/transactions
Authorization: Bearer :ynab-access-token
Content-Type: application/json
{
"transactions": [
{
"account_id": ":ynab-account-id",
"date": "2019-12-30",
"amount": 10000,
"payee_name": "Richard Stallman",
"memo": "Not so free software after all...",
"cleared": "cleared",
"approved": true,
"flag_color": "red",
"import_id": "xyz-123"
}
]
}
################################################################################ ################################################################################
# Monzo # Monzo

24
monzo_ynab/ynab/client.go Normal file
View file

@ -0,0 +1,24 @@
package client
import (
"serde"
)
// See requests.txt for more details.
func PostTransactions(accountID string, txs []serde.Transaction{}) error {
return map[string]string{
"transactions": [
{
"account_id": accountID,
"date": "2019-12-30",
"amount": 10000,
"payee_name": "Richard Stallman",
"memo": "Not so free software after all...",
"cleared": "cleared",
"approved": true,
"flag_color": "red",
"import_id": "xyz-123"
}
]
}
}