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:
parent
2e719d1174
commit
e223adfec5
4 changed files with 71 additions and 2 deletions
|
@ -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)"
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
24
monzo_ynab/ynab/client.go
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue