Add "--monobank-transaction" command

This commit is contained in:
Illya Marchenko 2024-03-30 16:49:51 +02:00
parent f81bcdcadf
commit 876edee3a7
Signed by: stuzer05
GPG Key ID: A6ABAAA9268F9F4F
3 changed files with 43 additions and 12 deletions

@ -14,11 +14,6 @@ func readResponseBody(r *http.Request) (monobank.Transaction, error) {
return monobank.Transaction{}, err
}
//fmt.Println(string(body))
//w.WriteHeader(http.StatusOK)
//return
//body = []byte("{\"type\":\"StatementItem\",\"data\":{\"account\":\"4723djMLsLOCzhoeYjxqRw\",\"statementItem\":{\"id\":\"cSMr2xlFsfWPFeDLTg\",\"time\":1711806353,\"description\":\"Скасування. Bolt\",\"mcc\":4121,\"originalMcc\":4121,\"amount\":10300,\"operationAmount\":10300,\"currencyCode\":980,\"commissionRate\":0,\"cashbackAmount\":0,\"balance\":7974533,\"hold\":false}}}")
LogString(string(body))
// check empty body

29
main.go

@ -1,11 +1,15 @@
package main
import (
"flag"
"fmt"
"github.com/joho/godotenv"
"io"
"log"
"net/http"
"net/http/httptest"
"os"
"strings"
)
// https://api.monobank.ua/docs/index.html#tag/Kliyentski-personalni-dani/paths/~1personal~1statement~1{account}~1{from}~1{to}/get
@ -29,6 +33,30 @@ func main() {
return
}
// flags
flagDoTransaction := flag.String("monobank-transaction", "", "run monobank transaction JSON manually")
flag.Parse()
// manual transaction
if len(*flagDoTransaction) > 0 {
w := httptest.NewRecorder()
r := &http.Request{
Method: http.MethodPost,
Header: make(http.Header),
Body: io.NopCloser(strings.NewReader(*flagDoTransaction)),
}
r.Header.Set("Content-Type", "application/json")
handleWebhook(w, r)
// @todo error logging
//response := w.Result()
//if response.StatusCode != http.StatusOK {
// os.Exit(1)
//}
} else {
// set webhook
http.HandleFunc("/webhook", handleWebhook)
@ -38,4 +66,5 @@ func main() {
if err != nil {
panic(err.Error())
}
}
}

@ -85,7 +85,12 @@ func handleWebhook(w http.ResponseWriter, r *http.Request) {
}
// find matching transaction to delete
isDeleted := false
for _, tRows := range oldTransactions.Data {
if isDeleted {
break
}
for _, tRow := range tRows.Attributes.Transactions {
// validate notes is json
notesBytes := bytes.NewBufferString(tRow.Notes).Bytes()
@ -107,6 +112,8 @@ func handleWebhook(w http.ResponseWriter, r *http.Request) {
// delete transaction
opts := firefly3.TransactionsApiDeleteTransactionOpts{}
firefly3Client.TransactionsApi.DeleteTransaction(context.Background(), tRows.Id, &opts)
isDeleted = true
}
}
}