Skip to content

Commit 540406f

Browse files
add endoint to retrieve payment request by nonce
1 parent c8362b9 commit 540406f

File tree

5 files changed

+201
-0
lines changed

5 files changed

+201
-0
lines changed

api/api.yaml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1862,6 +1862,32 @@ paths:
18621862
$ref: '#/components/responses/400'
18631863
'500':
18641864
$ref: '#/components/responses/500'
1865+
1866+
/v2/identities/{identifier}/payment-request/nonce/{nonce}:
1867+
get:
1868+
summary: Get Payment Request By Nonce
1869+
operationId: GetPaymentRequestByNonce
1870+
description: Get a specific payment request for the provided identity by nonce.
1871+
tags:
1872+
- Payment
1873+
security:
1874+
- basicAuth: [ ]
1875+
parameters:
1876+
- $ref: '#/components/parameters/pathIdentifier'
1877+
- $ref: '#/components/parameters/pathPaymentNonce'
1878+
responses:
1879+
'200':
1880+
description: Retrieve a payment request
1881+
content:
1882+
application/json:
1883+
schema:
1884+
$ref: '#/components/schemas/CreatePaymentRequestResponse'
1885+
'400':
1886+
$ref: '#/components/responses/400'
1887+
'404':
1888+
$ref: '#/components/responses/404'
1889+
'500':
1890+
$ref: '#/components/responses/500'
18651891

18661892
/v2/payment/settings:
18671893
get:
@@ -3526,6 +3552,13 @@ components:
35263552
schema:
35273553
type: string
35283554

3555+
pathPaymentNonce:
3556+
name: nonce
3557+
in: path
3558+
required: true
3559+
description: Payment nonce
3560+
schema:
3561+
type: string
35293562

35303563
responses:
35313564
'400':

internal/api/api.gen.go

Lines changed: 130 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/api/payment.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,26 @@ func (s *Server) GetPaymentRequest(ctx context.Context, request GetPaymentReques
176176
return GetPaymentRequest200JSONResponse(toCreatePaymentRequestResponse(ctx, paymentRequest)), nil
177177
}
178178

179+
// GetPaymentRequestByNonce is the controller to get payment request by nonce
180+
func (s *Server) GetPaymentRequestByNonce(ctx context.Context, request GetPaymentRequestByNonceRequestObject) (GetPaymentRequestByNonceResponseObject, error) {
181+
issuerDID, err := w3c.ParseDID(request.Identifier)
182+
if err != nil {
183+
log.Error(ctx, "parsing issuer did", "err", err, "did", request.Identifier)
184+
return GetPaymentRequestByNonce400JSONResponse{N400JSONResponse{Message: "invalid issuer did"}}, nil
185+
}
186+
const base10 = 10
187+
nonce, ok := new(big.Int).SetString(request.Nonce, base10)
188+
if !ok {
189+
log.Error(ctx, "parsing nonce on get payment request by nonce", "err", err, "nonce", request.Nonce)
190+
return GetPaymentRequestByNonce400JSONResponse{N400JSONResponse{Message: fmt.Sprintf("invalid nonce: <%s>", request.Nonce)}}, nil
191+
}
192+
paymentRequest, err := s.paymentService.GetPaymentRequestByNonce(ctx, issuerDID, nonce)
193+
if err != nil {
194+
return GetPaymentRequestByNonce500JSONResponse{N500JSONResponse{Message: fmt.Sprintf("can't get payment-request: %s", err)}}, nil
195+
}
196+
return GetPaymentRequestByNonce200JSONResponse(toCreatePaymentRequestResponse(ctx, paymentRequest)), nil
197+
}
198+
179199
// DeletePaymentRequest is the controller to delete payment request
180200
func (s *Server) DeletePaymentRequest(ctx context.Context, request DeletePaymentRequestRequestObject) (DeletePaymentRequestResponseObject, error) {
181201
issuerDID, err := w3c.ParseDID(request.Identifier)

internal/core/ports/payment_service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ type PaymentService interface {
4343
CreatePaymentRequest(ctx context.Context, req *CreatePaymentRequestReq) (*domain.PaymentRequest, error)
4444
GetPaymentRequests(ctx context.Context, issuerDID *w3c.DID, queryParams *domain.PaymentRequestsQueryParams) ([]domain.PaymentRequest, error)
4545
GetPaymentRequest(ctx context.Context, issuerDID *w3c.DID, id uuid.UUID) (*domain.PaymentRequest, error)
46+
GetPaymentRequestByNonce(ctx context.Context, issuerDID *w3c.DID, nonce *big.Int) (*domain.PaymentRequest, error)
4647
DeletePaymentRequest(ctx context.Context, issuerDID *w3c.DID, id uuid.UUID) error
4748
CreatePaymentRequestForProposalRequest(ctx context.Context, proposalRequest *protocol.CredentialsProposalRequestMessage) (*comm.BasicMessage, error)
4849
GetSettings() payments.Config

internal/core/services/payment.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,23 @@ func (p *payment) GetPaymentRequest(ctx context.Context, issuerDID *w3c.DID, ID
235235
return paymentRequests, nil
236236
}
237237

238+
// GetPaymentRequestByNonce returns payment request by nonce and issuer DID
239+
func (p *payment) GetPaymentRequestByNonce(ctx context.Context, issuerDID *w3c.DID, nonce *big.Int) (*domain.PaymentRequest, error) {
240+
paymentReqItem, err := p.paymentsStore.GetPaymentRequestItem(ctx, *issuerDID, nonce)
241+
if err != nil {
242+
log.Error(ctx, "failed to get payment request item by nonce", "err", err, "issuerDID", issuerDID, "nonce", nonce)
243+
return nil, fmt.Errorf("failed to get payment request item by nonce: %w", err)
244+
}
245+
246+
paymentReq, err := p.paymentsStore.GetPaymentRequestByID(ctx, *issuerDID, paymentReqItem.PaymentRequestID)
247+
if err != nil {
248+
log.Error(ctx, "failed to get payment request by ID", "err", err, "issuerDID", issuerDID, "paymentRequestID", paymentReqItem.PaymentRequestID)
249+
return nil, fmt.Errorf("failed to get payment request by ID: %w", err)
250+
}
251+
252+
return paymentReq, nil
253+
}
254+
238255
// DeletePaymentRequest deletes a payment request
239256
func (p *payment) DeletePaymentRequest(ctx context.Context, issuerDID *w3c.DID, ID uuid.UUID) error {
240257
err := p.paymentsStore.DeletePaymentRequest(ctx, *issuerDID, ID)

0 commit comments

Comments
 (0)