Hunterlong/AuthorizeCIM

View on GitHub
fraud_management.go

Summary

Maintainability
A
0 mins
Test Coverage
package AuthorizeCIM

import (
    "encoding/json"
    "time"
)

func UnsettledBatchList() (*TransactionsList, error) {
    response, err := SendGetUnsettled()
    return response, err
}

func (input TransactionsList) List() ([]BatchTransaction, error) {
    response, err := SendGetUnsettled()
    return response.Transactions, err
}

func updateHeldTransaction() {

}

func (input TransactionsList) Count() int {
    return input.TotalNumInResultSet
}

type UnsettledTransactionsRequest struct {
    GetUnsettledTransactionListRequest GetUnsettledTransactionListRequest `json:"getUnsettledTransactionListRequest"`
}

type GetUnsettledTransactionListRequest struct {
    MerchantAuthentication MerchantAuthentication `json:"merchantAuthentication,omitempty"`
    Status                 string                 `json:"status,omitempty"`
}

type TransactionsList struct {
    Transactions        []BatchTransaction `json:"transactions"`
    TotalNumInResultSet int                `json:"totalNumInResultSet"`
    MessagesResponse
}

type BatchTransaction struct {
    TransID           string    `json:"transId"`
    SubmitTimeUTC     time.Time `json:"submitTimeUTC"`
    SubmitTimeLocal   string    `json:"submitTimeLocal"`
    TransactionStatus string    `json:"transactionStatus"`
    InvoiceNumber     string    `json:"invoiceNumber"`
    FirstName         string    `json:"firstName"`
    LastName          string    `json:"lastName"`
    AccountType       string    `json:"accountType"`
    AccountNumber     string    `json:"accountNumber"`
    SettleAmount      float64   `json:"settleAmount"`
    MarketType        string    `json:"marketType"`
    Product           string    `json:"product"`
    FraudInformation  struct {
        FraudFilterList []string `json:"fraudFilterList"`
        FraudAction     string   `json:"fraudAction"`
    } `json:"fraudInformation"`
}

type UpdateHeldTransactionRequest struct {
    UpdateHeldTransaction UpdateHeldTransaction `json:"updateHeldTransactionRequest"`
}

type UpdateHeldTransaction struct {
    MerchantAuthentication MerchantAuthentication `json:"merchantAuthentication"`
    RefID                  string                 `json:"refId"`
    HeldTransactionRequest HeldTransactionRequest `json:"heldTransactionRequest"`
}

type HeldTransactionRequest struct {
    Action     string `json:"action"`
    RefTransID string `json:"refTransId"`
}

func SendTransactionUpdate(tranx PreviousTransaction, method string) (*TransactionResponse, error) {
    action := UpdateHeldTransactionRequest{
        UpdateHeldTransaction: UpdateHeldTransaction{
            MerchantAuthentication: GetAuthentication(),
            RefID: tranx.RefId,
            HeldTransactionRequest: HeldTransactionRequest{
                Action:     method,
                RefTransID: tranx.RefId,
            },
        },
    }
    jsoned, err := json.Marshal(action)
    if err != nil {
        return nil, err
    }
    response, err := SendRequest(jsoned)
    var dat TransactionResponse
    err = json.Unmarshal(response, &dat)
    if err != nil {
        return nil, err
    }
    return &dat, err
}

func (t PreviousTransaction) Approve() (*TransactionResponse, error) {
    response, err := SendTransactionUpdate(t, "approve")
    return response, err
}

func (t PreviousTransaction) Decline() (*TransactionResponse, error) {
    response, err := SendTransactionUpdate(t, "decline")
    return response, err
}

func SendGetUnsettled() (*TransactionsList, error) {
    action := UnsettledTransactionsRequest{
        GetUnsettledTransactionListRequest: GetUnsettledTransactionListRequest{
            MerchantAuthentication: GetAuthentication(),
            Status:                 "pendingApproval",
        },
    }
    jsoned, err := json.Marshal(action)
    if err != nil {
        return nil, err
    }
    response, err := SendRequest(jsoned)
    var dat TransactionsList
    err = json.Unmarshal(response, &dat)
    if err != nil {
        return nil, err
    }
    return &dat, err
}