From bb94d868ba7f27f3814df240988db88ec6341ab8 Mon Sep 17 00:00:00 2001 From: stuzer05 Date: Wed, 10 Apr 2024 23:24:16 +0300 Subject: [PATCH] Use my monobank api package --- go.mod | 9 ++------- go.sum | 32 ++++++++------------------------ http.go | 2 +- main.go | 12 ++++++++---- webhook.go | 28 ++++++++++++++-------------- 5 files changed, 33 insertions(+), 50 deletions(-) diff --git a/go.mod b/go.mod index 9d3fc00..11be261 100644 --- a/go.mod +++ b/go.mod @@ -4,14 +4,9 @@ go 1.22.2 require ( gitea.stuzer.link/stuzer05/go-firefly3 v0.0.0-20240410091657-a7ef9d02ecd9 + gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410200931-4738cbd4284e github.com/antihax/optional v1.0.0 github.com/joho/godotenv v1.5.1 - github.com/vtopc/go-monobank v0.21.0 ) -require ( - github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect - github.com/vtopc/epoch v1.3.0 // indirect - github.com/vtopc/go-rest v0.3.0 // indirect - golang.org/x/oauth2 v0.19.0 // indirect -) +require golang.org/x/oauth2 v0.19.0 // indirect diff --git a/go.sum b/go.sum index 8b8dfbd..d7cba0a 100644 --- a/go.sum +++ b/go.sum @@ -1,34 +1,18 @@ gitea.stuzer.link/stuzer05/go-firefly3 v0.0.0-20240410091657-a7ef9d02ecd9 h1:YudeO7GocpdRDagqvVjbYEPXK3X2JSwYp2ZCnKyo5jQ= gitea.stuzer.link/stuzer05/go-firefly3 v0.0.0-20240410091657-a7ef9d02ecd9/go.mod h1:t1fQbrfn3dmJPLVsoX3Pof9/3xcSBIYpYl/Iz6qBH5E= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410192145-a523824e66d7 h1:he6tteQWO0mZIcmHCcofi8a60GTXeYoHjFIlZOz51rs= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410192145-a523824e66d7/go.mod h1:y/jOBU1U+NNR5umvDH+scrOWk0byZGZrMb4PHEehyrk= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410195707-3bb97cbca3ef h1:TZzRZ8aEAfcllzAGq3DCKECrT5KBgsqXWncCbg7xAus= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410195707-3bb97cbca3ef/go.mod h1:y/jOBU1U+NNR5umvDH+scrOWk0byZGZrMb4PHEehyrk= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410200638-a2776842062d h1:gNF3QyQ9kj0Sbp2NJ4Div7n1+wv7AFc1sZHjVqItqDY= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410200638-a2776842062d/go.mod h1:y/jOBU1U+NNR5umvDH+scrOWk0byZGZrMb4PHEehyrk= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410200931-4738cbd4284e h1:o9vg8T03c3zJNFDs4L6zbYtjcCjv/kuE6SHhGNOqyyE= +gitea.stuzer.link/stuzer05/go-monobank v0.0.0-20240410200931-4738cbd4284e/go.mod h1:y/jOBU1U+NNR5umvDH+scrOWk0byZGZrMb4PHEehyrk= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/vtopc/epoch v1.3.0 h1:grB1J6FJVfIMbK6GY0LpOO86R4rQZ4oVwHa08USBPKA= -github.com/vtopc/epoch v1.3.0/go.mod h1:oQJwg81RJ2bCV01D4ImQ+cwpcRDUNc66x/9A/6I2RYU= -github.com/vtopc/go-monobank v0.21.0 h1:pW3mX7XvhJIZjJEGEzVFcPI+cD3yAIir/fFA5ei4Zlo= -github.com/vtopc/go-monobank v0.21.0/go.mod h1:gTC/lAouMpz9WfHnXF3RC0JdEPZwnl7P4vBG+htKT3c= -github.com/vtopc/go-rest v0.3.0 h1:kP+5UNeTVQxwRX3tXe/XByuntwZmKArv5/uMdEf1WKo= -github.com/vtopc/go-rest v0.3.0/go.mod h1:t7XPUz57Z+U66vsVIjEm89Uw/NZf486JVAFhq6+mZps= golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/http.go b/http.go index 929e532..5289f40 100644 --- a/http.go +++ b/http.go @@ -3,7 +3,7 @@ package main import ( "encoding/json" "errors" - monobank "github.com/vtopc/go-monobank" + "gitea.stuzer.link/stuzer05/go-monobank" "io" "net/http" ) diff --git a/main.go b/main.go index f27c2cd..0466b70 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,10 @@ package main import ( - "context" "flag" "fmt" + "gitea.stuzer.link/stuzer05/go-monobank" "github.com/joho/godotenv" - monobank "github.com/vtopc/go-monobank" "io" "log" "net/http" @@ -62,8 +61,13 @@ func main() { webhookUrl := `https://` + os.Getenv("MONOBANK_WEBHOOK_DOMAIN") + webhookLocalUrl // register monobank webhook - monobankClient := monobank.NewPersonalClient(nil).WithAuth(monobank.NewPersonalAuthorizer(os.Getenv("MONOBANK_TOKEN"))) - err := monobankClient.SetWebHook(context.Background(), webhookUrl) + monobankClientConf := monobank.NewConfiguration() + monobankClient := monobank.NewAPIClient(monobankClientConf) + + req := monobank.ApiPersonalWebhookPostRequest{} + req = req.XToken(os.Getenv("MONOBANK_TOKEN")) + req = req.SetWebHook(monobank.SetWebHook{WebHookUrl: &webhookUrl}) + _, err := monobankClient.DefaultApi.PersonalWebhookPostExecute(req) if err != nil { log.Fatalln("failed to register monobank webhook") } diff --git a/webhook.go b/webhook.go index 3615bbe..c1c6d88 100644 --- a/webhook.go +++ b/webhook.go @@ -5,9 +5,9 @@ import ( "context" "encoding/json" "fmt" - firefly3 "gitea.stuzer.link/stuzer05/go-firefly3" + "gitea.stuzer.link/stuzer05/go-firefly3" + "gitea.stuzer.link/stuzer05/go-monobank" "github.com/antihax/optional" - monobank "github.com/vtopc/go-monobank" "math" "net/http" "os" @@ -47,11 +47,11 @@ func handleWebhook(w http.ResponseWriter, r *http.Request) { } // find accounts - account := ConfigGetAccountByMonobankId(config, monobankTransaction.Data.AccountID) + account := ConfigGetAccountByMonobankId(config, monobankTransaction.Data.Account) // cancel if one of account ids is empty if len(account.Firefly3Name) == 0 || len(account.MonobankId) == 0 { - LogString("cannot find firefly3 or monobank ids (" + monobankTransaction.Data.AccountID + ")") + LogString("cannot find firefly3 or monobank ids (" + monobankTransaction.Data.Account + ")") w.WriteHeader(http.StatusOK) return } @@ -69,7 +69,7 @@ func handleWebhook(w http.ResponseWriter, r *http.Request) { for _, row := range config.TransactionTypes { // is refund - if slices.Contains(row.NamesRefund, monobankTransaction.Data.Transaction.Description) { + if slices.Contains(row.NamesRefund, *monobankTransaction.Data.StatementItem.Description) { opts := firefly3.TransactionsApiListTransactionOpts{ Limit: optional.NewInt32(999), Type_: optional.NewInterface("withdrawal"), @@ -97,16 +97,16 @@ func handleWebhook(w http.ResponseWriter, r *http.Request) { } // read monobank transaction - var monobankTransaction monobank.Transaction + var monobankTransaction monobank.StatementItemsInner err = json.Unmarshal(notesBytes, &monobankTransaction) if err != nil { continue } // find transaction - sum := int(math.Abs(math.Round(float64(monobankTransaction.Amount/100)))) - int(math.Abs(math.Round(float64(monobankTransaction.CommissionRate/100)))) + sum := int(math.Abs(math.Round(float64(*monobankTransaction.Amount/100)))) - int(math.Abs(math.Round(float64(*monobankTransaction.CommissionRate/100)))) sum2, _ := strconv.ParseFloat(tRow.Amount, 64) - if slices.Contains(row.Names, monobankTransaction.Description) && sum == int(sum2) { + if slices.Contains(row.Names, *monobankTransaction.Description) && sum == int(sum2) { // delete transaction opts := firefly3.TransactionsApiDeleteTransactionOpts{} firefly3Client.TransactionsApi.DeleteTransaction(context.Background(), tRows.Id, &opts) @@ -118,15 +118,15 @@ func handleWebhook(w http.ResponseWriter, r *http.Request) { break } else { // check name & mcc - if !(slices.Contains(row.Names, monobankTransaction.Data.Transaction.Description) || slices.Contains(row.MccCodes, int(monobankTransaction.Data.Transaction.MCC))) { + if !(slices.Contains(row.Names, *monobankTransaction.Data.StatementItem.Description) || slices.Contains(row.MccCodes, int(*monobankTransaction.Data.StatementItem.Mcc))) { continue } // create firefly3 transaction firefly3Transaction := firefly3.TransactionSplitStore{ - Date: time.Unix(monobankTransaction.Data.Transaction.Time.Unix(), 0).Add(time.Hour * 2), + Date: time.Unix(int64(*monobankTransaction.Data.StatementItem.Time), 0).Add(time.Hour * 2), Notes: string(monobankTransactionJson), - Amount: strconv.Itoa(int(math.Abs(math.Round(float64(monobankTransaction.Data.Transaction.Amount/100)))) - int(math.Abs(math.Round(float64(monobankTransaction.Data.Transaction.CommissionRate/100))))), + Amount: strconv.Itoa(int(math.Abs(math.Round(float64(*monobankTransaction.Data.StatementItem.Amount/100)))) - int(math.Abs(math.Round(float64(*monobankTransaction.Data.StatementItem.CommissionRate/100))))), SourceName: account.Firefly3Name, } @@ -163,13 +163,13 @@ func handleWebhook(w http.ResponseWriter, r *http.Request) { break } } - if monobankTransaction.Data.Transaction.CommissionRate > 0 { + if *monobankTransaction.Data.StatementItem.CommissionRate > 0 { firefly3Transactions = append(firefly3Transactions, firefly3.TransactionSplitStore{ Type_: &firefly3TransactionTypeWithdrawal, - Date: time.Unix(monobankTransaction.Data.Transaction.Time.Unix(), 0).Add(time.Hour * 2), + Date: time.Unix(int64(*monobankTransaction.Data.StatementItem.Time), 0).Add(time.Hour * 2), Notes: string(monobankTransactionJson), Description: "Transfer fee", - Amount: strconv.Itoa(int(math.Abs(math.Round(float64(monobankTransaction.Data.Transaction.CommissionRate / 100))))), + Amount: strconv.Itoa(int(math.Abs(math.Round(float64(*monobankTransaction.Data.StatementItem.CommissionRate / 100))))), SourceName: account.Firefly3Name, }) }