From 2d02bcba463b82e6a6854055fbb09e17c0868c2a Mon Sep 17 00:00:00 2001 From: Johnny Luo Date: Fri, 4 Jul 2025 17:05:04 +1000 Subject: [PATCH 1/2] refactor: clean up unused plugin policy methods and update return types in fees handling --- internal/verifierapi/fees.go | 90 ++++++++++++----------------- internal/verifierapi/verifierapi.go | 7 +-- 2 files changed, 39 insertions(+), 58 deletions(-) diff --git a/internal/verifierapi/fees.go b/internal/verifierapi/fees.go index ab8fc8b..bd33904 100644 --- a/internal/verifierapi/fees.go +++ b/internal/verifierapi/fees.go @@ -8,32 +8,6 @@ import ( "github.com/google/uuid" ) -// func (v VerifierApi) CreatePluginPolicy() (ptypes.PluginPolicy, error) { -// url := "/policy" -// method := http.MethodPost -// } -// func (v VerifierApi) UpdatePluginPolicyById() { -// url := "/policy" -// method := http.MethodPut -// } -// func (v VerifierApi) GetAllPluginPolicies() { -// url := "/policies" -// method := http.MethodGet -// } -// func (v VerifierApi) GetPluginPolicyById() { -// url := "/policy/:policyId" -// method := http.MethodGet -// } -// func (v VerifierApi) DeletePluginPolicyById() { -// url := "/policy/:policyId" -// method := http.MethodDelete -// } -// func (v VerifierApi) GetPluginPolicyTransactionHistory() { -// url := "/policies/:policyId/history" -// method := http.MethodGet -// } - -// dto types type FeeDto struct { ID uuid.UUID `json:"id" validate:"required"` Amount int `json:"amount" validate:"required"` @@ -46,68 +20,74 @@ type FeeDto struct { } type FeeHistoryDto struct { - // PolicyId uuid.UUID `json:"policy_id" validate:"required"` - Fees []FeeDto `json:"fees" validate:"required"` - TotalFeesIncurred int `json:"total_fees_incurred" validate:"required"` // Total fees incurred in the smallest unit, e.g., "1000000" for 0.01 VULTI - FeesPendingCollection int `json:"fees_pending_collection" validate:"required"` // Total fees pending collection in the smallest unit, e.g., "1000000" for 0.01 VULTI + PolicyId uuid.UUID `json:"policy_id" validate:"required"` + Fees []FeeDto `json:"fees" validate:"required"` + TotalFeesIncurred int `json:"total_fees_incurred" validate:"required"` // Total fees incurred in the smallest unit, e.g., "1000000" for 0.01 VULTI + FeesPendingCollection int `json:"fees_pending_collection" validate:"required"` // Total fees pending collection in the smallest unit, e.g., "1000000" for 0.01 VULTI } // TODO add auth -func (v VerifierApi) GetPluginPolicyFees(policyId uuid.UUID) (FeeHistoryDto, error) { +func (v VerifierApi) GetPluginPolicyFees(policyId uuid.UUID) (*FeeHistoryDto, error) { url := fmt.Sprintf("/fees/policy/%s", policyId.String()) - v.logger.Debug("Getting plugin policy fees for policy: ", policyId.String()) - v.logger.Debug("URL: ", url) response, err := v.get(url) if err != nil { - return FeeHistoryDto{}, fmt.Errorf("failed to get plugin policy fees: %w", err) + return nil, fmt.Errorf("failed to get plugin policy fees: %w", err) } + defer func() { + if err := response.Body.Close(); err != nil { + v.logger.WithError(err).Error("Failed to close response body") + } + }() if response.StatusCode == http.StatusNotFound { - return FeeHistoryDto{}, fmt.Errorf("policy not found") + return nil, fmt.Errorf("policy not found") } if response.StatusCode != http.StatusOK { - return FeeHistoryDto{}, fmt.Errorf("failed to get plugin policy fees, status code: %d", response.StatusCode) + return nil, fmt.Errorf("failed to get plugin policy fees, status code: %d", response.StatusCode) } var feeHistory APIResponse[FeeHistoryDto] if err := json.NewDecoder(response.Body).Decode(&feeHistory); err != nil { - return FeeHistoryDto{}, fmt.Errorf("failed to decode plugin policy fees response: %w", err) + return nil, fmt.Errorf("failed to decode plugin policy fees response: %w", err) } if feeHistory.Error.Message != "" { - return FeeHistoryDto{}, fmt.Errorf("failed to get plugin policy fees, error: %s, details: %s", feeHistory.Error.Message, feeHistory.Error.DetailedResponse) + return nil, fmt.Errorf("failed to get plugin policy fees, error: %s, details: %s", feeHistory.Error.Message, feeHistory.Error.DetailedResponse) } - return feeHistory.Data, nil + return &feeHistory.Data, nil } // TODO add auth -func (v VerifierApi) GetPublicKeysFees(ecdsaPublicKey string) (FeeHistoryDto, error) { +func (v VerifierApi) GetPublicKeysFees(ecdsaPublicKey string) (*FeeHistoryDto, error) { url := fmt.Sprintf("/fees/publickey/%s", ecdsaPublicKey) response, err := v.get(url) if err != nil { - return FeeHistoryDto{}, fmt.Errorf("failed to get public key fees: %w", err) + return nil, fmt.Errorf("failed to get public key fees: %w", err) } - - //TODO - this probably shouldn't be a 404, just an empty wrapped response with 0 + defer func() { + if err := response.Body.Close(); err != nil { + v.logger.WithError(err).Error("Failed to close response body") + } + }() if response.StatusCode == http.StatusNotFound { - return FeeHistoryDto{}, fmt.Errorf("public key not found") + return nil, fmt.Errorf("public key not found") } if response.StatusCode != http.StatusOK { - return FeeHistoryDto{}, fmt.Errorf("failed to get public key fees, status code: %d", response.StatusCode) + return nil, fmt.Errorf("failed to get public key fees, status code: %d", response.StatusCode) } var feeHistory APIResponse[FeeHistoryDto] if err := json.NewDecoder(response.Body).Decode(&feeHistory); err != nil { - return FeeHistoryDto{}, fmt.Errorf("failed to decode public key fees response: %w", err) + return nil, fmt.Errorf("failed to decode public key fees response: %w", err) } if feeHistory.Error.Message != "" { - return FeeHistoryDto{}, fmt.Errorf("failed to get public key fees, error: %s, details: %s", feeHistory.Error.Message, feeHistory.Error.DetailedResponse) + return nil, fmt.Errorf("failed to get public key fees, error: %s, details: %s", feeHistory.Error.Message, feeHistory.Error.DetailedResponse) } - return feeHistory.Data, nil + return &feeHistory.Data, nil } func (v VerifierApi) GetAllPublicKeysFees() (map[string]FeeHistoryDto, error) { @@ -116,21 +96,25 @@ func (v VerifierApi) GetAllPublicKeysFees() (map[string]FeeHistoryDto, error) { v.logger.Debug("URL: ", url) response, err := v.get(url) if err != nil { - return map[string]FeeHistoryDto{}, fmt.Errorf("failed to get all public key fees: %w", err) + return nil, fmt.Errorf("failed to get all public key fees: %w", err) } if response.StatusCode != http.StatusOK { - return map[string]FeeHistoryDto{}, fmt.Errorf("failed to get all public key fees, status code: %d", response.StatusCode) + return nil, fmt.Errorf("failed to get all public key fees, status code: %d", response.StatusCode) } var apiResponse APIResponse[map[string]FeeHistoryDto] if err := json.NewDecoder(response.Body).Decode(&apiResponse); err != nil { - return map[string]FeeHistoryDto{}, fmt.Errorf("failed to decode all public key fees response: %w", err) + return nil, fmt.Errorf("failed to decode all public key fees response: %w", err) } - defer response.Body.Close() + defer func() { + if err := response.Body.Close(); err != nil { + v.logger.WithError(err).Error("Failed to close response body") + } + }() if apiResponse.Error.Message != "" { - return map[string]FeeHistoryDto{}, fmt.Errorf("failed to get all public key fees, error: %s, details: %s", apiResponse.Error.Message, apiResponse.Error.DetailedResponse) + return nil, fmt.Errorf("failed to get all public key fees, error: %s, details: %s", apiResponse.Error.Message, apiResponse.Error.DetailedResponse) } return apiResponse.Data, nil diff --git a/internal/verifierapi/verifierapi.go b/internal/verifierapi/verifierapi.go index b5fb932..96bf0b8 100644 --- a/internal/verifierapi/verifierapi.go +++ b/internal/verifierapi/verifierapi.go @@ -6,9 +6,7 @@ import ( "github.com/sirupsen/logrus" ) -/* -Verifier API Response types -*/ +// APIResponse is a generic response type for the Verifier API. type APIResponse[T any] struct { Data T `json:"data,omitempty"` Error ErrorResponse `json:"error"` @@ -22,8 +20,7 @@ type ErrorResponse struct { DetailedResponse string `json:"details,omitempty"` } -//Verifier API type - +// VerifierApi is a client for interacting with the Verifier API. type VerifierApi struct { URL string logger *logrus.Logger From af596ec7f96305bf3ba21af3d834417e4ea1064d Mon Sep 17 00:00:00 2001 From: Johnny Luo Date: Fri, 4 Jul 2025 20:04:33 +1000 Subject: [PATCH 2/2] refactor: streamline GetAllPublicKeysFees method by removing redundant logging and ensuring proper response body closure --- internal/verifierapi/fees.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/internal/verifierapi/fees.go b/internal/verifierapi/fees.go index bd33904..a2d60b0 100644 --- a/internal/verifierapi/fees.go +++ b/internal/verifierapi/fees.go @@ -92,26 +92,22 @@ func (v VerifierApi) GetPublicKeysFees(ecdsaPublicKey string) (*FeeHistoryDto, e func (v VerifierApi) GetAllPublicKeysFees() (map[string]FeeHistoryDto, error) { url := "/fees/all" - v.logger.Debug("Getting all public key fees") - v.logger.Debug("URL: ", url) response, err := v.get(url) if err != nil { return nil, fmt.Errorf("failed to get all public key fees: %w", err) } - + defer func() { + if err := response.Body.Close(); err != nil { + v.logger.WithError(err).Error("Failed to close response body") + } + }() if response.StatusCode != http.StatusOK { return nil, fmt.Errorf("failed to get all public key fees, status code: %d", response.StatusCode) } - var apiResponse APIResponse[map[string]FeeHistoryDto] if err := json.NewDecoder(response.Body).Decode(&apiResponse); err != nil { return nil, fmt.Errorf("failed to decode all public key fees response: %w", err) } - defer func() { - if err := response.Body.Close(); err != nil { - v.logger.WithError(err).Error("Failed to close response body") - } - }() if apiResponse.Error.Message != "" { return nil, fmt.Errorf("failed to get all public key fees, error: %s, details: %s", apiResponse.Error.Message, apiResponse.Error.DetailedResponse)